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?
>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.
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...).
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.
>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.
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.
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.)
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.