PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Beispielcode: stromsparender Datalogger mit Butterfly (LCD)



-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

-tomas-
20.09.2006, 00:12
Der Butterfly ist im Roboternetz wohl eher ein Exot :-)

Zur Übersicht als Ergänzung des Menüsystem der extrem effektiven State Machine.

Ich habe noch den guten Hinweis von dennisstrehl https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=22229&highlight= umgesetzt und das Menü um die Messung der Batteriespannung erweitert.

m.a.r.v.i.n
20.09.2006, 11:29
hi,

ich finde deinen Butterfly Datalogger schon sehr interessant. Pragrammiere selbst aber eher auf der AVR-GCC Schiene. Ich wollte den Butterfly vor einiger Zeit (huch, das ist auch schon wieder 1 Jahr her) als Coprozessor für den Asuro einsetzen. Siehe auch https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=9633. Leider kamen immer wieder wichtigere Dinge dazwischen.

Da ich jetzt mal wieder etwas Zeit habe, werde ich es mal mit deinem Programm und BASCOM versuchen, vielleicht komme ich damit schneller zu Potte.

BTW. Es gibt es auch einen Roboter mit dem Butterfly, den Flutterbot.
http://www.flutterbot.com. Das Problem beim Butterfly ist halt, das er zu wenig freie Ports hat. Das meiste geht leider für das LCD drauf. Beim Flutterbot kann das Display wohl gar nicht benutzt werden.

Gruß m.a.r.v.i.n

-tomas-
20.09.2006, 16:45
Habe den Butterfly als Sample erhalten. Ich sehe für das Teil außer für den Stromspar-Batteriebetrieb (bei niedriger Taktfrquenz) keine sinnvolle Verwendung. Da I2C und SPI (DF deaktiv) frei sind, ist er ideal geeignet um (Mess-) Peripherie überm Bus anzusprechen (Datalogger).

Der AVR-GCC Code ist leider zu groß, um darauf noch sinnvoll aufzusetzen.
Da kam die Idee auf, mit Bascom und ASM zu arbeiten. Trotz der verdammt schlechten Ausgangsposition mit Bascom konnte ich den Hex-Code etwa halbieren.

Bascom ist ausgesprochen unzuverlässig, wenn es an die Register (Hardware) geht und der Atmega nicht 8/16/32 heißt. Ich empfehle alle Register (>32) in ASM direkt zu setzen. Wenn es um schlanken Code geht, sollte man auch insbes. höherwertige Basic-Befehle vermeiden. Die Parameterübergabe ist eine wahre Register-Orgie. Nicht zu vergleichen mit GCC.

Einen Roboter würde ich mit einem Butterfly nicht bauen.

-tomas-
22.09.2006, 00:05
Ich habe die State Machine des Menüsystems extrahiert und für den Bascom-Simulator umgeschrieben.

Wer es mal im Simulator testen will:
https://www.roboternetz.de/wissen/index.php/Bascom_State_Machine_Menu

mail_bernd
25.01.2007, 22:42
Hallo Thomas,

ich würde dein Programm gerne mal auf meinen Butterfly einspielen.
Kann das Teil aber nicht übersetzten, der Code ist für die Demo-Ver zu groß.
Kannst Du den Hex Code bereitstellen?

Im vorraus herzlichen Dank
Bernd

mail_bernd
28.01.2007, 00:00
Hallo Thomas,
so jetzt habe ich das Zeitmodul extrahiert und es läuft auch.
Aber die Sekunden blitzen zwischendurch nur alle paar Sek auf
und die Minuten sind auch nicht immer zu sehen, bzw. werden ständig neu "aufgebaut".
Ist das bei dir auch so?
Woran liegt das?
Hängt es an der Interupt-Steuerung oder den flashen (Stromspar...), die ich noch nicht verstanden habe!!!
Gruß
Bernd

-tomas-
29.01.2007, 20:37
Ist das bei dir auch so?
nee, bei mir läuft es normal.
Du hast sicherlich beim Eindampfen des Quellcodes etwas weggespart ;-)

Als Anlage mal die die compilierte Version 1.1.

catsailor
14.12.2009, 21:23
Hallo Thomas,

Dein Projekt finde ich sehr interessant. Ich habe mir darauf hin auch einen Butterfly besorgt und die Programmierung auch hin bekommen. Lediglich mit dem Auslesen der Daten über die Com-schnitte klappt es bei mir nicht. Ich bekomme da nichts sinnvolles gelesen. Womit hast Du das ausgelesen?

Ich hoffe Du erinnerst Dich noch, ist ja doch schon einiges her.

Danke