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.
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.
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.
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.
Das ist keine RTC (Real Time Clock)! Aber für deine Cannabisplantage ist's eh egal....
>Eine backup batterie habe ich schon, sonst läuft das gerät am strom.
Und wo ist dann dein Problem?
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.
@10indahose: wenn der uC sich aufhängt. Da wollte ich den watchdog benutzen. -Raphael.
@ Bensch: fern von mir die idee! Es gibt viele anwendungen für gewächshäuser, die nicht alle illegal sind... -Raphael.
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?
@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.
@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.
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.
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)
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.
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.
@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.
@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.
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.
@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.
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.
> 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.
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...)
@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.
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
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
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.