Forum: Mikrocontroller und Digitale Elektronik Zeitschaltuhr mit RTC DS3231


von Lukas S. (baumeisterbob)


Lesenswert?

Hallo,

Ich beschäftige mit nun ab und zu schon etwas längerer mit Arduino´s und 
wollte nun etwas neues ausprobieren. Und zwar an eine Zeitschaltuhr mit 
einem Arduino Uno und einer RTC. Habe mich also etwas schlau gemacht und 
schnell erfahren das die DS3231 einer der besten Uhren sei. Also 
bestellt. Mein genauer Plan ist eine Arduino-Zeitschaltuhr die über eine 
Relai Karte zb. Um 12 Uhr Denn Springbrunnen, um 22 Uhr die Lichter usw 
ein- bwz ausschaltet.

Doch ich habe seit 2 Tagen glaub das ganze Internet duchsucht und nichts 
für mich brauchbares gefunden. Warscheinlich ist es total simpel und ihr 
lacht gerade über mich, Aber egal fragen kostet ja nichts :) Vielleicht 
hat jemand von euch einen Beispiel Sketch für mich der um bestimmte 
Zeiten bestimme Sachen "macht". Wenn ihr noch weitere Informationen 
braucht einfach sagen.
Also um 12 bis 22 Uhr X Ein- und Ausschalten
Und um 22 bis 24Uhr Y Ein- und Ausschalten

Danke schonmal.

von Ulrich (Gast)


Lesenswert?

Wie wäre es mit selber programmieren ?
Datenblatt des RTC lesen und selber ein Programm
schreiben.

von Lukas S. (baumeisterbob)


Lesenswert?

Das ist mir schon klar. Damit habe ich aber nichts zusammengebracht und 
deshalb habe ich hier gefragt ob mir jemand helfen kann. Vielleicht hat 
jemand soetwas schonmal gemacht und kann mir ein Paar Tipps geben.
Danke

von Sebastian S. (amateur)


Lesenswert?

Im Grunde genommen ist das relativ simpel:
1. I²C initialisieren - dafür gibt es dutzende von Bleistiften.
2. Die nötigen Register brav der Reihe nach setzen. Sind 'nen Haufen;-)
3. Entweder auf die Unterbrechung warten oder zyklisch nachfragen ob es
   so weit ist.

Dabei sind eigentlich nur zwei Punkte zu beachten:
1. Alle mir bekannten Uhren standen auf das BCD-Format.
2. Es kann nicht schaden die richtige Adresse (I²C) anzusprechen.

-  Ein oder zwei Register mit Flaggs sind zu bedienen.

Ich fand es am einfachsten, immer einen ganzen Registerblock zu füttern.

Dämlich ist nur, dass Du die ganze Zeit im Trüben fischen musst.
Die initiale Zeit muss in die Register.
Die Weckzeit auch.
Hat das Teil keine Anzeige, so muss Du jedes Mal warten, ob was 
passiert.

von Jürgen S. (jurs)


Lesenswert?

Baumeister B. schrieb:
> Doch ich habe seit 2 Tagen glaub das ganze Internet duchsucht und nichts
> für mich brauchbares gefunden. Warscheinlich ist es total simpel und ihr
> lacht gerade über mich, Aber egal fragen kostet ja nichts :) Vielleicht
> hat jemand von euch einen Beispiel Sketch für mich der um bestimmte
> Zeiten bestimme Sachen "macht". Wenn ihr noch weitere Informationen
> braucht einfach sagen.
> Also um 12 bis 22 Uhr X Ein- und Ausschalten
> Und um 22 bis 24Uhr Y Ein- und Ausschalten

Nein, so ganz simpel wie eine LED blinken zu lassen ist es nicht, aber 
mit einem Arduino-Board und einer DS3231 (sehr gute Wahl!) ist es auch 
nicht zu schwierig. Vom Prinzip her gibt es zwei Möglichkeiten:

Nicht wenige Arduino-Programmierer installieren sich erstmal ca. ein 
halbes Dutzend Drittanbieter-Libraries zusätzlich zur Arduino-IDE (eine 
RTC-Library, eine Time-Library, eine TimeAlarms-Library und was weiß 
ich), aber das ist ziemlich unnötig, denn mit der "Wire" Library ist in 
den Arduino Core-Libraries bereits eine gute Library enthalten, um alle 
I2C-Geräte, einschließlich I2C-RTCs, zu steuern.

Zur Kommunikation mit der RTC brauchst Du im wesentlichen zwei 
selbstgeschriebene Funktionen: zum RTC Zeit/Datum auslesen und 
Zeit/Datum stellen, und Du brauchst eine Schaltfunktion für eine 
2-Kanal-Tageszeitschaltuhr mit einer Schaltzeit pro Schaltkanal.

