Ska programmera Atmega, behöver begreppsförklaringar

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

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

Inlägg av sodjan »

> Detta är jag helt på det klara med. Jag har en sådan här: 73-206-70. Den tänkte jag flasha programmen med, det ska väl fungera?

(Notera att det räcker med att skriva ELFA-numret så gör forumet om det till en korrekt länk...)

Det är alltså en USB/RS232 adapter.
Vad menar du med att "flasha programmet"?
Att ladda bootloadern (går inte med den) eller att överföra Ardunio programmen (bör gå OK)?

> Men när jag kommer tillbaka till gränssnittet igen...

"Tillbaka" från vadå?

> ...så är extended fuses och lock_bits värde återställda.

Har inget svar på det. De kanske aldrig skrev till processorn?
Dessutom, om du sätter lock bits så blir väl processorn läs-skyddad och då
går det inte längre att läsa tillbaka något alls (det borde vara så i alla fall).
Är du helt säker på att du vet vad du gör och hur alla fuses fungerar ?
mattswe
Inlägg: 159
Blev medlem: 20 augusti 2012, 13:27:51

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

Inlägg av mattswe »

(Notera att det räcker med att skriva ELFA-numret så gör forumet om det till en korrekt länk...)
Grymt!
Vad menar du med att "flasha programmet"?
Ja, ursäkta om jag uttrycker mig obegripligt emellanåt. Jag vet inte alltid vad jag pratar om. :D

Planen här är alltså att programmera en Atmega168 som är uppkopplad på ett breadboard enligt http://arduino.cc/en/Main/Standalone:

Jag tänker mig att det ska göras enligt följande två steg:
1. Ladda bootloader (hämtad från Arduino-miljön) och sätta fuses (inställningarna hämtade från Arduino-miljön, boards.txt) mha. avrisp mkii i Atmel Studio 6.
2. Överföra programmet från Arduino IDEn till 168n mha. ovan nämnda USB/RS232-adapter.

(Sedan har jag ju en ambition att kunna programmera med Arduino-libbet i Studio 6, men nu fokuserar jag först och främst på ovanstående.)
> Men när jag kommer tillbaka till gränssnittet igen...
"Tillbaka" från vadå?
I Studio 6 under "Device programmer" med avrisp mkii ansluten anger jag värden för high, low och extended fuses och trycker sedan på programmera-knappen eller vad den heter. Trycker jag på Verifiera så är det de nya värdena som visas. Men om jag stänger "Device programmer"-fönstret och sedan öppnar det igen så läser ju Studio in fuse-värdena på nytt från controllern. Då är det de gamla värdena som visas.
Är du helt säker på att du vet vad du gör och hur alla fuses fungerar ?
Det skulle jag inte påstå. :lol:
Men jag gör mitt bästa. Och jag kopierar ju de värden som används av Arduino-miljön.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

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

Inlägg av sodjan »

> Och jag kopierar ju de värden som används av Arduino-miljön.

*Och* läser på vad de olika fuses har för funktion, eller hur?

> Trycker jag på Verifiera så är det de nya värdena som visas. Men om jag stänger
> "Device programmer"-fönstret och sedan öppnar det igen så läser ju Studio in
> fuse-värdena på nytt från controllern. Då är det de gamla värdena som visas.

Hur är det? Sätter du eller sätter du inte fuses för "lässkydd". Du skrev tidigare
om "lock_bits", vad har de för funktion? (Ja, *jag* behöver inte veta det, men
du *måste* veta det för att veta vad du gör.)

Om du sätter lässkydd, så är det ganska normalt att man under samma programmerings
session kan läsa tillbaka just för att programmeraren ska kunna verifiera! Sedan, när
man går ur programmerings mode, så låses det hela ner, så att säga, och det går inte
längre att läsa tillbaka något från processorn, varken kod eller fuses. Sannolikt/ofta
finns det olika "nivåer" av lässkydd, men det är lite överkurs här. Jag är inte "100" på
att det fungerar exakt så i en AVR, men det är en rimlig hantering av det hela. Och det
förklarar bra de fenomen som du ser (eller i alla fall beskriver/tolkar att du ser :-) ).

Om du vet vilka fuses du sätter (och hur du sätter dom), och om du vet vad de har
för funktion samt om du har läst på i databladet kring hur det hela fungerar så
bör det inte vara några konstigheter.
mattswe
Inlägg: 159
Blev medlem: 20 augusti 2012, 13:27:51

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

Inlägg av mattswe »

Blev så nyfiken så jag var tvungen ett skynda hem på lunch, hehe.

