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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.