ATmega - ISP, bootloaders, debugWIRE och extrem low-power
Postat: 26 augusti 2014, 17:22:41
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.