PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeitsystem programmieren



Wsk8
22.11.2013, 22:57
Hallo,
mir ist irgwie kein guter Titel eingefallen, deshalb versuche ich es hier so gut wie möglich zu beschreiben :)

Und zwar möchte ich gerne eine Software schreiben, die verschiedene Dinge an bestimmten Tagen zu bestimmten Zeiten ausführt.
Also z.b. Montag, 8:00 führe foo1() aus etc.

Ich will dazu eine RTC verwenden. Leider habe ich keine Ahnung wie sowas aufgebaut ist (die Software) oder wie das überhaupt angegangen wird. Vlt kann mir einer von euch helfen.


mfg

RoboHolIC
23.11.2013, 00:43
mir ist irgwie kein guter Titel eingefallen
Vielleicht "Mehrkanal-Wochenschaltuhr" ?

Aus eigener Praxis kann ich als RTC die DS1307 (als DIL) empfehlen. Es gibt auch Komplett-RTC-ICs mit integriertem Quarz, die sind in Summe kaum teurer, da kenne ich von R...t aber nur SMD-Typen; und eine Batterie braucht man ja auch noch, die steht der Miniaturisierung eher entgegen. Die Auswahl an Chips ist ziemlich groß, aber der DS1307 ist hier scheinbar recht beliebt.

Zur Umsetzung:
Die RTC muss mit aktueller Zeit und Wochentag gefüttert werden.
Je Schaltereignis muss Uhrzeit und Wochentag der Ausführung sowie und der Kanal per externer Eingabe veränderbar sein (kann im nichtflüchtigen RAM der RTC gespeichert werden); oder eben Start- und Endezeit ....
Für den operativen Betrieb sind verschiedene Wege gangbar. Entweder man kennt intern die aktuelle Zeit der RTC und prüft ständig (alle?) möglichen Ereignisse auf Handlungsbedarf; dazu sollte die RTC regelmässig ausgelesen werden.
Oder man sortiert im Controller die Schaltaufträge chronologisch und überträgt der RTC nacheinander die Schaltzeiten als Alarmzeiten; reagiert wird dann nur noch auf die elektrischen Weck/Alarm/Interruptsignale der RTC.

Klebwax
23.11.2013, 02:27
Auf UNIX Systemen erledigt sowas cron. Hier etwas zum Nachlesen:

https://de.wikipedia.org/wiki/Cron
http://www.drweb.de/magazin/cron-jobs-fuer-einsteiger-bildhaft-erklaert-via-sheldon-cooper/

MfG Klebwax

redround
23.11.2013, 11:44
Ich hab's ja schon oft gesagt: ich persönlich mag die Digisparks: http://shop.cboden.de/Digispark/Digispark-USB-Entwicklungs-Board.html
dazu kommt dann noch ein RTC-Shield: http://shop.cboden.de/Digispark/Shields/RTC-Erweiterungssatz.html
und ggf. ein I/O-Expander, falls Du mehr Kanäle schalten willst: http://shop.cboden.de/Digispark/Shields/I-O-Erweiterungssatz.html
und natürlich noch eine Treiberstufe abhängig von der Last, die Du schalten willst. Da können wir Dir aber gerne Tipps geben, sobald Du uns verrätst, was angesteuert werden soll.

In der Arduino-IDE des Digispark sind schon ein paar Beispiele für die Ansteuerung der RTC drin. Alternativ kannst Du Dir einen ersten Überblick auch im Digistump-Wiki verschaffen: http://digistump.com/wiki/digispark/tutorials/rtc Da die Code-Beispiele sehr kurz sind, siehst Du schon, dass es eigentlich ganz einfach ist: zunächst die richtige Bibliothek einbinden und eine Objekt-Variable anlegen:


#include <TinyRTClib.h>
RTC_DS1307 RTC;


Dann in der Setup-Routine die RTC starten und mit aktuellem Datum und Uhrzeit "stellen" (entfällt natürlich, wenn schon einmal gemacht):


RTC.begin();

if (! RTC.isrunning()) {
// following line sets the RTC to the date & time this sketch was compiled only for the first run
RTC.adjust(DateTime(__DATE__, __TIME__));
}


und im einfachsten Fall - wie von RoboHolIC geschrieben - in der Main-Loop regelmäßig die Uhr auslesen

DateTime now = RTC.now();

Dann kannst Du an Hand des ausgelesenen Wertes ermitteln, was zu tun ist. Im ersten Wiki-Beispiel wird der Datumswert zerlegt und auf einem LCD ausgegeben. Genauso gut kannst Du die Teilinformationen nutzen um Deine Ausgänge zu schalten.

Die Jungs vom deutschen Shop sind eigentlich sehr hilfsbereit. Wenn Du denen ne Email schickst, beraten Sie Dich ggf. auch.

Wsk8
23.11.2013, 18:52
War ja schon mal ne Menge Info. Muss das jetzt erstmal alles verarbeiten. Bei Unklarheiten melde ich mich wieder :)
Zudem wollte ich noch anmerken, dass ich bereits ein Board mit dieser RTC besitze. Ich denke die sollte mir genug Möglichkeiten bieten. http://www.nxp.com/documents/data_sheet/PCF8563.pdf

mfg