www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR: Log-Daten in Flash schreiben -- Bootloader nutzen?


Autor: Dirk Wiebel (wiebel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich will mit einem AVR (Typ steht noch nicht genau fest) einen
stromsparenden Temperaturlogger mit langer Akku- und
"Speicherlaufzeit" aufbauen -- momentan stellt sich bei mir noch die
Frage nach dem passenden Speicher. Habe hier ein paar nette FRAMs
(FM24C16), die aber nur 16kBit sichern können. Das wird bei
viertelstündlicher Messung dann doch schnell eng. SPI-Flash gibt's
zwar in ausreichender Größe, SD-/MMC-Karten wären auch möglich, aber
irgendwie möchte ich möglichst wenig Bausteine benutzen und das ganze
soll auch ziemlich klein sein.

Gerade kam mir die Idee: Wenn ich das gesamte Programm (eigentlich nur
TOSC2-, I2C/TWI, UART-Routinen) in die Bootloader-Sektion eines Mega128
packen kann, hätte ich doch ausreichend Platz für Daten im
Programm-Flash des µC. Mit PICs soll das ja laut Sprut funktionieren,
mir wäre aber ein AVR lieber, da ich die Werkzeuge inkl. Debugging
einfach kenne. Daher die Frage an die Community: Hat jemand schon
einmal versucht, dort Daten zu speichern? Falls ja, würde ich mich über
einen kurzen Bericht freuen. Falls nein, werdet Ihr in ein paar Wochen
einen solchen Bericht hier lesen...

Beste Grüße und sonniges Wochenende wünscht

Dirk

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  SPI-Flash gibt's zwar in ausreichender Größe, SD-/MMC-Karten
> wären auch möglich, aber irgendwie möchte ich möglichst wenig
> Bausteine benutzen und das ganze soll auch ziemlich klein sein.

Naja, so ein schnuckeliger 4 Mbit Dataflash im SO-8, wie er auch im
Butterfly verbaut ist, ist ja nicht garade groß.

> Gerade kam mir die Idee: Wenn ich das gesamte Programm (eigentlich
> nur TOSC2-, I2C/TWI, UART-Routinen) in die Bootloader-Sektion
> eines Mega128 packen kann, hätte ich doch ausreichend Platz für
> Daten im Programm-Flash des µC.

Wieso muß das Programm dazu in der Bootloader-Sektion stehen? Die
SPM-Intruktion ist doch nicht nur dem Bootloader vorbehalten, oder
doch?

Autor: Dirk Wiebel (wiebel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Rolf,

<zitat>Wieso muß das Programm dazu in der Bootloader-Sektion stehen?
Die
SPM-Intruktion ist doch nicht nur dem Bootloader vorbehalten, oder
doch?</zitat>

muss es nicht? Dann werde ich mir das Datenblatt noch einmal in aller
Ruhe durchlesen. Wäre ja noch schöner!

Gruß,
Dirk

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst das Flash aus der Bootloadersection heraus beschreiben.

Das Ganze funktioniert übrigens ganz gut (auchschonausprobierthab)...

Viel Erfolg
Magnetus

Autor: Dirk Wiebel (wiebel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Datenblatt ATMega128, S. 11:

"Program Flash memory space is divided in two sections, the Boot
Program section and the Application Program section. Both sections have
dedicated Lock bits for write and read/write protection. The SPM
instruction that writes into the  Application Flash Memory section must
reside in the Boot Program section."

... aber da man bis zu 4096 words in dem Bootsektor unterbringen kann,
sollte das für meine Zwecke reichen.

Autor: Dirk Wiebel (wiebel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Magnus:

Das war aber sicher keine ganze Minute, die zwischen den Postings lag
;)

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Dirk:

Falls Du versuchst, das Ganze mit AVRStudio zu debuggen:

AVRStudio flippt aus, wenn du verschiedene Sections nutzt. Zum Debuggen
habe ich deswegen meinen Bootloader in der Application-Section gelassen.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, ok. Hab ich wohl Mist erzählt. Sorry...
Zu meiner Verteidigung: Mein Datenlbatt war veraltet. Auf Seite 11 oder
in deren Nähe ist da kein solcher Text zu finden. Ich hatte allerdings
eh nur unter "self programming" geschaut, wo das nicht erwähnt
wurde.
Aber könnte man nicht enfach nur die Funktion, die die Werte
abspeichert, im Bootloader plazieren?

Autor: Dirk Wiebel (wiebel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Rolf:

so viel Platz brauche ich gar nicht, das sollte alles in die 1024 words
(2kByte) passen. Der erste Versuch mit einem Mega32 hat gezeigt, dass
ich alles notwendige zum Messen und zur Kommunikation in 1kByte Flash
unterkriege. Und da ist noch nix optimiert, im Gegenteil, es sitzen
noch einige Lib-Zombies drin, die gar nicht mehr gebraucht werden.

Gruß,
Dirk

Autor: Dirk Wiebel (wiebel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da ich gerade einige AT45DB081B-RC 8Mbit-Flashes für unter 0,60€ pro
Stück erstanden habe, wird das Experiment wohl noch ein bisschen auf
sich warten lassen. Mann, was kann man denn mit 8Mbit noch alles loggen
-- für reine Temperaturdaten mit 15-Minuten-Messung liefe das ja ... 28
Jahre! Das reicht ja fast für eine Klimamessreihe (30 Jahre)! Ich
befürchte nur, dass der Li-Ion-Akku nur einen Bruchteil der Zeit
erleben wird.

Gruß,
Dirk

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Rolf:

"Aber könnte man nicht enfach nur die Funktion, die die Werte
abspeichert, im Bootloader plazieren?"

Im Prinzip ja, aber Du musst dann sicher stellen, dass während des
Schreibvorganges kein Interrupt aufgerufen wird. Wenn doch, so muss der
entsprechende Interrupthandler, sowie alle Interruptvektoren auch in der
Bootloader Section stehen.

Gruß,
Magnetus

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum nuzt du nicht den internen EEPROM?
Der ist sogar öfters beschreibbar :)

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Warum nutzt du nicht den internen EEPROM?"

Antwort: (Zitat) "mit langer Akku- und "Speicherlaufzeit"

Die AVRs haben halt nicht gerade viel internes EEPROM. Der Flash ist in
der Regel deutlich grösser.

Gruß,
Magnetus

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dirk,

habe auch schon mal nen Datenlogger gebaut, dafür aber einen Mega8L +
24LCXXX verwendet. Gibt's bei Reichelt bis 512kbit (64kByte) und
kostet zusammen weniger als ein Mega128...

Gruss,
Thorsten

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.