-tomas-
14.09.2006, 08:17
Ich habe mal den AVR butterfly IAR-C Code
http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3146
and die GCC-Portierung
http://www.siwawi.arubi.uni-kl.de/avr_projects/#bf_app
genommen und das ganze nach Bascom übertragen und um einen Datalogger erweitert.
Der Butterfly kommt bei 3V mit 8µA (ohne LCD) bis 25µA (mit LCD, das sind 220mAh pro Jahr) aus und ist damit mit Abstand der Rekordhalter unter den Atmegas im Batteriebetrieb.
Der Original C-Code belegt 99% des Speichers (14300 Byte + 2048 Byte for the Bootloader). Nach tausend Codezeilen ist es sicher: Bascom erzeugt etwa 50% bis 100% mehr Hex-Code als GCC. Die Umsetzung wurde möglich, durch das nette Bascom-Feature Assembler und Basic zu mischen.
Nach konsequenter Straffung der AVR-Algorithmen blieb noch Platz für einen 4MBit Datalogger. Die Module music und vcard habe ich nicht übertragen.
Der Bascom Hex-Code ist kleiner als 8KByte, womit für eigene Erweiterungen genügend Platz bleibt.
Der Code ist gut kommentiert aber länger als die zulässige Nachrichenlänge. Ich hab die Datei hochgeladen:
************************************************** *************************
'Datalogger software for AVR Butterfly demo board.
'
'This code based on the ATMEL sample code for the Butterfly (for IAR-C)
'parts not implemented (from IAR-C sample code): music and vcard
'
'BASCOM code with:
' State machine menu (over 100 entries)
' Clock (time+date)
' Datalogger with 4Mbit dataflash
' 32768 Logs at 16 Byte
' free intervall from 1 minute to 24 hours
' restore old datalogger counter after a reset
' formated print of datalogs at 9600 Baud:
' HH:MM:SS DD.MM.YY ADC1[RAW] ADC2[RAW] ADC3[RAW] Temp[°C]
' ADC ASM Code for fast conversion 8 times and averaging for better accuracy
' Temperature measurements
' Light measurements
' Voltage readings
' LCD interrupt
' scrolling text (over 6 chars)
' LCD auto power off (timer interrupt)
' Adjust LCD contrast
' Key interrupt
' detect permanent pressed key (interrupt)
' Key Click (Speaker)
' Main Loop with power save mode (loop with 1sec and 63ms)
'
'very low power consumption: 8µA LCD OFF
' 25µA LCD ON (220mAh a year !!!)
' 40µA scrolling text
'
'hex code length: <8 KByte (under 50% of 16K memory)
'
'Attention! The dataflash actice current peak while a erase is 35mA (<12ms).
'If you use a external battery, the schottky diode BAT54C (Vcc_ext) has a
'forward voltage of 0,4V-0,5V. The dataflash needs min 2,5V.
' => The minimal external voltage with Datalogger is 3,0V!!!!
'If the external voltage sink under 3V the SPI-Bus reads only &HFF.
'
'code testet with Bascom 1.11.8.1 and 1.11.8.3
'workaround for following Bascom AVR-Register-Bugs (Atmega169):
' Config Spi = ...
' Config Clock = Soft
' Powersave
' Clockdivison
'************************************************* **************************
$regfile = "m169def.dat"
$framesize = 32 'Stack
$swstack = 32
$hwstack = 64
hier mal die Print-Ausgabe im Format:
HH:MM:SS DD.MM.YY ADC1[RAW] ADC2[RAW] ADC3[RAW] Temp[°C]
400: 15:50:0 1.7.6 529 0 494 +23C
401: 16:0:0 1.7.6 529 0 496 +23C
402: 16:10:0 1.7.6 524 0 492 +24C
403: 16:20:0 1.7.6 499 0 370 +26C
404: 16:30:0 1.7.6 476 0 139 +28C
405: 16:40:0 1.7.6 467 0 146 +28C
406: 16:50:0 1.7.6 464 0 152 +29C
407: 17:0:0 1.7.6 466 0 161 +28C
408: 17:10:0 1.7.6 489 0 199 +26C
409: 17:20:0 1.7.6 511 0 528 +25C
410: 17:30:0 1.7.6 510 0 212 +25C
http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3146
and die GCC-Portierung
http://www.siwawi.arubi.uni-kl.de/avr_projects/#bf_app
genommen und das ganze nach Bascom übertragen und um einen Datalogger erweitert.
Der Butterfly kommt bei 3V mit 8µA (ohne LCD) bis 25µA (mit LCD, das sind 220mAh pro Jahr) aus und ist damit mit Abstand der Rekordhalter unter den Atmegas im Batteriebetrieb.
Der Original C-Code belegt 99% des Speichers (14300 Byte + 2048 Byte for the Bootloader). Nach tausend Codezeilen ist es sicher: Bascom erzeugt etwa 50% bis 100% mehr Hex-Code als GCC. Die Umsetzung wurde möglich, durch das nette Bascom-Feature Assembler und Basic zu mischen.
Nach konsequenter Straffung der AVR-Algorithmen blieb noch Platz für einen 4MBit Datalogger. Die Module music und vcard habe ich nicht übertragen.
Der Bascom Hex-Code ist kleiner als 8KByte, womit für eigene Erweiterungen genügend Platz bleibt.
Der Code ist gut kommentiert aber länger als die zulässige Nachrichenlänge. Ich hab die Datei hochgeladen:
************************************************** *************************
'Datalogger software for AVR Butterfly demo board.
'
'This code based on the ATMEL sample code for the Butterfly (for IAR-C)
'parts not implemented (from IAR-C sample code): music and vcard
'
'BASCOM code with:
' State machine menu (over 100 entries)
' Clock (time+date)
' Datalogger with 4Mbit dataflash
' 32768 Logs at 16 Byte
' free intervall from 1 minute to 24 hours
' restore old datalogger counter after a reset
' formated print of datalogs at 9600 Baud:
' HH:MM:SS DD.MM.YY ADC1[RAW] ADC2[RAW] ADC3[RAW] Temp[°C]
' ADC ASM Code for fast conversion 8 times and averaging for better accuracy
' Temperature measurements
' Light measurements
' Voltage readings
' LCD interrupt
' scrolling text (over 6 chars)
' LCD auto power off (timer interrupt)
' Adjust LCD contrast
' Key interrupt
' detect permanent pressed key (interrupt)
' Key Click (Speaker)
' Main Loop with power save mode (loop with 1sec and 63ms)
'
'very low power consumption: 8µA LCD OFF
' 25µA LCD ON (220mAh a year !!!)
' 40µA scrolling text
'
'hex code length: <8 KByte (under 50% of 16K memory)
'
'Attention! The dataflash actice current peak while a erase is 35mA (<12ms).
'If you use a external battery, the schottky diode BAT54C (Vcc_ext) has a
'forward voltage of 0,4V-0,5V. The dataflash needs min 2,5V.
' => The minimal external voltage with Datalogger is 3,0V!!!!
'If the external voltage sink under 3V the SPI-Bus reads only &HFF.
'
'code testet with Bascom 1.11.8.1 and 1.11.8.3
'workaround for following Bascom AVR-Register-Bugs (Atmega169):
' Config Spi = ...
' Config Clock = Soft
' Powersave
' Clockdivison
'************************************************* **************************
$regfile = "m169def.dat"
$framesize = 32 'Stack
$swstack = 32
$hwstack = 64
hier mal die Print-Ausgabe im Format:
HH:MM:SS DD.MM.YY ADC1[RAW] ADC2[RAW] ADC3[RAW] Temp[°C]
400: 15:50:0 1.7.6 529 0 494 +23C
401: 16:0:0 1.7.6 529 0 496 +23C
402: 16:10:0 1.7.6 524 0 492 +24C
403: 16:20:0 1.7.6 499 0 370 +26C
404: 16:30:0 1.7.6 476 0 139 +28C
405: 16:40:0 1.7.6 467 0 146 +28C
406: 16:50:0 1.7.6 464 0 152 +29C
407: 17:0:0 1.7.6 466 0 161 +28C
408: 17:10:0 1.7.6 489 0 199 +26C
409: 17:20:0 1.7.6 511 0 528 +25C
410: 17:30:0 1.7.6 510 0 212 +25C