Forum: Compiler & IDEs Daten alle 15min loggen mit RTC


von Steven W. (steven1978)


Lesenswert?

Moin,

Ich habe mal ne kleine Frage wie ich bei meinem Datenlogger am besten 
vorgehe. Ich habe ein ATMEGA644 mit LCD, externem RTC und Temp/Feuchte 
Sensor.

Hauptaufgabe:
Es soll alle 15min die Feuchte, Temp. sowie die aktuelle Zeit in ein 
EEPROM geschrieben werden. Die Daten können dann über die UART abgerufen 
werden.

Nebenaufgabe:
Die Zeit und Sensordaten sollen auf dem LCD angezeigt werden.

Idee 1:
Es wird im Hauptprogramm die Zeit des RTC abgefragt und wenn die passt 
werden die Daten gespeichert.
1
if (Minutes==00&&Secound==00||Minutes==15&&Secound==00||Minutes==30&&Secound==00||Minutes==45&&Secound==00) //alle 15min
2
    {
3
      //Write Data to EEPROM
4
                        
5
    }

Idee 2:
Ein Timer erzeugt jede Sec. ein Interrupt.
->Daten an LCD
->Zähler +1 bei 900(15min) Daten ins EEPROM Schreiben

Idee 2 scheint mir erstmal besser. Aber irgendwie ist das doch blöd ein 
externen RTC mit einem Timer abzufragen. Da gibts docvh bestimmt ne 
elegante Lösung oder ist die Timerlösung die elegante?

Danke schonmal
Gruß
Steven

von Claude M. (stoner)


Lesenswert?

Hallo Steven

Eine andere Möglichkeit wäre, einen externen RTC einzusetzen, der eine 
Alarm- / Interruptfunktion besitzt (z.B. MCP7940M). Der kann Dir jeweils 
nach 15 Min. einen Interrupt auf einen Deiner Interrupt PINs auslösen.

Das emöglicht Dir nebenbei auch, während den 15 Min in den Sleepmodus zu 
gehen und dabei sehr viel Strom zu sparen (z.B. bei Batterie-Betrieb). 
Vorausgesetzt, Deine Schaltung macht während den 15 Min. nichts anderes.


Gruss
Claude

von B. S. (bestucki)


Lesenswert?

Viele RTC können auch eine Frequenz ausgeben (z.B. DS1307). Diese 
könntest du z.B. auf 1Hz einstellen und das Signal auf einen 
Interrupt-Pin führen. So kannst du jede Sekunde die Zeit inkrementieren 
(oder jedesmal neu aus dem RTC lesen) und das Display aktualisieren. 
Danach lässt du den Controller wieder schlafen.

von Karl H. (kbuchegg)


Lesenswert?

So wie ich das sehe, ist die Hauptaufgabe einer RTC darin zu sehen, dass 
sie die Uhrzeit stromsparend auch dann weiterführt, wenn dem µC der Saft 
ausgeht oder abgedreht wird. Ist dieser Fall auszuschliessen bzw. ist 
der Fall als nicht besonders kritisch anzusehen, dann macht eine RTC 
eher wenig Sinn.
Betreibe meine Heizungssteuerung am 230V Stromnetz wobei der µC selbst 
die Uhr realisiert. In den 3 Jahren, in denen der Mega16 jetzt 
durchläuft gab es keine 2 Ausfälle aufgrund von Netzausfällen. Die 
Uhrzeit (abgeleitet aus den 50Hz aus dem Stromnetz) stimmt heute immer 
noch bis auf ein paar Sekunden mit der tatsächlichen Zeit überein (weil 
die Strom-Netzbetreiber die 50Hz konstant halten und aktiv nachführen).
Am Anfang dachte ich auch darüber nach, dafür eine RTC einzusetzen. Bis 
heute hab ich sie dann tatsächlich noch nie wirklich vermisst.

von Claude M. (stoner)


Lesenswert?

Karl Heinz Buchegger schrieb:
> ausgeht oder abgedreht wird. Ist dieser Fall auszuschliessen bzw. ist
> der Fall als nicht besonders kritisch anzusehen, dann macht eine RTC
> eher wenig Sinn.

Ich schliesse mich dem grundsätzlich an, ganz so absolut würde ich es 
aber nicht sehen.

Ich hatte mal genau die selbe Anwendung gebaut wie der TO. Das ganze 
lief ohne RTC mit drei AAA Akkus im Idle-Mode jeweils ca. 4 bis 5 Tage, 
dann waren die Zellen leer. Durch den Einsatz eines DS1307 konnte ich 
dann den Stand By Modus nutzen und so die Batterielaufzeit massiv 
erhöhen (den ebenfalls für das Aufwecken aus dem Stand By Modus 
geeigneten Timer 2 hatte ich bereits andersweitig im Einsatz).

Edit: Mein Gott! Zwei Mal durchgelesen und trotzdem 2 Fehler 
übersehen...

: Bearbeitet durch User
von Hugo (Gast)


Lesenswert?

be stucki schrieb:
> Viele RTC können auch eine Frequenz ausgeben

Viele RTC haben auch eine Weck/Alarm-Funktion...

von Karl K. (leluno)


Lesenswert?

Steven Weber schrieb:
> if
> (Minutes==00&&Secound==00||Minutes==15&&Secound==00||Minutes==30&&Secoun 
d==00||Minutes==45&&Secound==00)
> //alle 15min

das geht besser mit


//+++++++++++++volleSecunde ++++++++++++++++++++
if(gbi(bool1,schalterVolleSecunde )){
cbi(bool1,schalterVolleSecunde);


//+++++++++ min15 ++++++++++++++++++
if((min%15==0)){

....
}//min%15==0
//--------- min15------------------

}//-------- volle Secunde --------

von Steven W. (steven1978)


Lesenswert?

Vielen Dank für eure Antworten.

@Claude
Ja das mit dem MCP7940M und dem Arlam ist ne gute Idee. Hatte allerdings 
noch n DS1307 rumliegen.

@bestucki
Jau das ist das was ich gesucht habe....Hätte man auch selbst drauf 
kommen können. Aber an den ClockOut habe ich garnicht gedacht. Ich denke 
so werde ich das umsetzen.

@kbucheg
Naja ich denke das ganze würde auch ohne RTC funzen. Aber ich finds hat 
recht praktisch. Man bekommt immer das richtige Datum und Uhrzeit zu 
seinen Messwerten ohne viel aufwand geliefert. Und das der RTC mit 
Baterie läuft ist ja auch nicht schlecht.

Grüße
Steven

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.