Forum: Mikrocontroller und Digitale Elektronik Temperatur im Atmega speichern möglich?


von Daniel W. (pegasus)


Lesenswert?

Hallo,

ich möchte einen ATMEGA8 für Temperaturmessungen im Garten
benutzen. Einmal stündlich soll die Temperatur gemessen
und gespeichert werden.

Alle paar Tage soll der AVR am PC angeschlossen
und die Daten aus dem Atmega ausgelesen werden.

Frage : Wo speichere ich die Messdaten eigentlich?

Wird der EEProm des AVR's benutzt, um zu speichern?

2.Frage: Besteht wenn der AVR stromlos ist, die Gefahr, dass
der AVR die Daten vergisst?

von Timmo H. (masterfx)


Lesenswert?

>Frage : Wo speichere ich die Messdaten eigentlich?
Für sowas ist das EEPROM da

>Wird der EEProm des AVR's benutzt, um zu speichern?
Das hängt von dir ab

>2.Frage: Besteht wenn der AVR stromlos ist, die Gefahr, dass
>der AVR die Daten vergisst?
Nicht wenn sie im EEPROM gespeichert sind.

von PJ (Gast)


Lesenswert?

Vielleicht musst Du den AVR nicht stromlos schalten, sondern kannst ihn 
schlafen legen, wobei viel weniger Strom verbraucht wird.

Dann bleiben die Werte auch im RAM erhalten, solange er nicht stromlos 
wird.

Vielleicht möchtest Du auch nicht einfach nur stündlich messen, sondern 
einen Mittelwert über mehrere Messwerte pro Stunde bilden.

Wenn die Temperaturwerte für benötigten Temperaturbereich und 
Genauigkeit so skaliert werden, dass sie in ein Byte passen, hasst Du 
die maximale Aufzeichnungsdauer.

Vielleicht könntest Du Werte sogar im Flash speichern, wenn es von der 
Dauer her sonst nicht ausreicht (Urlaub...).

von M. H. (doktorgnadenlos)


Lesenswert?

Ganz recht, das EEPROM des ATmega8 ist mit 512 Bytes doch sehr 
übersichtlich. Wenn Du Dich etwas genauer mit den AVRs auskennst, wäre 
es denkbar den Code im Bootbereich laufen zu lassen und die Daten werden 
ins restliche Flash geschrieben. Es gibt dann aber ein paar 
Einschränkungen, so können die Daten nur pageweise gelöscht werden. Ein 
Ringpuffer ist also nur mit Einschränkungen möglich.

Eine (optionale) Checksumme sollte dennoch im EEPROM abgespeichert 
werden.

von Timmo H. (masterfx)


Lesenswert?

>Ganz recht, das EEPROM des ATmega8 ist mit 512 Bytes doch sehr
>übersichtlich.
Weil:
>Einmal stündlich soll die Temperatur gemessen
>und gespeichert werden.
und
>Alle paar  Tage soll der AVR am PC angeschlossen
>und die Daten aus dem Atmega ausgelesen werden.
da würden die 512 Byte für 3 Wochen reichen wenn 1 Messwert je 1 Byte 
belegt. Die 8 Bit pro Messwert reichen allemal aus.
Wenn du jedoch einen Zeitlichen Bezug haben willst (Datum, Uhrzeit) 
wirds in der Tat sehr eng. Da sollte man sich dann doch überlegen auf 
externe Komponenten zurückzugreifen oder den Flashspeicher dazu zu 
benutzen. Ein 2Kx8 serielles EEPROM kostet auch nur 50 cent oder so.

von Timmo H. (masterfx)


Lesenswert?

Mir fällt gerade was ein...
Du kannst natürlich auch einfach die ersten paar Bytes dafür nehmen das 
Datum und Uhrzeit zu speichern und da du ja in festen Abständen die 
Temperatur ausliest kannst du dann ja auf den Zeitpunkt schließen. Von 
daher würden die 512 Bytes inkl. Datum und Uhrzeit immernoch für 3 
Wochen reichen.

von M. H. (doktorgnadenlos)


Lesenswert?

Timmo H., der Ansatz bedingt aber, dass es keinen Spannungsausfall oder 
sonstigen Reset gibt, sonst ist der Zeitbezug weg. Dann kann aber auch 
gleich das SRAM (mit-)verwendet werden.
Soll's etwas solider sein, empfehle ich dazu eine RTC, beispielsweise 
den DS1307. In Verbindung mit einem seriellen EEPROM sind der 
SW-Entwicklung fast keine Grenzen mehr gesetzt (Übertragung der Echtzeit 
vom PC zum Zielsystem, Temperaturmessung mit exaktem Zeitstempel, nahezu 
unbegrenzte Aufzeichnungsdauer, keine Inkonsistenzen bei Schaltjahren 
etc.)

von Timmo H. (masterfx)


Lesenswert?

Naja, man kann es ja so machen, dass das Programm generell zu aller erst 
das EEPROM durchguckt, und nachsieht wo die erste "0" steht. An dieser 
Stelle wird dann der Timestamp geschrieben (meinetwegen vom RTC 
ausgelesen) und dann schreibt er fleißig die Temperaturen weiter bis der 
Speicher voll ist.
Bei der Auswertung der Daten muss man dann nur gucken wo ein Timestamp 
ist und ab da gehen die Werte ja immer wieder +1 Stunde.
Nachdem die Daten ausgelesen wurden löscht man das EEPROM wieder und der 
ganze Spaß geht von vorne los.

von Spocki (Gast)


Lesenswert?

Alles zu umständlich. Nimm doch einen 24C256, der koste kaum was, ist 
klein und Du musst keine solchen Klimmzüge machen. Hat 32 kByte. Wenn 
das immer noch nicht langt, gibt's auch noch grössere.

von Spocki (Gast)


Lesenswert?

...und Du kommst mit einem viel kleineren AVR aus.

von Timmo H. (masterfx)


Lesenswert?

Naja wirklich umständlich finde ich das jetzt nicht.
Wahrscheinlich ist der Mega8 ja auch schon vorhanden, dann müsste man 
sich nicht einen "kleineren" kaufen. Das Argument zählt also nur wenn 
die Teile eh noch gekauft werden müssen.
Dann könnte man auch gleich den ATmega88 nehmen, der hat sogar ne RTC 
Funktion, dann würde man sich auch die Echtzeituhr sparen (die kostet 
immerhin über 2€). Das externe EEPROM würde ich aber alleine deswegen 
noch  nehmen, damit man auch noch Möglichkeit hat, an das Teil auch noch 
Luftdruck etc. mitzuloggen.
Aber letzten Endes bleibt es ja jedem selbst überlassen. Wenigstens hat 
der TO jetzt ein paar Anregungen bekommen, falls er das überhaupt alles 
gelesen hat, denn gemeldet hat er sich jetzt ja gar nicht wieder.

von T0 (Gast)


Lesenswert?

Super, danke für die Antworten.

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.