Forum: Compiler & IDEs Daten-Logger


von Benjamin B. (holzbeinschnitzer)


Lesenswert?

Hallo zusammen,

ich habe mir ein Board gebaut mit einem Atmega32 und Programmiere ihn 
mit AVRStudio und WinAVR in C über das Programmiergerät AVRISP mkII.

Ich möchte ein analoges Signal (1024 Werte oder besser mehr) im 
Prozessor speichern und später wieder über die UART ausgeben. Mein 
Problem ist jetzt ich kann nur 999 Werte speichern über einen einfachen 
Array. Ein Wert benötigt 16 Bit, wegen 10 Bit ADC. Ich hab versucht die 
Werte im Flash zu speichern. Mit <pgmspace.h> und so wie es im Tutorial 
steht kann ich einen Array erzeugen und auslesen, aber wie kann ich z.B. 
den Array im Programm wieder ändern? Oder was würdet Ihr empfehlen zum 
Speichern von mehreren Werten?

von Thorsten (Gast)


Lesenswert?

Benjamin,
Du kannst aus einem Programm nicht schreibend auf den Flash zugreifen 
(Ausnahme: Bootloader). Da das interne EEPROM nicht ausreicht, kannst Du 
ein externes (z.B. 24CXX am TWI) benutzen, das ist wahrscheinlich die 
einfachste Lösung.
Gruss,
Thorsten

von Rolf Magnus (Gast)


Lesenswert?

Du könntest die Daten auch packen. Das gibt dann beim Lesen und 
Schreiben einen Mehraufwand, weil du die Werte zusammen- und später 
wieder auseinanderfriemeln mußt, aber dafür kannst du mehr speichern. 
Wenn du jeden Wert mit 16 Bit speicherst, hast du fast 40% des Speichers 
verschwendet.

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Man kann durchaus in den internen AVR Flash-Speicher "loggen". Dazu 
müssen lediglich die Anweisungen, die den Flash-Speicher beschreiben in 
der Boot-Section abgelegt werden (ja, die ist nicht nur für Bootloader 
verwendbar). Falls die Logger-Anwendung kompakt ist, kann man diese 
komplett in der Boot-Section unterbringen. Atmel bietet dazu auch eine 
Application-Note inkl. Beispielsoftware (allerdings für IAR-EWAVR, 
sollte aber nicht allzuschwer auf avr-gcc/avr-libc/boot.h anpassbar 
sein). Alternativen z.B.: I2C/SPI-EEprom (schon geannt), FRAM, Dataflash 
od. ST Serial-flash etc., SD-Karte/MMC, "batteriegepuffertes" RAM.

von Funky (Gast)


Lesenswert?

Was soll mit den Daten denn geschehen ?

Falls Du Meßwerte auch mit dem PC weiterverarbeiten möchtest, bietet 
sich die SD-Card Lösung an.

Einfach Karte ziehen und in den Cardreader des PC einstecken.

Bei der Größe der Speicherkarten sind dann (fast) keine Grenzen gesetzt.

von Benjamin B. (holzbeinschnitzer)


Lesenswert?

Das Board ist Teil meiner Studienarbeit und ich wollte nun das 
vorhandene Board nicht umändern und kann dadurch keine weitere 
Peripherie anschließen. Die Daten sollen mit dem PC bearbeitet werden, 
aber da ich keine weiteren Schnittstellen auf dem Bord intrgriert habe, 
nur für ein LCD und RS232, ist das ein wenig doof. :(
In meiner Auswertung der Studienarbeit werde ich das berücksichtigen.

Danke für Eure Vorschläge!

von Benjamin B. (holzbeinschnitzer)


Lesenswert?

an Martin:

wo finde ich denn die Application-Note inkl. Beispielsoftware?
Hast Du das mal ausprobiert?

von Thorsten (Gast)


Lesenswert?

Benjamin,
eine weitere Möglichkeit wäre es, statt dem Mega32 einen Mega644 zu 
verwenden. Der ist pinkompatibel zum 32er, hat aber doppelt so viel RAM 
und EEPROM. Wenn Du einen gesockelten DIL benutzt, ist das 
wahrscheinlich die schnellste Lösung (Achtung: der 644 wird erst ab gcc 
4.2 unterstützt, ansonsten heisst es patchen).
Gruss,
Thorsten

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

>wo finde ich denn die Application-Note inkl. Beispielsoftware?
atmel.com AVR106

Erstmal den Betreuer darauf "festnageln", wie viele Daten wirklich 
maximal geloggt werden sollen. Sonst fehlt die wichtigste Vorgabe für 
einen Logger. Mglw. kann man durch geschicktes zusammenpacken und 
Sicherung von Differenzen auch mit dem vorhandenen RAM oder 
EEPROM-Speicher auskommen. Mit dem vorgeschlagenen ATmega644 kann man 
sich etwas "Luft" verschaffen aber so richtig "viel" Platz hat man dann 
dennoch nicht in RAM und EEPROM.

>Achtung: der 644 wird erst ab gcc 4.2 unterstützt,
>ansonsten heisst es patchen
Falls ein MS Windows OS im Einsatz: bei WinAVR 1/07 schon alles 
"vorgekaut" und man muss das nicht selbst machen. Darin enthaltener 
gepatchter GCC 4.1.1 funktioniert hier problemlos mit ATmega644 und 
ATmega644P.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.