Ska programmera Atmega, behöver begreppsförklaringar

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
mattswe
Inlägg: 159
Blev medlem: 20 augusti 2012, 13:27:51

Ska programmera Atmega, behöver begreppsförklaringar

Inlägg av mattswe »

Hej!
Jag tänkte programmera några Atmel-microcontrollers direkt på breadboarden. (Just nu har jag en Atmel168 och några ATtiny45 ligger på arbetsbänken) Jag har grejat lite med en Arduino Nano, och jag har en AVRISP MK2. Jag håller just nu på att försöka få programmeringen till breadboard att fungera både från Arduino IDE och från Atmel Studio 6. Från Arduino IDE går det inte bra, den verkar inte hitta AVRISP MK2n. Från Studio går det halvbra. Jag har kontakt och kan föra över program, men allt lirar inte ännu om man säger. (Faktum är att jag kör Arduino-kod i Studio 6. Inkluderar core-libbet. Det kompilerar som en dröm, men programmet verkar inte exekvera riktigt som det ska i controllern. Tror att det kanske har med kontrollerns klocka (ext. crystal) att göra, alltså mina fuse-inställningar).

Hur som helst, jag är lite förvirrad av begreppen.
När man läser på nätet om detta så talas det mycket om bootloadern, samt fuses. Från Studio 6 kan jag ju programmera fuses, vilket bland annat påverkar vilken klocka kontrollern använder. Så långt är jag hyfsat med. Men vad är bootloadern? Är det Arduinos begrepp för fuses (alltså samma sak)? Ibland när man läser får man uppfattningen att när man väl installerat Arduinos bootloader så går det inte längre att ta bort den/ändra på den. Samma intryck kan man få när man läser om inställning av klockan från Studio. Stämmer verkligen detta?

En fundering till, förresten. När man läser tutorials om Studio, även v. 6, så rekommenderas man att flasha (både prog. och fuses) med AVRdude. Varför då? Är det något fel på Studio 6?

Tacksam för lite hjälp med begreppen.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Ska programmera Atmega, behöver bekgreppsförklaringar

Inlägg av sodjan »

> Från Arduino IDE går det inte bra, den verkar inte hitta AVRISP MK2n.

Fungerar över huvudtaget Arduinomiljön på det sättet ??
Snackar inte Arduino IDE'n direkt med bootloadern i Arduino'n ?

> men programmet verkar inte exekvera riktigt som det ska i controllern.

Vad betyder "inte ... riktigt som det ska" mer konkret?
Förväntar sig inte Ardinokoden att det ska finnas en del "runtime"
prylar i AVR'en innan? Jag är lite os'ker där, men vi vet ju inte heller
vad det är som inte fungerar.

> Men vad är bootloadern?

Det är det som Arduino IDE't pratar med för att ladda program.

> Är det Arduinos begrepp för fuses (alltså samma sak)?

Nej, absolut inte.
mattswe
Inlägg: 159
Blev medlem: 20 augusti 2012, 13:27:51

Re: Ska programmera Atmega, behöver bekgreppsförklaringar

Inlägg av mattswe »

> Från Arduino IDE går det inte bra, den verkar inte hitta AVRISP MK2n.
Fungerar över huvudtaget Arduinomiljön på det sättet ??
Snackar inte Arduino IDE'n direkt med bootloadern i Arduino'n ?
Helt riktigt, Arduino IDEn snackar direkt med bootloadern, men det finns på arduino.cc http://arduino.cc/en/Main/Standalone ett exempel på hur man programmerar en controller på en breadboard från IDEn. En AVRISP mk2 används då för att installera bootloadern. Man använder alltså IDEn men inte någon Arduino-hårdvara. Det ska alltså gå att installera bootloadern mha AVRISP mk2, men min IDE hittar inte den anslutna AVRISPen.
Vad betyder "inte ... riktigt som det ska" mer konkret?
Tja, från Studio 6 programmerar jag fuses och flashar programmet (försöker använda de fuse-värden som jag hittar i arduinos boards.txt. Jag simulerar helt enkelt ett Arduino Nano, fastän jag har controllern på en breadboard. corelibbet hämtar jag från en kompilering i Arduinos IDE, med rätt controller. Sedan plockar jag alltså även fuse-värdena från Arduino-miljön). Allt verkar gå bra, men programmet fungerar inte (det fungerar på ett Arduino Nano, en led ska blinka). Jag noterar dock att led:en är tänd eller släkt lite beroende på vad jag skriver i koden, så koden exekveras uppenbarligen, men effekten blir inte den önskade.

