Forum: Mikrocontroller und Digitale Elektronik uC RTC soll reset überleben


von Raphael (Gast)


Lesenswert?

Hallo!

Ich habe mit einem Atmega88 eine kleine RTC implementiert auf basis von 
dem 16MHz quarz. Ich wollte mir die 3 euro und platz auf der platine 
sparen.

Nun habe ich natürlich das problem, dass die uhrzeit kein reset 
überlebt... Eine backup batterie habe ich schon, sonst läuft das gerät 
am strom.

Ich frage mich aber, ob ich den watchdog benutzen soll, um auf nummer 
sicher zu gehen: es wäre nicht so gut, wenn die pflanzen 24 stunden 
beleuchtet werden, oder die heizung die ganze zeit läuft, weil sich der 
mega88 sich aufgehängt hat...

Wenn der watchdog aber zubeisst, geht meine uhrzeit verloren (ist ja 
klar...). Also dachte ich, ich muss doch eine RTC einbauen. Oder gibt es 
vieleicht eine andere möglichkeit?

-Raphael.

von Analog (Gast)


Lesenswert?

Naja, Du kannst die Zeit auch vor dem Reset ins interne EEPROM 
schreiben. Allerdings solltest Du eine Offset-Zeit vor dem Schreiben 
dazu addieren. Diese müsstes Du irgendwo ermitteln (Zeitmessen, 
Abschätzen oder OP-Codes zählen ...).
Hauptsächlich setzt sie sich dann zusammen aus:
- Zeit für das Einschreiben
- Resetzeit
- Startzeit des Mikrokontrollers
- Zeit für auslesen der Zeit aus dem EEPROM

Eine Ungenauigkeit und eine daraus resultierende Zeitabweichung wirst Du 
aber auf jeden Fall haben.

von Analog (Gast)


Lesenswert?

Achso, was sind das eigentlich für Pflanzen ? :)

von Christian G. (christiang)


Lesenswert?

Lege die Variablen für die Zeit einfach in eine Sektion, die beim 
Neustart nicht (mit Null) initialisert wird.
Und warum hast du eigentlich Resets? Durch den Watchdog? Wenn ja, dann 
solltest du mal nach der Ursache forschen. Ein Watchdogreset ist ein 
Notausstieg und sollte während des normalen Programmablaufs niemals 
vorkommen.

von Raphael (Gast)


Lesenswert?

Danke für den tip!

Das hört sich ja machbar. Soll ich den "interrupt and system reset" 
modus benutzen? Und dann muss ich noch beim start nachschauen, ob es 
einen watchdog reset war, damit ich noch die zeit aus dem eeprom lesen 
kann, richtig?

Da ich hoffe, dass ich nicht sooo schlecht programmiere, dass der 
watchdog jeden tag zubeisst, ist mir die ungenauigkeit ein wenig egal. 
Es geht nicht um sekundengenaues schalten.

-Raphael.

von Bensch (Gast)


Lesenswert?

Das ist keine RTC (Real Time Clock)!

Aber für deine Cannabisplantage ist's eh egal....

von "10indahose (Gast)


Lesenswert?

>Eine backup batterie habe ich schon, sonst läuft das gerät am strom.
Und wo ist dann dein Problem?

von Raphael (Gast)


Lesenswert?

Hallo Cristian,

es handelt sich eher um prätive massnahmen. Ich habe jetzt noch keine 
probleme mit der steuerung gehabt. Nur wenn was passiert, will ich 
lieber vorbeugen. Deshalb wollte ich den watchdog benutzen. Ich habe es 
in dem avrusb code gesehen. Da ich auch einen USB anschluss habe, wäre 
es eher unpassend, wenn der USB code der uC aufhängen würde.

Wie gesagt, es wäre eine katastrophe, das gewächhaus auf 45 grad zu 
heizen...

Gruß
Raphael.

von Raphael (Gast)


Lesenswert?

@10indahose:

wenn der uC sich aufhängt. Da wollte ich den watchdog benutzen.

