Daten-Logger

OP #550843
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?
Gast #550860
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
Gast #551042
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.
Moderator Persönliche Seite #553063
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.
Gast #553075
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.
OP #553482
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!
Gast #553496
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
Moderator Persönliche Seite #553561
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren