Hallo, ich beschäftige mich nun seit ungefähr seit einem Jahr immer mal wieder mit AVR Microcontrollern und deren programmierung. Nun habe ich ein gewisses Stadium erreicht in dem Ich schon einige kleinere Projekte Feriggestellt habe z.B verschidene Uhren, Schrittmotoransteuerungen, Thermometer usw. Nun möchte ich mehrere bereits erlernten Sachen in einem Projekt vereinen. Mir schwebt nach einigen Überlegungen eine Wetterstation mit Datenlogger und DCF77-Zeit vor. Nun habe ich jedoch schon bei vorherigen Projekten gemerkt das umso mehr Funktionen ich in das Programm einbaue ich mehr und mehr den Überblick verliere und dann auch irgendwann dass Program ins leere läuft. Nun meine konkrete Frage: Wie organisiere ich die einzelnen Programmpunkte (z.B DS18B20 auslesen, Daten Speichern, Uhr aktualisieren, Multiplex, Datenausgabe Uart usw) ohne dass sich diese behindern. Ich komme hier wirklich nicht weiter ich bräuchte sozusagen einen Task-Manager der die einzelnen Aufgaben z.B. nach priorität verwaltet, weis jedoch nicht wie ich so etwas aufbaun soll. Ich programmiere in ASM was ich auch beibehalten möchte. Gruß
Hi, wichtig ist, dass du an keiner Stelle im Programm auf irgendetwas wartest, sondern in Abhängigkeit von Zustandsvariablen entsprechende Aktionen ausführst. So kannst du beispielsweise einen Timer mit einer Zeitbasis von 100ms einrichten. Bei jedem "Tick" zählst du eine Variable hoch. In den ersten 100ms (Tick = 0) kannst du z.B. die Temperatur einlesen. in den zweiten 100ms (Tick = 1) kannst du dann die Ausgabe aufs Display machen. Und so weiter, bis du die Gesamtzahl an Ticks voll hast, dann geht's wieder von vorne los. Die genaue Vorgehensweise hängt davon ab, was du alles realisieren willst. Ich hab eine Relaissteuerung mit Display, Tastatur und DCF77-Empfänger realisiert. In einem Timer-Interrupt wird mehrstufig verteilt die Tastatur abgefragt, die Software-RTC und die -Timer (für die Relais) bedient sowie der DCF77-Empfänger ausgelesen. Als Beispiel für die Zustandsvariablen hab ich die DCF77-Implementation so aufgebaut, dass einmal pro Tag (um zwölf Uhr) die DCF77-Daten mit doppelter Redundanz ausgelesen werden und dann die interne RTC abgeglichen wird. Der Rest des Tages ist "DCF77-frei". D.h. die interne RTC triggert über eine Zustandsvariable die DCF77-Abfrage. Diese wiederum triggert den Abgleich usw. Ralf
Guck mal hier beispielsweise: http://de.wikipedia.org/wiki/Zustandsmaschine http://de.wikipedia.org/wiki/Moore-Automat http://de.wikipedia.org/wiki/Mealy-Automat 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.