Kan meddela att nu verkar programmet exekvera som det ska i min 168. Jag gjorde som jag beskrev i mitt förra inlägg och använde den bootloader och de fuse-inställningar som ToPNoTCH föreslog, utifrån boards.txt. Har bara hunnit blinka med en diod ännu, lunchen är alltför kort, men jag ska köra lite mer komplexa program så fort jag får en stund över.

Jag vet fortfarande inte varför jag inte kan skriva till extended_fuse, men där har nog Sodjan en poäng. Jag behöver läsa in mig betydligt mer på fuses, då ger det sig förhoppningsvis. Hur som helst är det skönt att ha något som fungerar på arbetsbänken när man ska experimentera vidare.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

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

Inlägg av sodjan »

> Jag vet fortfarande inte varför jag inte kan skriva till extended_fuse,

Poängen är att du kanske *kan* det, men det syns inte när du (Studio)
försöker läsa tillbaka det senare. Men, som sagt, det beror också på vilka
fuses du fipplade med, och hur... :-) Gick inte *verifieringen* faktiskt OK ??

Att Studio inte kan läsa fuses är i snarare (eller kan vara) ett bevis på att
du *har* skrivit till extended_fuses och faktiskt lässkyddat AVR'en... :-)

Sen så är det en lite annan sak att du knappast har någon anledning
att hålla på med lässkyddet över huvudtaget.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

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

Inlägg av snigelen »

Om du har lyckats programmera din mega168 med hjälp av bootloadern så måste du ha lyckats med att skriva EFUSE. Den har bara tre bitar som bestämmer storleken på boot-sektionen, samt BOOTRST som gör att bootloadern startas vid reset.

Kan det vara för att de övre fem bitarna i EFUSE är odefinierade? Du kan göra en lyckad skrivning till de tre lägsta bitarna och samtidigt sätta omöjliga värden på de övre. I så fall skrivs de tre lägsta bitarna men du får fel när du verifierar vad som skrivits.
olof_n
Inlägg: 116
Blev medlem: 23 februari 2011, 21:36:46

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

Inlägg av olof_n »

Hej!

Jag vill bara förtydliga att man inte behöver ha en bootloader för att Arduino IDE ska kunna ladda upp koden.
Alternativet "Upload using programmer" använder inte någon bootloader.

Kör man tex en Attiny85 kan man antingen välja att ha en bootloader på ca 500 byte eller skippa bootloadern och ladda upp koden direkt med en programmerare.

I länken som ToPNoTCH bifogade kan man läsa:
Then, run the “Burn Bootloader” command from the Tools menu. This configures the fuse bits of the microcontroller so it runs at 8 MHz. Note that the fuse bits keep their value until you explicitly change them, so you’ll only need to do this step once for each microcontroller. (Note this doesn’t actually burn a bootloader onto the board; you’ll still need to upload new programs using an external programmer.)


Men det finns andra Attiny varianter som faktiskt lägger in en bootloader.


Mvh

Olof
mattswe
Inlägg: 159
Blev medlem: 20 augusti 2012, 13:27:51

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

Inlägg av mattswe »

Kör man tex en Attiny85 kan man antingen välja att ha en bootloader på ca 500 byte eller skippa bootloadern och ladda upp koden direkt med en programmerare.
Hade nästan det på känn. Har inte hunnit testa något mer ännu, men då min avrisp mkii inte kan hittas av Arduino IDEn så måste jag köra den från Studio 6. Jag har några ATtiny45, och då behöver jag alltså inte tänka på någon bootloader utan jag kan köra in programmet direkt från Studio 6 via min avrisp mkii? (Efter att jag ställt in fuses korrekt förstås.)
olof_n
Inlägg: 116
Blev medlem: 23 februari 2011, 21:36:46

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

Inlägg av olof_n »

Jag har fick nyligen hem en usbtinyisp programmerare som jag köpte billigt på ebay.
Har inte hunnit testa den än, men tanken är nog att skippa bootloadern framöver.

Har du provat att använda Arduino biblioteken i AVR Studio?
Jag gjorde ett snabbt test och det verkar fungera, väldigt skönt med ett riktigt utvecklingsverktyg.

Är lite krångel att få det att fungera men det finns en bra guide:
http://www.engblaze.com/tutorial-using- ... -projects/

Inte mycket "Arduino" kvar om man skippar bootloadern och kör AVR Studio :)

/Olof
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

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

Inlägg av PHermansson »

På min hemsida har jag skrivit ned hur jag gör:

http://patrikhermansson.se/?q=node/431

http://patrikhermansson.se/?q=node/494
mattswe
Inlägg: 159
Blev medlem: 20 augusti 2012, 13:27:51

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

Inlägg av mattswe »

Ok, testade lite mer igår kväll. Läste även in mig på fuse-inställningarna. Tror att det var de odefinierade bitarna i ext_fuse som spökade för mig tidigare. Nu har jag inga konstigheter längre med fuses.

Men, jag måste ladda in bootloadern på nytt varje gång jag ska köra in ett program. Några idéer om varför?
Så här ser min arbetsgång ut:

1. Kopplingen är gjord enligt den länk jag refererar till ovan. En Atmega168 med extern kristall på 16MHz.
2. Jag sätter fuses och laddar bootloadern (ATmegaBOOT_168_diecimilia.hex) mha Studio 6 och en AVRISP mkii.
3. Programmet körs sedan över från Arduino IDEn mha ovan nämnda USB/rs232-adapter.
4. Allt är frid och fröjd. Programmet exekverar som det ska.

5. Jag kör på nytt över ett program från Arduino IDEn mha ovan nämnda USB/rs232-adapter.
6. Jag får meddelandet: avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51

Om jag på nytt laddar in bootloadern så fungerar det igen.
Fusen BOOTRST är programmerad (0), vilket innebär att vid reset ska controllern hoppa till bootloadern. Jag trodde först att det kanske kunde ha något med den att göra.
På min hemsida har jag skrivit ned hur jag gör
Tack, ska titta lite närmare på det, det ser ut som ungefär samma arbetsgång.
Har du provat att använda Arduino biblioteken i AVR Studio?
Nej, jag har bara kompilerat med corelibbet, och det gick bra. Måste först och främst få hårdvaran att lira. Annars är ju en stor del av finessen med att köra Arduino-kod i Studio just att kunna dra nytta av libben tänker jag.
mattswe
Inlägg: 159
Blev medlem: 20 augusti 2012, 13:27:51

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

Inlägg av mattswe »

Jag har fick nyligen hem en usbtinyisp programmerare som jag köpte billigt på ebay.
Har inte hunnit testa den än, men tanken är nog att skippa bootloadern framöver.
Alltså, det ska vara möjligt att köra in ett program i mcun utan någon bootloader, även Arduino-kod, eller hur? Vad krävs för detta?
Att man kör in programmet i mcun med en programmerare (typ usbtinyisp el. avrisp mkii) samt att man sätter fusen BOOTRST så att boot reset vector är disable (alltså att mcun inte hoppar till bootloadern vid reset)?
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

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

Inlägg av jesse »

Bootloadern är ju ett program som du kör in i processorn på något vis (dv. med Studio 6 och en AVRISP mkii). Du borde kunna använda exakt samma metod med vilket program som helst (och därmed slippa bootloadern helt).

En orsak att bootloadern inte fungerar efter att du programmerat en gång kan vara att du måste starta från reset för att kunna starta bootloadern - annars kör ju ditt program. Sen kan det vara så att bootloadern vill ha en speciell signal för att den inte ska ge upp och låta programmet starta . Man kanske har en eller två sekunder på sig eller så? (jag vet inte hur just den bootloadern beter sig)
mattswe
Inlägg: 159
Blev medlem: 20 augusti 2012, 13:27:51

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

Inlägg av mattswe »

Ok, jag hittade en drivrutin som fungerar med AVRdude (Arduino-IDEn). http://mightyohm.com/blog/2010/09/avris ... vista-x64/ Den står i konflikt med Jungo-drivern (Studios driver). Så just nu kan jag få både Arduino IDEn och Studio 6 att prata med avrisp mkii men INTE samtidigt. Det verkar inte som att det finns någon lösning för det.

Har alltså just laddat bootloader via avrisp mkii från Arduino IDEn, samt sedan laddat ner programmet från Arduino IDEn via usb/rs232-adaptern till mcu. Även vid denna arbetsgång måste jag dock ladda om bootloadern varje gång nytt program ska laddas. Vet fortfarande inte varför, då det inte funkar så på ett Arduino-kort...

Härnäst ska jag försöka ladda både bootloader och program från Studio 6, samt se om jag kan ladda programmet utan bootloader.
Ambitionen är ju att hitta en arbetsgång som utgår från Studio 6, men med möjligheten att använda Arduino-kod och bibliotek.

Ska även testa med en ATtiny45. Den arbetsgång som någon länkade till tidigare i diskussionen verkar utgå från Arduino IDE och installera program men inte bootloader i ATtiny45:an...
Nerre
Inlägg: 27231
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

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

Inlägg av Nerre »

Det är inte så enkelt att problemet bara är att du i länkfilen anger att ditt program ska starta på samma adress som bootloadern ligger, så den skriver över sig själv när den flashar ditt program?

Det är väl ganska enkelt att verifiera om du läser ut programmet igen med avrisp mkii?
Skriv svar