Ska programmera Atmega, behöver begreppsförklaringar
Re: Ska programmera Atmega, behöver begreppsförklaringar
> 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 ?
(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 ?
Re: Ska programmera Atmega, behöver begreppsförklaringar
Grymt!(Notera att det räcker med att skriva ELFA-numret så gör forumet om det till en korrekt länk...)
Ja, ursäkta om jag uttrycker mig obegripligt emellanåt. Jag vet inte alltid vad jag pratar om.Vad menar du med att "flasha programmet"?

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.)
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.> Men när jag kommer tillbaka till gränssnittet igen...
"Tillbaka" från vadå?
Det skulle jag inte påstå.Är du helt säker på att du vet vad du gör och hur alla fuses fungerar ?

Men jag gör mitt bästa. Och jag kopierar ju de värden som används av Arduino-miljön.
Re: Ska programmera Atmega, behöver begreppsförklaringar
> 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.
*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.
Re: Ska programmera Atmega, behöver begreppsförklaringar
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.
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.
Re: Ska programmera Atmega, behöver begreppsförklaringar
> 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.
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...

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.
Re: Ska programmera Atmega, behöver begreppsförklaringar
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.
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.
Re: Ska programmera Atmega, behöver begreppsförklaringar
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
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
Re: Ska programmera Atmega, behöver begreppsförklaringar
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.)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.
Re: Ska programmera Atmega, behöver begreppsförklaringar
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
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
- 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
På min hemsida har jag skrivit ned hur jag gör:
http://patrikhermansson.se/?q=node/431
http://patrikhermansson.se/?q=node/494
http://patrikhermansson.se/?q=node/431
http://patrikhermansson.se/?q=node/494
Re: Ska programmera Atmega, behöver begreppsförklaringar
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.
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.
Tack, ska titta lite närmare på det, det ser ut som ungefär samma arbetsgång.På min hemsida har jag skrivit ned hur jag gör
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.Har du provat att använda Arduino biblioteken i AVR Studio?
Re: Ska programmera Atmega, behöver begreppsförklaringar
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?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.
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)?
Re: Ska programmera Atmega, behöver begreppsförklaringar
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)
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)
Re: Ska programmera Atmega, behöver begreppsförklaringar
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...
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...
Re: Ska programmera Atmega, behöver begreppsförklaringar
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?
Det är väl ganska enkelt att verifiera om du läser ut programmet igen med avrisp mkii?