mikrocontroller.net

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


Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ROFL (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.