www.mikrocontroller.net

Forum: Compiler & IDEs Daten-Logger


Autor: Benjamin Becher (holzbeinschnitzer)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin Thomas (mthomas) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Funky (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Benjamin Becher (holzbeinschnitzer)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Benjamin Becher (holzbeinschnitzer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
an Martin:

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

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin Thomas (mthomas) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.