mikrocontroller.net

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


Autor: Raphael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Analog (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Analog (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso, was sind das eigentlich für Pflanzen ? :)

Autor: Christian Gärtner (christiang)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Raphael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bensch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist keine RTC (Real Time Clock)!

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

Autor: "10indahose (Gast)
Datum:

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

Autor: Raphael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Raphael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@10indahose:

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

-Raphael.

Autor: Raphael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Bensch:

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

-Raphael.

Autor: Christian Gärtner (christiang)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Raphael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Raphael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian Gärtner (christiang)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Raphael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: oha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian Gärtner (christiang)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Raphael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Raphael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Raphael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bensch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht 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...)

Autor: Raphael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Moritz E. (devmo)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: oha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: oha (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.