Forum: Mikrocontroller und Digitale Elektronik Brauche Hilfe bei Programm-Erstellung


von Ralf (Gast)


Lesenswert?

Hi,

ich hab ein Problem mit der Programmerstellung, d.h. genauer gesagt, ich 
weiss nicht, wie ich es den Ablauf lösen soll.

Aber erstmal die Eckdaten. Ich möchte eine "bessere" Zeitschaltuhr 
programmieren. Die Hardware ist vorhanden, aufgebaut, funktioniert. 
Vorhanden sind ein Display, eine Tastatur, DCF77, serielle 
Schnittstelle, EEPROM, zwei Relais.
Die Software-Treiber für die Einzelkomponenten wie LCD, Tastatur, usw. 
sind ausgetestet und funktionieren.

Die Frage, die sich mir nun stellt, wie tacker ich daraus die 
Applikation zusammen?

Die Applikation soll die Relais in verschiedenen Betriebsarten ansteuern 
können. Zum einen eine simple Countdown-Funktion, also Relais für eine 
bestimmte Zeit aktiv, dann aus. Zum anderen soll es wie bei "normalen" 
Zeitschaltuhren möglich sein, eine Start- und Stopzeit anzugeben (vier 
pro Tag).
Der User-Input für das Gerät soll entweder durch die Tastatur oder die 
serielle Schnittstelle erfolgen.

Was mir jetzt fehlt, ist der Durchblick, wie ich von der o.g. 
Anforderung zum Programmablauf komme, also quasi der FlowChart an sich, 
und wie ich das dann löse.

Der Grundgedanke ist eine Art StateMachine. Die SM verwaltet für jedes 
Relais den Zustand, also die Betriebsart, und prüft in Abhängigkeit 
davon, ob die jeweilige Zeit abgelaufen bzw. erreicht ist.

Soweit so gut. Wie bringe ich jetzt in diese SM z.B. den User-Input? 
Oder ist es besser, für jede "Komponente" eine eigene SM zu 
implementieren? Also eine fürs Display, eine für die Eingabe, usw.
Ich würde z.B. schon gerne die Eingabe über Tastatur/Schnittstelle von 
der Ausgabe auf dem Display getrennt halten (ist glaub ich auch der 
professionelle Weg), aber wie realisier ich das dann? Ich möchte nach 
Möglichkeit auch drauf verzichten, dass das Programm an irgendeiner 
Stelle auf etwas "warten" muss, sondern es so lösen, dass quasi immer 
für jede Komponente geprüft wird, ob sich was geändert hat, falls ja, 
wird eben die Änderung bearbeitet, ansonsten eben die nächste Komponente 
bedient.

Vielleicht kann mir jemand n Kick in die richtige Richtung geben?

Ralf

von ROFL (Gast)


Lesenswert?

Mach's dir mal nicht kompliziert.
Ich nehme an, eine Auflösung von 1 Sekunde reicht für deine Schaltuhr.
Also kannst du ganz locker im Mainloop rumidlen, dein Interface 
abfragen/updaten.
Deine Ein-/Ausschaltzeiten legst du einfach in einem Array ab.

Einmal pro Sekunde (z.B. per Interruptroutine ein Flag für die Mainloop 
setzen) gehst du das Array durch, guckst ob die Uhrzeit >= Eventzeit ist 
und schaltest das betreffende Relais ein oder aus.
Dann räumst du noch im Array auf, indem du die abgelaufenen Events 
rausnimmst (sofern es keine repeating Events sind...).

Done.

von Ralf (Gast)


Lesenswert?

Hi,

> Ich nehme an, eine Auflösung von 1 Sekunde reicht für deine Schaltuhr.
Ja, das ist ausreichend.

> Also kannst du ganz locker im Mainloop rumidlen, dein Interface
> abfragen/updaten.
Hmja, da klemmts halt ein bisschen am Verständnis. Mir wärs wie gesagt 
am liebsten, die LCD-Ausgabe von der Tastatur-Eingabe zu entkoppeln, und 
da weiss ich eben nicht, wie ich das realisieren soll.

> Deine Ein-/Ausschaltzeiten legst du einfach in einem Array ab.
Genau so hab ich es mir im Prinzip vorgestellt.

> Einmal pro Sekunde (z.B. per Interruptroutine ein Flag für die Mainloop
> setzen) gehst du das Array durch, guckst ob die Uhrzeit >= Eventzeit ist
> und schaltest das betreffende Relais ein oder aus.
Die Idee mit dem Flag gefällt mir, das werd ich mal genauer unter die 
Lupe nehmen.

Ralf

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.