Forum: Mikrocontroller und Digitale Elektronik Schaltuhr/Schaltwerk


von D. S. (jasmin)


Lesenswert?

Hallo,

vorweg; ja ich habe schon gesucht, die gefundenen Info's brachten mich 
aber nicht weiter.

Problem:

Eines Schaltuhr soll programmiert werden.
Dabei soll die Software aber auch nach einem Wiederanlauf des Systems 
(reset/Stromausfall) wieder in den richtigen Status gelangen.
Die Uhrzeit steht natürlich durch eine RTC immer korrekt zur Verfügung.
Daten im EEprom speichern ist notwendige, aber nicht hinreichende 
Bedingung;-).

Wer hat Ideen zur Vorgehensweise, reps. einen Pseudocode für mich ?

Ich stehe momentan etwas auf dem Schlauch bezüglich der 
"Wiederanlauffähigkeit"; die Schaltuhr selbst ist recht trivial.

Danke !

von Gast (Gast)


Lesenswert?

Hallo,

Status zyklisch im Ram der RTC sichern und nach reset/Wiederanlauf 
wieder setzen ?

von D. S. (jasmin)


Lesenswert?

@ Gast,

sorry, aber das löst keins der genannten Pobleme.

von E. B. (roquema) Benutzerseite


Lesenswert?

Dietmar S. wrote:
> @ Gast,
> sorry, aber das löst keins der genannten Pobleme.
Das Problem ist eher:
Was ist das Problem? Ich seh garkeine richtige Frage. Suchst Du Code zum 
Ansteuern der RTC oder zum Speichern im EEPROM?
Ansonsten: Bei Systemstart liest der Controller die aktuelle Uhrzeit aus 
der RTC und die Schaltzeiten aus dem EEPROM, bei Ändern der Schaltzeiten 
werden diese im EEPROM gesichert... Wo ist das Problem?

von spess53 (Gast)


Lesenswert?

Hi

>sorry, aber das löst keins der genannten Pobleme.

Aus deiner Beschreibung lässt sich eigentlich kein richtiges Problem 
ableiten.

>Dabei soll die Software aber auch nach einem Wiederanlauf des Systems
>(reset/Stromausfall) wieder in den richtigen Status gelangen.

Vielleicht beziehst du dich darauf. Aber wer soll wissen, was du z.B. 
mit 'Status' meinst.

MfG Spess

von D. S. (jasmin)


Lesenswert?

@spess53

ja, Du hast recht wenn man nicht selbst etwas tiefer hinterfragt.
Es geht hier um den Status des "Schaltwerkes".

Eine "triviale" Schaltuhr driftet bei näherer Betrachtung schnell in die 
Untiefen einer sog. Zustandsmaschine ab, vgl. 
http://de.wikipedia.org/wiki/Endlicher_Automat

Wenn die Schaltuhrlogik als einfaches Beispiel nur eine Lampe zu 
bestimmten Zeiten an/ausschalten soll, so ist nach einem Stromausfall 
der tatsächlich geforderte Zustand zum Zeitpunkt des Wiederanlaufs nicht 
ganz einfach zu ermitteln.

Eine mechanische Schaltuhr hat dieses Problem nicht weil sie einfach 
stehen bleibt (vorausgesetzt sie ist auch elektrisch betrieben).
Sie fängt dann einfach mit der Zeit des Straomausfalls wieder an zu 
laufen.

Man muss sich schon etwas tiefer in dieses Problem hineindenken um die 
"Nichttrivialität" zu entdecken.

Das tun aber die Zuhörer und Beantworter von Fragen (im Allgemeinen) 
nicht gern; auch ich oftmals nicht ;-).

Ich muß mir dann oftmals von meiner Allerliebsten anhören "Erst Hirn 
einschalten, dann antworten".

Das ist jetz nicht auf die Antworten der anderen Leser bezogen !


Dietmar

von Ron (Gast)


Lesenswert?