Im Forum von Arduino.cc habe ich sowohl im deutschen als auch im 
Programming Forumsbereich diverse RTC-Beispielprogramme gepostet.

Ich glaube, auch ein Zeitschaltuhr-Beispielprogramm war dabei. Manche 
Programme davon nur mit Zeitausausgabe und Zeitstellung über den Serial 
Monitor, manche mit Ausgabe auf 1602 Text-LCD.

Das von mir gepostete komlexe Zeitschaltuhrprogramm ist dabei ein 
"elektronisches Turmuhr-Schlagwerk", das folgendes macht:
- zur vollen Stunde (nur am Tag) einen PA-Verstärker einschalten
- und dann entsprechend der Stunde per MP3-Playermodul Turmuhr 
Stundenschläge abspielen
- danach den PA-Verstärker bis zur nächsten vollen Stunde wieder 
ausschalten
- mit automatischer Sommer-/Winterzeitumstellung
- mit einem "LCD-Keypad-Shield" und einem Einstellmenü per Drehgeber 
(mechanical rotary encoder), über das man nicht nur Zeit/Datum 
einstellen kann, sondern auch firstDaytimeHour und lastDaytimeHour, also 
welches die Tagesstunden sind, an denen das Schlagwerk aktiv sein soll, 
damit die Bewohner in der Nähe ihre Nachtruhe bekommen. Das 
Beispielprogramm hat mich echt Mühe gekostet, aber es ist tatsächlich 
auf einer kleinen Insel vor der irischen Küste im Einsatz.

Wenn Du möchtest, suche ich Dir mal eines meiner einfacheren 
Zeitschaltuhr-Beispielprogramme heraus, die Suchfunktion in dem Forum 
ist leider nicht so toll, aber ich weiß ja wonach ich suchen müßte.

von Wolfgang A. (Gast)


Lesenswert?

Baumeister B. schrieb:
> Vielleicht hat jemand von euch einen Beispiel Sketch für mich der um
> bestimmte Zeiten bestimme Sachen "macht".

Stell dir einfach vor, wie du vorgehen würdest, wenn du den Job von Hand 
machen sollst und nur einen einzigen Wecker hast.

Klugerweise machst du dir eine Liste mit Schaltzeitpunkten und dem 
jeweils erforderlichen Schaltvorgang. Damit du nicht jedesmal die ganze 
Liste durchgucken musst, sortierst du sie nach den Zeiten.
Und nun kann's losgehen.
1
Was ist als nächstes dran? 
2
Gucken, ob das jetzt oder später ist?
3
falls Später: Wecker der RTC stellen
4
              Abwarten und Tee trinken, bis der Wecker sich meldet
5
Schaltvorgang ausführen
6
und wieder von vorne ...

Das dürfte in wenigen Codezeilen abgehandelt sein. Der Hauptaufwand wird 
der Bedienkomfort zur Eingabe der Liste sein.

von Wolle G. (wolleg)


Lesenswert?

Jürgen S. schrieb:
> - mit automatischer Sommer-/Winterzeitumstellung

Habe das gerade hier gelesen.
Dazu eine Frage: Ist die Sommer-/Winterzeitumstellung schon im 
Schaltkreis vorgesehen?

von Jürgen S. (jurs)


Lesenswert?

wolle g. schrieb:
> Jürgen S. schrieb:
>> - mit automatischer Sommer-/Winterzeitumstellung
>
> Habe das gerade hier gelesen.
> Dazu eine Frage: Ist die Sommer-/Winterzeitumstellung schon im
> Schaltkreis vorgesehen?

Nein, ist es nicht, denn es gibt auf der Welt wohl weit über 50 
verschiedene Sommerzeitregeln in den verschiedenen Ländern der Erde. 
Keine Regel ist in den RTC-Modulen integriert, weder die US-Sommerzeit 
noch die EU-Sommerzeit, das mußt Du in Software machen.

