ATmega - ISP, bootloaders, debugWIRE och extrem low-power
ATmega - ISP, bootloaders, debugWIRE och extrem low-power
Flera av mina projekt kräver både realtidsklocka och extremt låg strömförbrukning, under 10uA. Detta är i sig inget problem men att behöva använda en sexpolig kontakt för mjukvaruuppdateringar via ISP:n är fysiskt klumpigt.
Med debugWIRE klarar man saken med endast två poler, men för att fungera måste seriekommunikationen / TWI vara aktiv, vilket totalt raserar mina extrema krav på låg strömförbrukning.
Kan man inte få både och? Alltså stänga av TWI:n i Power Reduction Register för att minimera strömförbrukningen under normal drift, men slå på den igen om en specifik portpinne påverkas och/eller under en kort tid efter systemreset/power up.
Databladet för ATmega88 säger följande:
"A programmed DWEN fuse enables some parts of the clock system to be running in all sleep modes. This will increas power consumption while in sleep."
Tolkar jag detta rätt kommer en aktiverad dW automatiskt att "köra över" det som mjukvaran sedan gör med Power Reduction Register så att strömförbrukningen i sleep blir högre hur man än gör. Men går det ändå att fixa sig runt med något fiffigt trick?
En alternativ metod är att använda en bootloader, t.ex. Atmels egen appnote AVR947: Single-Wire Bootloader for any MCU with Self Programming Capability. http://www.atmel.com/Images/doc42034.pdf Detta verkar hur fiffigt som helst, förutom det trista faktum att bootloadern själv tar upp nästan 1400 bytes. I en redan ganska fullproppad ATmega kan det vara på tok för mycket.
Om en bootloader är enda lösningen och det resulterar i ett dyrare AVR-chip med större FLASH vore det egentligen kanske smartare att helt ersätta det fysiska kontaktdonet med en optisk länk. Detta kostar ännu mer FLASH men ger också något unikt tillbaka, i synnerhet om man implementerar det fantastiska tricket att använda en vanlig lysdiod som en dubbelriktad kommunikationsport. www.merl.com/reports/docs/TR2003-35.pdf
Detta är egentligen en annan diskussion än jag tänkt mig med tråden, men det är onekligen ett intressant alternativ till en fysiskt klumpig sexpolig kontakt i mina mest hårdvarumässigt minimalistiska projekt.
Jag har experimenterat en del med lysdioder som ljussensorer och det fungerar fantastiskt fint. Däremot har jag inte lyckats skapa en fungerande kommunikationsport. MERL har kommit upp i ca 250 bps, själv har jag som bäst varit nära att lyckas med en tiondel av den hastigheten. Röda lysdioder kan dock vara överlägsna de "supergröna" jag använt i mina experiment.
Med debugWIRE klarar man saken med endast två poler, men för att fungera måste seriekommunikationen / TWI vara aktiv, vilket totalt raserar mina extrema krav på låg strömförbrukning.
Kan man inte få både och? Alltså stänga av TWI:n i Power Reduction Register för att minimera strömförbrukningen under normal drift, men slå på den igen om en specifik portpinne påverkas och/eller under en kort tid efter systemreset/power up.
Databladet för ATmega88 säger följande:
"A programmed DWEN fuse enables some parts of the clock system to be running in all sleep modes. This will increas power consumption while in sleep."
Tolkar jag detta rätt kommer en aktiverad dW automatiskt att "köra över" det som mjukvaran sedan gör med Power Reduction Register så att strömförbrukningen i sleep blir högre hur man än gör. Men går det ändå att fixa sig runt med något fiffigt trick?
En alternativ metod är att använda en bootloader, t.ex. Atmels egen appnote AVR947: Single-Wire Bootloader for any MCU with Self Programming Capability. http://www.atmel.com/Images/doc42034.pdf Detta verkar hur fiffigt som helst, förutom det trista faktum att bootloadern själv tar upp nästan 1400 bytes. I en redan ganska fullproppad ATmega kan det vara på tok för mycket.
Om en bootloader är enda lösningen och det resulterar i ett dyrare AVR-chip med större FLASH vore det egentligen kanske smartare att helt ersätta det fysiska kontaktdonet med en optisk länk. Detta kostar ännu mer FLASH men ger också något unikt tillbaka, i synnerhet om man implementerar det fantastiska tricket att använda en vanlig lysdiod som en dubbelriktad kommunikationsport. www.merl.com/reports/docs/TR2003-35.pdf
Detta är egentligen en annan diskussion än jag tänkt mig med tråden, men det är onekligen ett intressant alternativ till en fysiskt klumpig sexpolig kontakt i mina mest hårdvarumässigt minimalistiska projekt.
Jag har experimenterat en del med lysdioder som ljussensorer och det fungerar fantastiskt fint. Däremot har jag inte lyckats skapa en fungerande kommunikationsport. MERL har kommit upp i ca 250 bps, själv har jag som bäst varit nära att lyckas med en tiondel av den hastigheten. Röda lysdioder kan dock vara överlägsna de "supergröna" jag använt i mina experiment.
Re: ATmega - ISP, bootloaders, debugWIRE och extrem low-powe
Varför inte fortsätta använda en 6-polig kontakt med mindre formfaktor än en stiftlist med 2,54mm delning?
Behövs ju inte ens en fysisk kontakt, låt bara sex paddar vara tillgängliga på mönsterkortet och anslut med fjäderpinnar.
Behövs ju inte ens en fysisk kontakt, låt bara sex paddar vara tillgängliga på mönsterkortet och anslut med fjäderpinnar.
Re: ATmega - ISP, bootloaders, debugWIRE och extrem low-powe
Optiboot tar upp mindre än 1.4k.
https://code.google.com/p/optiboot/
Dra ut reset, tx och rx.
Problemet med debugwire är att den kan nog få för sig att dra ström...
Annars så dunka dit en 6-polig ytmonterad 1.27mm 2x3 polig kontakt. de tar rätt så lite plats.
Edit typ: http://www.electrokit.com/stiftlist-1-2 ... -smd.51494
Edit2: beroende på hur komponenterna sitter så kan en hålmonterad ta fysiskt mindre plats än en ytmonterad, fördelen med ytmonterad att det går montera saker på andra sidan.
https://code.google.com/p/optiboot/
Dra ut reset, tx och rx.
Problemet med debugwire är att den kan nog få för sig att dra ström...
Annars så dunka dit en 6-polig ytmonterad 1.27mm 2x3 polig kontakt. de tar rätt så lite plats.
Edit typ: http://www.electrokit.com/stiftlist-1-2 ... -smd.51494
Edit2: beroende på hur komponenterna sitter så kan en hålmonterad ta fysiskt mindre plats än en ytmonterad, fördelen med ytmonterad att det går montera saker på andra sidan.
Re: ATmega - ISP, bootloaders, debugWIRE och extrem low-powe
Annars kan en sådan här kontakt med tillhörande kabel fungera: 43-502-44
I mina projekt där jag bara behöver programmeringskontakten en gång för att lägga in bootloader så använder jag pogo-pinns istället för kontaktdon.
/// Marcus
I mina projekt där jag bara behöver programmeringskontakten en gång för att lägga in bootloader så använder jag pogo-pinns istället för kontaktdon.
/// Marcus
Re: ATmega - ISP, bootloaders, debugWIRE och extrem low-powe
För DIL-kretsar finns ju "kontakter" som man trycker direkt mot kretsen (ungefär som en klädnypa). Då behöver den bara komma åt benen. Tar inget kortutrymme alls.
Borde finnas något liknande för ytmonterat också.
Borde finnas något liknande för ytmonterat också.
Re: ATmega - ISP, bootloaders, debugWIRE och extrem low-powe
ie: de finns! Har haft en sådan. Kostar en halv förmögenhet förvisso men bra är de.
Re: ATmega - ISP, bootloaders, debugWIRE och extrem low-powe
Tack för de olika konstruktiva förslagen, lättare att ha olika alternativ att resonera kring än att kläcka den bästa lösningen på egen hand!
Optiboot känns som en mindre lyckad kompromiss då det trots allt blir minst fyra tåtar i kontakten samtidigt som det kostar nästan lika mycket FLASH som AVR947: Single-Wire Bootloader. Med den senare lösningen och tydligt definierade spänningsnivåer hos både målsystemet och programmeringsmojängen klarar sig AVR947 med endast en portpinne och "jord".
Har jag fattat databladet för ATmega48/88/168 rätt går det utmärkt för programvaran att LÄSA fusebits/lockbits men INTE att ändra dem. Således finns ingen möjlighet att avaktivera dWen och eftersom debugWIRE har förmågan att köra över det som skrivits till Power Reduction Register är debugWIRE inte förenligt med extremt strömsnåla applikationer.
Tror det lutar mot en "allt eller ingenting-lösning", d.v.s. antingen acceptera ISP:ns sex pinnar och hitta minsta möjliga kontakt till dessa (använder för närvarande en rak hylslist med 0,125 mm delning, men även det är i klumpigaste laget), alternativt ta en närmare titt på den 1-wire bootloader som beskrivs i Atmels appnote och acceptera det utrymme den stjäl från FLASH.
Till mina "pytteprojekt" använder jag SMD-chip med endast ett fåtal yttre komponenter. En orsak att jag ogillar kontaktdon är att det inte finns något mönsterkort över huvud taget, utan det är "dead bug" som gäller! De få kringkomponenterna löds antingen direkt på chippet eller ansluts via korta stumpar av virtråd. Ambitionsnivån är långt ifrån professionell storskalig produktion, men andra elektronik DIY:are ska enkelt och billigt kunna reproducera koncepten.
Till ett annat minimalistiskt projekt baserat på ATtiny13A använder jag "klädnypa" för programmeringen. Där finns inget som helst utrymme för bootloader och inte heller samma behov av att kunna uppdatera programvaran. Den tvåradiga klämman var inte speciellt dyr och är enkel att använda. Till en ATmega88 av typen "SMD-frimärke" är motsvarande klämma/sockel klart utanför min budget. En "clamshell-sockel" för att lägga in en bootloader vore annars en mycket trevlig lösning.
Nä, livets krassa verklighet talar för att jag får gilla läget med behovet av de sex ISP-pinnarna. Med väldefinierade spänningsnivåer och skyddande seriemotstånd av lagom storlek i ISP-sladden borde det gå att klara sig på fem pinnar.
Att sedan kunna göra uppdateringar från utsidan helt kontaktlöst via en lysdiod (som ändå ingår i konstuktionen) är
fortfarande en alternativ möjlighet sedan ISP-kontakten använts en första gång.
Hmm, värt att fundera på är om det finns något billigt alternativ till en clamshell-sockel? En egen chip-fixtur med mycket små pogo-pins kanske? Blir kanske svårt att få tillräckligt hög precision för att träffa exakt rätt på ATmegans ben, men en clamshell-sockel är att betala dyrt för en massa pinnar som aldrig behövs.
Optiboot känns som en mindre lyckad kompromiss då det trots allt blir minst fyra tåtar i kontakten samtidigt som det kostar nästan lika mycket FLASH som AVR947: Single-Wire Bootloader. Med den senare lösningen och tydligt definierade spänningsnivåer hos både målsystemet och programmeringsmojängen klarar sig AVR947 med endast en portpinne och "jord".
Har jag fattat databladet för ATmega48/88/168 rätt går det utmärkt för programvaran att LÄSA fusebits/lockbits men INTE att ändra dem. Således finns ingen möjlighet att avaktivera dWen och eftersom debugWIRE har förmågan att köra över det som skrivits till Power Reduction Register är debugWIRE inte förenligt med extremt strömsnåla applikationer.
Tror det lutar mot en "allt eller ingenting-lösning", d.v.s. antingen acceptera ISP:ns sex pinnar och hitta minsta möjliga kontakt till dessa (använder för närvarande en rak hylslist med 0,125 mm delning, men även det är i klumpigaste laget), alternativt ta en närmare titt på den 1-wire bootloader som beskrivs i Atmels appnote och acceptera det utrymme den stjäl från FLASH.
Till mina "pytteprojekt" använder jag SMD-chip med endast ett fåtal yttre komponenter. En orsak att jag ogillar kontaktdon är att det inte finns något mönsterkort över huvud taget, utan det är "dead bug" som gäller! De få kringkomponenterna löds antingen direkt på chippet eller ansluts via korta stumpar av virtråd. Ambitionsnivån är långt ifrån professionell storskalig produktion, men andra elektronik DIY:are ska enkelt och billigt kunna reproducera koncepten.
Till ett annat minimalistiskt projekt baserat på ATtiny13A använder jag "klädnypa" för programmeringen. Där finns inget som helst utrymme för bootloader och inte heller samma behov av att kunna uppdatera programvaran. Den tvåradiga klämman var inte speciellt dyr och är enkel att använda. Till en ATmega88 av typen "SMD-frimärke" är motsvarande klämma/sockel klart utanför min budget. En "clamshell-sockel" för att lägga in en bootloader vore annars en mycket trevlig lösning.
Nä, livets krassa verklighet talar för att jag får gilla läget med behovet av de sex ISP-pinnarna. Med väldefinierade spänningsnivåer och skyddande seriemotstånd av lagom storlek i ISP-sladden borde det gå att klara sig på fem pinnar.
Att sedan kunna göra uppdateringar från utsidan helt kontaktlöst via en lysdiod (som ändå ingår i konstuktionen) är
fortfarande en alternativ möjlighet sedan ISP-kontakten använts en första gång.
Hmm, värt att fundera på är om det finns något billigt alternativ till en clamshell-sockel? En egen chip-fixtur med mycket små pogo-pins kanske? Blir kanske svårt att få tillräckligt hög precision för att träffa exakt rätt på ATmegans ben, men en clamshell-sockel är att betala dyrt för en massa pinnar som aldrig behövs.
Re: ATmega - ISP, bootloaders, debugWIRE och extrem low-powe
Kollade just på Ebay. Just QFP-32 Clam shell-socklar hittade jag inga men knappt 400 SEK tot. hem i brevlådan för en QFP-144 väcker hopp. Kan jag hitta en billig sockel på Ebay är det stark motivation för mig att ta en ordentlig titt på Atmels egen Single Wire Bootloader och se om jag kan anpassa den till mina experiment med dubbelriktad dataöverföring via en enda lysdiod.
En sådan bootloader blir sannolikt ganska långsam, men den har ändå ett stort uppenbart värde om uppdateringarna inte behöver göras allt för ofta.
En sådan bootloader blir sannolikt ganska långsam, men den har ändå ett stort uppenbart värde om uppdateringarna inte behöver göras allt för ofta.