Wo ist denn das Problem? Die Schaltuhr muss nur beim Einschalten aus der 
Zeit und den gespeicherten Regeln den korrekten Schaltzustand bestimmen 
und in diesen Zustand wechseln. Bei einem Zustandsautomaten gibt es also 
einen Einsprungszustand, von dem aus in die Zustände "An" und "Aus" 
gesprungen werden kann. Sinnigerweise sind diese Zustände jeweils mit 
der entsprechenden Ausgabe, also Steuerung, verknüpft. (Es handelt sich 
also um einen Moore-Automaten.)

Gruß, Ron

von spess53 (Gast)


Lesenswert?

Hi

Da habe ich wirklich ein Verstandnisproblem. Wenn du ein Schaltwerk 
willst, das an der Stelle weiter macht, an der es stehen geblieben ist 
wozu brauchst du dann eine RTC. Wenn eine Schaltuhr (mit RTC) mit der 
aktuellen Zeit weiterläuft ist der letzte Zustand irrelevant, weil zum 
aktuellen Zeitpunkt möglicherweise falsch.

MfG Spess

von D. S. (jasmin)


Lesenswert?

@ spess

Ich will eben nicht ein Schaltwerk welches an der Stelle weitermacht wo 
es stehengeblieben ist, sondern den tatsächlich geforderten Zustand 
einnimt !!!

Sonst würde "die Lampe" ja eigeschaltet obwohl es schon längst hell ist 
;-), klar ?

Zur Umgebung:
die RTC läuft auch bei Stromausfall weiter und setzt nach diesem dann 
auch die tatsächliche Zeit für das System und damit die Schaltuhr.

However, mittlerweile habe ich auf dem Sofa die Problempunkte durchdacht 
und bin mir auch klar wie ich jetzt plausibel vorgehen werde/muß.

Danke, Dietmar

von spess53 (Gast)


Lesenswert?

Hi

>Ich will eben nicht ein Schaltwerk welches an der Stelle weitermacht wo

Na endlich mal ne klare Aussage.
Du musst ja irgendwo die Ein-/Ausschaltzeiten speichern (vorzugsweise 
EEPROM). Die Liste gehst du mit der aktuellen Zeit durch und 
vergleichst:

Ein<=Zeit<Aus -> Einschalten / Aus<=Zeit<Ein -> Ausschalten, Was ist so 
schwer daran.

MfG Spess

von D. S. (jasmin)


Lesenswert?

Schwer ist immer relativ.

Beispielsweise das es so einfach :

Ein<=Zeit<Aus -> Einschalten / Aus<=Zeit<Ein -> Ausschalten.

nicht funktionieren wird !

Ich bin jetzt wech,

Danke.

von Peter D. (peda)


Lesenswert?

Dietmar S. wrote:

> Man muss sich schon etwas tiefer in dieses Problem hineindenken um die
> "Nichttrivialität" zu entdecken.
>
> Das tun aber die Zuhörer und Beantworter von Fragen (im Allgemeinen)
> nicht gern; auch ich oftmals nicht ;-).

Nein, umgekehrt wird ein Schuh draus, Du must Dich tiefer hineindenken 
und die Frage unmißverständlich und umfassend stellen.
Der springende Punkt ist dabei, oftmals fällt einem dann schon die 
Antwort ein.
Daher ist das auch sehr effektiv, man hat keine Wartezeit auf die 
Antwort.
Und wenn nicht, erhöht sich ungemein die Chance einer passenden Antwort.


Ich vermute mal, Du hast eine Ausschalt- und eine Einschaltzeit, dann 
muß Du nur die Differenz zur aktuellen Zeit bilden und schon weißt Du, 
ob das Gerät eingeschaltet oder ausgeschaltet sein soll. Die kleinere 
Differenz gewinnt.

Edit:
Ganz so einfach ist es doch nicht, man muß noch 24h (86400s) abziehen, 
bis der Rest <24h ist, d.h.:
(zeit - ein) % 86400


Sinnvoller Weise sollten dazu alle Zeiten als 32Bit Wert dargestellt 
werden, dann rechnet es sich leichter. Deshalb rechnen PCs auch intern 
immer mit 32Bit-Zeiten.
Blöder Weise liefern die meisten RTCs irgendein kryptisches Digitformat.


Peter

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.