Die RTC stellst Du am besten auf Zonenzeit (z.B. Berlin UTC+1 und läßt 
sie das ganze Jahr über auf Winterzeit laufen. Und wenn Du das Display 
einmal pro Sekunde aktualisierst, testest Du auf Sommerzeit, rechnest 
ggf. eine Stunde drauf (UTC+2) und zeigst die Zeit an.

Ebenfalls möglich wäre: RTC stets auf UTC-Zeit laufen lassen, und je 
nachdem draufrechnen: Im Winter eine Stunde, im Sommer zwei Stunden.

Eine entsprechende Sommerzeit-Funktion für die Zeitumstellung in der EU 
nach der derzeitigen Umstellungsregel ist extrem simpel, wenn sie nur 
zwischen dem Jahr 2000 und dem Jahr 2099 zu funktionieren braucht. Ist 
alles in irgendwelchen Beispielprogrammen von mir enthalten, könnte ich 
raussuchen.

Übrigens: Die eingebaute Weckerfunktion des RTC-Moduls lasse ich bei 
Zeitschaltaufgaben komplett außen vor. Nicht nur wegen automatischer 
Sommer-/Winterzeitumstellung, sondern weil es nur maximal 2 Weckzeiten 
in solchen Modulen gibt, und Du spätestens dann Probleme bekommst, wenn 
Du eine 4-Kanal-Zeitschaltuhr mit 4 Ein- und 4 Ausschaltzeiten pro Tag 
und pro Schaltkanal benötigst. Ob irgendein Schaltkanal EIN oder AUS 
ist, kannst Du per Software leichter prüfen als durch das Setzen von 
Alarmzeiten in der RTC und Warten auf den Alarmausgang.

: Bearbeitet durch User
von Wolfgang A. (Gast)


Lesenswert?

Jürgen S. schrieb:
> Nicht nur wegen automatischer
> Sommer-/Winterzeitumstellung, sondern weil es nur maximal 2 Weckzeiten
> in solchen Modulen gibt, und Du spätestens dann Probleme bekommst, wenn
> Du eine 4-Kanal-Zeitschaltuhr mit 4 Ein- und 4 Ausschaltzeiten pro Tag
> und pro Schaltkanal benötigst.

Das kommt drauf an, wie man sich anstellt ...

Wolfgang A. schrieb:
> Stell dir einfach vor, wie du vorgehen würdest, wenn du den Job von Hand
> machen sollst und nur einen einzigen Wecker hast.

von Jürgen S. (jurs)


Lesenswert?

Wolfgang A. schrieb:
> Jürgen S. schrieb:
>> Nicht nur wegen automatischer
>> Sommer-/Winterzeitumstellung, sondern weil es nur maximal 2 Weckzeiten
>> in solchen Modulen gibt, und Du spätestens dann Probleme bekommst, wenn
>> Du eine 4-Kanal-Zeitschaltuhr mit 4 Ein- und 4 Ausschaltzeiten pro Tag
>> und pro Schaltkanal benötigst.
>
> Das kommt drauf an, wie man sich anstellt ...

Ja klar, beim Programmieren gibt es meistens mehrere Möglichkeiten. 
Trotzdem würde ich die RTC-eigenen Weckzeiten nur für batteriebetriebene 
Projekte in Erwägung ziehen, die überwiegend im PowerDown laufen und 
extrem Strom sparen sollen. Das kommt für Arduino UNO Boards kaum in 
Frage, da ziehen der Serial-USB-Wandler und der 5V Spannungswandler 
bereits so viel Strom, dass sich ein PowerDown-Betrieb kaum lohnt, und 
spätestens wenn mit Relais 230V-Lampen geschaltet werden, kommt es auf 
0.25 Watt Stromverbrauch ja nicht an.


Hier habe ich mal ein knapp 3 Jahre altes Beispielprogramm gefunden, in 
diesem Forumsbeitrag ist eine Kurzbeschreibung enthalten und der 
vollständige Quellcode für * ZeitschaltUhrMitTimer.ino hängt dran:
http://forum.arduino.cc/index.php?topic=192958.msg1426386#msg1426386
Keine automatische Sommer-/Winterzeitumstellung in diesem Code.
Kein Display. Erweiterungen auf Text-LCD-Displayanzeige und mehr 
Schaltkanäle mit mehr Schaltzeiten habe ich im Verlauf des Threads noch 
später gepostet.

von Lukas S. (baumeisterbob)


Lesenswert?

Danke an alle dir mir geholfen haben aber ich bin langsam auf dem 
richtigen Weg! Danke nochmal!

von Wolle G. (wolleg)


Lesenswert?

Jürgen S. schrieb:
> Nein, ist es nicht, denn es gibt auf der Welt wohl weit über 50
> verschiedene Sommerzeitregeln in den verschiedenen Ländern der Erde.

Danke für den Hinweis. Dann muss mein Uhren-IS (DS32C35) weiterhin immer 
mit der Winterzeit laufen.
Hoffentlich wird der Mist mit der Sommer-/Winterzeitumstellung  bald 
abgeschaft.
Nur Ärger und unnötige Zeitverschwendung beim Progammieren!
und 2x jährlich Uhren stellen.

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.