-Raphael.

von Raphael (Gast)


Lesenswert?

@ Bensch:

fern von mir die idee! Es gibt viele anwendungen für gewächshäuser, die 
nicht alle illegal sind...

-Raphael.

von Christian G. (christiang)


Lesenswert?

Wenn es keine Katastrophe ist, dass die Heizung mal richtig Gas gibt, 
dann sollte dir das aber mindestens die 3€ für eine externe RTC Wert 
sein! Abgesehen davon wäre hier eine Temperaturüberwachung zusätzlich 
angesagt.

Wie kritisch ist eigentlich ein Stromausfall von sagen wir mal zwei 
Stunden?

von Raphael (Gast)


Lesenswert?

@Christian:

moment mal: ich sagte, es IST eine katastrophe auf 45grad zu heizen. Und 
eine temperatur regelung ist auch da, nur auch im mega88 implementiert. 
Wenn er sich aufhängt, fällt alles aus! (oder bleibt an, je-nach-dem...)

-Raphael.

von Raphael (Gast)


Lesenswert?

@Christian:

ein stromausfall ist weniger kritisch. Ich habe schon eine backup 
batterie (wie oben beschrieben) sodass die zeit erhalten bleibt. Die 
relais werden nicht versorgt, wenn die schaltung auf batterie läuft.

Die relais bekommen dann auch keinen strom im lastkreis, und 
dementsprechend wird nichts überheizt, oder kommt durcheinander.

-Raphael.

von Christian G. (christiang)


Lesenswert?

Wie kann die Zeit, gespeichert im RAM des µC, einen zwei stündigen 
Stromausfall überleben? Nach dem Wiederanlaufen gehtdeine Uhr zwei 
Stunden nach, oder?

Ich will dir nicht den Watchdog ausreden, der ist in deinem Fall 
notwendig. Allerdings solltest du dir Gedanken machen, ob (wie fiktiv 
angenommen) das Nachgehen der Uhr irgendwelche Probleme bereitet.

von Raphael (Gast)


Lesenswert?

ich wiederhole: jetzt schon (ohne WD oder RTC baustein) überlebt die 
schaltung einen stromausfall von mehrere stunden, da der uC von der 
batterie versorgt wird. Der rest (hauptsächlich relais und display) wird 
nicht von der batterie versorgt, und diese zu schonen.

Die Uhrzeit geht also perfekt, mit oder ohne strom aus der dose, solange 
die batterie noch geht, und kein reset (aus welchem grund auch immer) 
durchgeführt wird.

Das einsparen eines richtigen RTC ist eher für mich zum lernen, als eine 
kommerzielle überlegung. Ich wollte ausserdem die schaltung möglichst 
einfach halten.

Ich werde also erstmal mit der vorgeschlagenen methode bei drohendem 
WD-reset die zeit ins eeprom speichern. Und dann ein paar tests 
machen...

-Raphael.

(falls ihr euch wundert, warum ich so viele grammatik-fehler in meinem 
text habe: nicht wundern, ich bin franzose. Ergo ist deutch nicht meine 
muttersprache)

von oha (Gast)


Lesenswert?

1) USB Anbindung mit einem FTDI ueber das UART ist nun wirklich nicht 
schwierig.
2) Es sollte ja nicht so schwer sein, etwas code zu schreiben, der 
laeuft, ohne sich aufzuhaengen...
3) Mann kann den Hardware RTC ja im Layout vorsehen, muss ihn in der 
Serie dann nicht bestuecken.

von Christian G. (christiang)


Lesenswert?

ok - mein Fehler mit der Backupbatterie, hab ich falsch interpretiert.

> Ich werde also erstmal mit der vorgeschlagenen methode bei drohendem
> WD-reset die zeit ins eeprom speichern.

Wie willst du einen drohenden Watchdogreset voraussagen?
Wenn, dann mußt du schon zyklisch die Zeit ins EEPROM speichern, wobei 
hier die Methode mit der RAM-Sektion besser wäre. Mach dir mal ein paar 
Gedanken, wie oft du ins EEPROM speichern willst und für wie viele 
Schreibzyklen das EEPROM ausgelegt (spezifiziert) ist.

