PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Speichern im EEprom und von Zeit zu Zeit abfragen



Duesentrieb
07.01.2010, 11:22
Hallo zusammen,

ich habe bisher noch nichts mit dem Speichern von Daten im EEProm gemacht.
Nun möchte ich gerne die Laufzeit einer Pumpe je Stunde speichern.

Ich habe noch keine richtige Idee wie man sowas macht und wollte daher mal hier nachfragen.

Meine Idee ist, jede Stunde ein Byte vor zu sehen und dort den Minutenwert der Laufzeit zu hinterlegen. Ich werde einen Mega32 nutzen so dass da einiges reingehen wird.
Von Zeit zu Zeit möchte ich dann seriell eine Abfrage machen und die einzelnen Bytes abfragen und anschließden löschen.

Was meint ihr dazu. Geht das?
Hat dazu vielleicht schon jemand ein Beispielprogramm?

Jaecko
07.01.2010, 11:52
Sowas ist kein Problem; dazu ist der EEPROM u.a. auch da.

In nem CAN-Monitor hab ich auch die Laufzeiten der verschiedenen Systeme (Zündung, Motor, Beleuchtung, Klimaanlage) drin; hinterlegt wird das ganze Sekundengenau jeweils als 32 Bit-Wert.
Gespeichert wird hier aber nicht immer, sondern nur dann, wenn man die Zündung abschaltet und das CAN-Sleep-Signal vom Steuergerät gesendet wird.
Vorteil: Kein "unnötiges" Schreiben; Nachteil: Fällt das Gerät aus, bevor gespeichert wurde, sind die Daten dieser "Sitzung" halt weg.

Je nach dem wie deine Schaltung aussieht und wie oft die Pumpe an/abgeschaltet wird, könnte man da auch sowas machen, dass nur geschrieben wird, wenn abgeschaltet wird.

Aber auch stündlich schreiben geht (wohl auch weniger Aufwand); 100.000x Schreiben sind garantiert möglich; Bei Dauerbetrieb komm ich da auf 11,4 Jahre, die das Ding dann durchhält, wenn jeweils 1x pro Stunde geschrieben wird.

Duesentrieb
07.01.2010, 12:31
Na dann waren meine Gedanken gar nicht so schlecht.
Ich werde die Daten in der Pumpensteuerung speichern und dann von Zeit zu Zeit über meinen Can Bus abfragen und an einem PC auswerten.

Was mir jetzt noch fehlt ist die Berechnung der Stunde.
Wenn ich einen Mega32 habe der mit 7,3728 MHz getaktet wird, muss ich bei der Berechnung des Timers doch immer noch dir Größe des des Programms berücksichtigen?

Vitis
07.01.2010, 13:40
oder Du hängst nen Uhrenquarz mit dran, dann kann
der AVR nen Sekundentakt mit Interrupt recht genau
generieren.

Wenn Du in der ISR das Zurücksetzen des Timers an den Anfang stellst
gehts auch recht genau reproduzierbar unabhängig von der Länge der ISR.
Diese sollte man aber generell eher kurz halten und mit Flags arbeiten.

Jaecko
07.01.2010, 17:00
Einfach den Timer im CTC-Modus (sofern vorhanden) laufen lassen; dann geht das Zurückstellen auch ohne "Zeitverlust" (macht der Timer dann selbst).
Dabei gehen aber leider die Bascom-Befehle ("Config Timer") nicht mehr, d.h. man müsste hierbei selbst die Register von Hand passend setzen.

Ich hab so auch nen Timer mit nem "normalen" 8MHz Quarz laufen und seit dem Ende der Sommerzeit ist die Abweichung immer noch < 1 min.

for_ro
07.01.2010, 18:22
Dabei gehen aber leider die Bascom-Befehle ("Config Timer") nicht mehr, d.h. man müsste hierbei selbst die Register von Hand passend setzen.
Hallo Jaecko,
warum meinst du, dass die Bascom Befehle dabei nicht gehen?

Gruß

Rolf

Jaecko
07.01.2010, 18:36
"Damals" (Als ich Bascom zuletzt verwendet hab), kannte Bascom nur den "klassischen" Timer, d.h. TCNT wird hochgezählt und muss in der ISR immer wieder von neuem auf den gewünschten Wert gesetzt werden.

Falls Bascom mittlerweile den CTC auch unterstützt, wärs natürlich perfekt.

for_ro
07.01.2010, 18:54
Ja, das geht. Z.B. so
Config Timer2 = Timer , Clear Timer = 1 , Compare = Toggle , Prescale = 1
OCR2=0 für halbe Clock bis
OCR2=255 für entsprechend geringer.
Und natürlich auch mit größerem Prescaler.