Det är väldigt smidigt att programmera Arduinon med dess lib, men Studio är ett överlägset utvecklingsverktyg, så jag försöker alltså ta det bästa från två världar här. Jag har sett artiklar på nätet som hävdar att det ska vara möjligt. http://www.jayconsystems.com/tutorial/atmerpt2/
> Men vad är bootloadern?
Det är det som Arduino IDE't pratar med för att ladda program.
Ok, så Studio 6 installerar också en bootloader? Ligger den inbakad i hex-filen?
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Ska programmera Atmega, behöver bekgreppsförklaringar

Inlägg av Swech »

Hur ser din koppling ut?
En varning, pilla inte på fuses innan du fått ordentlig kontakt med processorn.
Det kan sluta med att du råkar slå av resetpinnen och då är det mycket svårt
att få igång det hela igen.

Så... först skall du försöka få AVR studio att identifiera att rätt AVR krets detekteras.
Innan du får till detta så försök inte programmera.

Swech
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Ska programmera Atmega, behöver bekgreppsförklaringar

Inlägg av sodjan »

> Det ska alltså gå att installera bootloadern mha AVRISP mk2...

Japp, det är en helt "vanlig" AVR programmering och det har inte ett smack med Arduino IDE't att göra !

> men min IDE hittar inte den anslutna AVRISPen.

Nej, självklart. Arduino IDE't har ingenting med (behöve inte) en AVRISP

> fastän jag har controllern på en breadboard.

*Med* laddad bootloader ?

> Ok, så Studio 6 installerar också en bootloader?...

Du kan programmera vilket AVR program du vill, t.ex en bootloader.

> Ligger den inbakad i hex-filen?

Bootloadern är (sannolikt!) en helt egen HEX fil (för att kunna laddas separat i förväg).
Du laddar alltså bootloadern innan du gör något Arduino programmering alls.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Ska programmera Atmega, behöver bekgreppsförklaringar

Inlägg av sodjan »

> Så... först skall du försöka få AVR studio att identifiera att rätt AVR krets detekteras.
> Innan du får till detta så försök inte programmera.

Problemet är att han försöker köra Arduino IDE't mot AVRISP'en.
Jag tror inte att det varken är tänkt så eller att det ens fungerar.
Om jag inte har missförstått allt helt...
Användarvisningsbild
adent
Inlägg: 4245
Blev medlem: 27 november 2008, 22:56:23
Ort: Utanför Jönköping
Kontakt:

Re: Ska programmera Atmega, behöver bekgreppsförklaringar

Inlägg av adent »

Lite förtydlingar av ovanstående:

1. Med en AVRISP kan du "med våld" trycka in kod rätt in i processorn på valfritt ställe (Använder SPI-porten i ett speciellt läge).
2. En "vanlig" Arduino kräver ingen AVRISP. Utan använder serieporten för att skicka in program.

Eftersom en AVR-processor inte har något stöd för att ta emot program via en serieport så lägger man först in ett litet AVR-program i AVR:en kallat en bootloader (Detta kan man göra via AVRISP). Detta lilla program kan i sin tur ta emot ett program via serieporten och stoppa in det i AVR:en utan att radera sig självt. Det ligger nu alltså två "program" i AVR:en.

Nu vet jag inte exakt hur bootloadern i Arduino fungerar, men principen är att den ska vara hyffsat osynlig i normal drift, kanske är det så att den vid spänningspåslag körs igång, upptäcker att det finns ett applikationsprogram och genast drar igång det istället. Då körs bara ditt applikationsprogram. Om du på ett eller annat sätt vill ladda in ett nytt applikationsprogram kan du göra det genom att på något vis trigga igång bootloadern.

Jag gissar att man utan problem kan konfigurera upp AVR Studio 6 att via AVRISP:n lägga de applikationsprogram du gör på rätt ställe i AVR:en. (På samma ställe som bootloadern skulle gjort). För det kan vara så att bootloadern även ställer in lite saker i processorn på ett visst sätt innan den drar igång applikationsprogrammet.

Det är tyvärr en del spekulationer om hur just Arduinos bootloader uppför sig, men det ger dig kanske något att utgå från i vidare sökning.

Hoppas det förklarar mer än förvirrar.

MVH Mikael
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Ska programmera Atmega, behöver bekgreppsförklaringar

Inlägg av sodjan »

Jag har för mig (från en annan tråd) att bootloadern har ett par sekunder
i början där den lyssnar efter IDE't. Om det är "tyst" så startar den applikationen
som redan var laddad. Detta var ett problem vid tändningen av belysningen i
ett nyckelskåp, om jag inte minns rätt. Att det är gjort så är nog för att
förenkla så långt det går. Annars behöver man en fysisk strapp eller liknande
för att bygla om mellan "prorammering" och "körning".

> Jag gissar att man utan problem kan konfigurera upp AVR Studio 6 att via AVRISP:n lägga de applikationsprogram du gör på rätt ställe i AVR:en.

Det förutsätter bl.a att IDE't kan sparar Arduino applikationer i ett standardiserat format (typ HEX)
som AVRIPS'n sedan kan läsa. Inget jag skulle förutsätta, jag vet inte om det ens är sannolikt... :-)

Det är också mycket möjligt att Arduino applikationer *måste* laddas via bootloadern
för att den (bootloadern) över huvudtaget ska veta att det finns en applikation "laddad".
mattswe
Inlägg: 159
Blev medlem: 20 augusti 2012, 13:27:51

Re: Ska programmera Atmega, behöver bekgreppsförklaringar

Inlägg av mattswe »

Saken är den att í Arduino IDEn finns en funktion för att ladda en Arduino-bootloader med exempelvis en AVRISP mkii. Men så länge IDEn inte hittar min AVRISP så kan jag inte använda den funktionen. Efter ytterligare lite googlande så verkar det som att AVRISP-drivrutinerna från Studio resp. Arduino IDE (AVRdude) kan krocka...
Ska se om det går att hitta denna Arduino-bootloader och installera den från Studio istället...
Det låter som att det är Arduino-bootloadern som fattas för att controllern ska fungera korrekt. Det går ju bra att sätta fuse:arna i Studio (värdena hämtade från Arduinomiljön) och att flasha programmet i Studio (kompilerat med corelib från Arduino).
Användarvisningsbild
adent
Inlägg: 4245
Blev medlem: 27 november 2008, 22:56:23
Ort: Utanför Jönköping
Kontakt:

Re: Ska programmera Atmega, behöver bekgreppsförklaringar

Inlägg av adent »

Vad gäller MSP430 och dess IDE:er (IAR och CodeComposer) så kan man m.h.a. länk-filer till länkaren tala om exakt var man vill ha sin kod i flash.

Vad gäller arduinons bootloader: möjligen att man kanske måste skriva nån liten byte någonstans för att bootloadern ska veta att den har ett applikationsprogram laddat.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Ska programmera Atmega, behöver bekgreppsförklaringar

Inlägg av sodjan »

> Det låter som att det är Arduino-bootloadern som fattas för att controllern ska fungera korrekt.

Den "fungerar" även utan bootloader, men inte direkt från Arduino IDE't... :-)

Men OK, bra om Arduino IDE't har en funktion för att flasha om bootloadern.
j.po
Inlägg: 279
Blev medlem: 24 november 2008, 20:40:19
Ort: Halmstad
Kontakt:

Re: Ska programmera Atmega, behöver begreppsförklaringar

Inlägg av j.po »

jag tror att du måste ha exakt rätt AVR, du kan inte ta vilken AVRmega eller tiny som helst, det skall vara exakt rätt modell, även kapseltypen tror jag kan påverka.
Kanske därför du inte lyckas få i en bootloader.
Jag hittade någon sida om hur man ändrar setupfiler så att man kan använda valfri ARV men hittar inte den nu. Googla...
ToPNoTCH
Inlägg: 5152
Blev medlem: 21 december 2009, 17:59:48

Re: Ska programmera Atmega, behöver begreppsförklaringar

Inlägg av ToPNoTCH »

@mattswe:

Det du försöker göra är precis den metod jag alltid använt för att fixa "egna" kretskort som går att programmera från Arduino IDE med Arduino kod.

Så länge du använder MCU'er som finns på de Arduino kort som man normalt köper (ATMEGA168,ATMEGA328,ATMEGA1280,ATMEGA2560) så finns
all information du behöver i boards.txt (Vilken bootloadr du skall lägga på och vilka fuses du skall sätta).