von Raphael (Gast)


Lesenswert?

@Christian:

wie ich den drohenden WD-reset "vorhersagen" kann ist ja easy: es gibt 
einen modus, wodurch der WD erst einen interrupt und dann einen reset 
auslöst (siehe abschnitt 10.9.2 im atmega88 datenblatt).

Et voila!

Raphael.

von Raphael (Gast)


Lesenswert?

@oha:

Im prinzip hast du völlig recht. Nun bin ich einer, der lieber keine 
SMD-teile verbaut ;-) Ausserdem finde ich die teile auch nicht ganz 
billig. Als DIP-modul sind die ja richtig unbezahlbar (~20 euro). Und 
bisher habe ich mit usbtiny oder avrusb sehr gute erfahrung gehabt.

Sonst, RTC vorsehen aber nicht bestücken ist keine schlechte idee, nur 
wird es bei mir keine "Serie" geben. Ich mache alles selber, sprich mit 
platine ätzen, bestücken, und benutzen. Falls jemand an die schaltung 
interressiert ist, kriegt er von mir nur die schaltung: den rest kann ja 
selber machen.

Wegen 2), das dachte ich auch. Nun habe ich gelernt (bin 
informatiker...), "fehlertolerante software" zu entwickeln. Und da bei 
mir die testphase äusserst inexistent ist (ist ja nur für mich), muss 
ich einen fallschirm einbauen (der WD eben), auch wenn er löcherig sein 
kann.

Also vielen dank an alle für die vielen vorschläge! Jetzt muss ich mich 
mal ans ausprobieren machen.

-Raphael.

von Uwe .. (uwegw)


Lesenswert?

Christian Gärtner wrote:
> Lege die Variablen für die Zeit einfach in eine Sektion, die beim
> Neustart nicht (mit Null) initialisert wird.
Das würde ich erst mal ausprobieren! Da ja die Spannung nicht ausfällt, 
brauchst du das EEPROM nicht zu bemühen, das RAM hält ebenfalls die 
Daten (gelöscht wird es erst beim Programmstart, und das lässt sich 
verhindern, indem man den Kram in die noinit-Section packt).
Und beim Programmstart kannst du dann zuerst MCUCSR abfragen, wer denn 
gerade resettet hat. War es ein Power-On-Reset, dann kannst du die Zeit 
auf 00:00 zurücksetzen. War es der Hund, schreibst du "Diese 
Fehlermeldung sollten sie niemals zu Gesicht bekommen!" aufs Display, 
und behälst die Zeit.

von Raphael (Gast)


Lesenswert?

@Christian:

deine lösung mit dem .noinit section hört richtig "elegant" an" das muss 
ich sofort ausprobieren!

Was passiert eigentlich mit dem speicher während des resets? Ich konnte 
dazu im datenblatt überhaupt nichts finden...

Danke!

-Raphael.

von Uwe .. (uwegw)


Lesenswert?

Ich habs gerade mal selbst getestet: läuft einwandfrei, das RAM überlebt 
sämtliche Resets (bis auf Power-on-Reset natürlich). Und MCUCSR verrät, 
wer schuld war.

Das RAM wird bei einem Reset anscheinend nicht initialisiert, und die 
Register auch nicht. Auch ich habe dazu nichts im Datenblatt gefunden. 
Ich habe es bei dieser Gelegenheit mal ausprobiert:
http://www.roboternetz.de/phpBB2/viewtopic.php?t=18714
In der Praxis merkt man das selten, weil der avr-gcc alle Variablen beim 
Start auf 0 setzt.

von Bensch (Gast)


Lesenswert?

> Das einsparen eines richtigen RTC ist eher für mich zum lernen, als eine
kommerzielle überlegung.

Was kostet ein Ausfall?