De bootloaders du behöver finns med i mappen där du installerat IDE't under "\hardware\arduino\bootloaders".
Bara leta rätt på den som matchar din MCU flasha med den från valfitt program (Studio i ditt fall) och sätt fuses enligt boards.txt

Du kan till och med köra med dessa processorer utan kristall (på intern oscillator) genom att modifiera

Kod: Markera allt

.build.f_cpu
parametern i boards.txt
Observera att du då måste sätta fuses så att den använder intern oscillator med.
Bra att veta om man sitter på ett lager av 8AU chip som inte klarar 16MHz exempelvis, eller vill göra en minimal lösning utan extern klocka.
Givetvis får man beakta att processorn går i lägre klockfrekvens och inte "pallar" lika mycket, men genom att sätta F_cpu enligt ovan
så tar kompilatorn hänsyn till frekvensen och alla delay osv. blir rätt.

När det kommer till att köra på ANDRA Atmel MCU'er än ovan nämnda blir det knivigare.
Då måste du hitta "hemma hackade" booloaders (som j.po är inne på) och fylla på din boards.txt med den information som den som hackat ihop booloadern oftast har med som information.

Att använda andra MCU'er på detta sätt funkar ju givetvis inte något bra med kod som skrivits för de "ordinarie" MCU'erna i Arduinovärlden.
Beakta exemplet att en 44 pin processor givetvis har de sina motsvarande pinna som en 28 pinnars (ex. ATMEGA328), och därför kan
klara kod som är avsett för 168,328 baserade kort. Denna skulle dock inte vara kompatibel med kod som kräver ATMEGA2560 som i sin tur har 100 pinnar och
därmed fler utgångar.

Nu är det sällan man har kod som nyttjar alla pinnarna på en 100pin kapsel, men det blir oftast ett jävla flyttande och trixande som klart inte väger upp
mot den 20-lapp extra en "supporterad" MCU kostar.
ToPNoTCH
Inlägg: 5152
Blev medlem: 21 december 2009, 17:59:48

Re: Ska programmera Atmega, behöver begreppsförklaringar

Inlägg av ToPNoTCH »

Mer konkret:
- För din ATMEGA168 lägg på bootloader "ATmegaBOOT_168_diecimila.hex" som finns där jag beskrev.
När du lagt på den och satt fuses enligt boards.txt skall du välja att du har "Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega168" i IDE't

- För dina ATTINY läs här.

Jag hoppas att du begripit att efter du har lagt på booloadern så skall du inte längre använda din AVRISP för att
lägga in koden du hackar i Arduino IDE, utan det sker seriellt-TTL över den serieport du väljer i IDE't.
(Jag tror du fattat det, men dubbelkollar ändå).
mattswe
Inlägg: 159
Blev medlem: 20 augusti 2012, 13:27:51

Re: Ska programmera Atmega, behöver begreppsförklaringar

Inlägg av mattswe »

Tack för informationen ToPNoTCH. Det du beskriver stämmer som sagt ganska väl överens med den arbetsgång jag försökt mig på, jag försökte dock med en annan 168-bootloader och ett annat board. Ska testa ikväll (om jag hinner) att följa din beskrivning till punkt och pricka. Återkommer med resultatet. :)
Jag hoppas att du begripit att efter du har lagt på booloadern så skall du inte längre använda din AVRISP för att
lägga in koden du hackar i Arduino IDE, utan det sker seriellt-TTL över den serieport du väljer i IDE't.
Detta är jag helt på det klara med. Jag har en sådan här; https://www.elfa.se/elfa3~se_sv/elfa/in ... =73-206-70. Den tänkte jag flasha programmen med, det ska väl fungera?

Jag har en annan undran. Jag har märkt att när jag programmerar extended fuses och lock_bits från Studio 6, så sparas inte min programmering. high och low sätts till det jag angivit, och ext och lock ser ut att göra det. Men när jag kommer tillbaka till gränssnittet igen så är extended fuses och lock_bits värde återställda. Verkar detta bekant eller är det något fel på min 168?

Jag noterar även i boards.txt att det finns angivet något som heter unlock_bits. Vad är det? Jag ser inte att jag kan programmera denna i Studio 6.
Skriv svar