> Ausserdem finde ich die teile auch nicht ganz
billig. Als DIP-modul sind die ja richtig unbezahlbar (~20 euro).

Was soll das Modul? Batterie ist vorhanden, eine RTC mit eingebautem 
Quarz kostet vielleicht 3-4€. Nebenbei sind damit alle 
Software-Klimmzüge unnötig.

von Uwe .. (uwegw)


Lesenswert?

Habe jetzt auch noch mal etwas mit und ohne Brown-out getestet. Mein RAM 
überlebt bis knapp unter 2,2V (normaler Mega16 ohne L, 16MHz). Darunter 
bleibt der AVR hängen, und das RAM nimmt zufällige Werte an.
(Und sogar mein LCD, das eigentlich nur für 5V vorgesehen ist, macht da 
noch mit! Allerdings nur mit negativer Kontrastspannung von -2,5V...)

von Raphael (Gast)


Lesenswert?

@Uwe
Nun habe ich es auch am laufen. Es ist ja traumhaft ;-) Ich hätte nicht 
gedacht, dass es mit so einem einfachen trick geht!

@Bensch:

das modul-preis bezog sich auf einen FTDI-modul in DIP-ausführung. Was 
der preis der RTC bausteine angeht, stimmt es, dass die nicht wirklich 
teuer sind.


Der punkt ist einfach: warum sollte ich ein RTC-baustein benutzen, wenn 
mein atmega88 sich die ganze zeit langweilt... Und wenn es sogar mit dem 
watchdog ohne grosse probleme geht, weiss ich wirklich nicht warum ich 
es nicht im AVR implementieren sollte sollte.

-Raphael.

von Peter D. (peda)


Lesenswert?

Ich weiß nicht, warum viele Leute immer so heiß auf den Watchdog sind.

Der Watchdog kann doch keine Programmfehler beheben, das kann nur der 
Entwickler selber machen.


Peter

von Jens (Gast)


Lesenswert?

Mach erstmal alles ohne Watchdog und teste ob es sich innerhalb einer 
Woche aufhängt, sozusagen alles Eingangstechnisch im Gewächshaus 
aufbauen, aber die Ausgänge erstmal nur mit Ersatzlasten betreiben (230V 
Halogenlampen?).

Wenn nach ner Weile alles noch geht, also so wie es soll, dann baust du 
den Watchdog rein und testest nochmal.... aber mach irgendwo noch eine 
LED hin die anzeigt ob der Watchdog angesprungen ist.

@Watchdog hasser:

Es kann ja immer mal irgendwas sein, Handy in der Hemdtasche oder sowas 
in der Art wo dann der µC abstürzen kann, und bei einer wichtigen 
Steuerung sollte die Hardware so designed sein, dass ein Handy kein 
Problem ist.
Dazu sollte zusätzlich eben der Watchdog ansein, kann ja immer mal was 
unerwartetes passieren

von Moritz E. (devmo)


Lesenswert?

Also eine alternative wäre einen simplen Binärcounter-IC z.B. 74x393 
dazu zu packen, der mit 8 Bit die kleinste Zeiteinheit ("tick") 
hochzählt, entweder ständig und parallel zum uC, oder er wird von der 
WTD routine gestartet.
Nach dem Reset ließt er sich den 8 bit Wert ein und weiß so exakt 
wieviele Ticks er verpasst hat. So sollte man es deterministisch machen 
können.

von oha (Gast)


Lesenswert?

Der ganze Aufstand wegen 20 Euro ? Wobei ich meine DS1307 fuer 4 euro 
kriege.

Nur schon alles diese Postings hier kosten mehr als 20 Euro.

von Peter D. (peda)


Lesenswert?

Man kann auch nen ATtiny25 (1,20€) als RTC programmieren, zieht bei 5V 
etwa 15µA. Ein 1F Goldkap hält ihn eine Woche.


Peter

von oha (Gast)


Lesenswert?

5V ? Stromsparanwendungen sollten nicht mit 5V laufen. Die Batterien 
haben alle weniger Spannung.

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.