Forum: Mikrocontroller und Digitale Elektronik Mehrere Funktionen in einem Programm


von Fragender Anfänger (Gast)


Lesenswert?

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ß

von Ralf (Gast)


Lesenswert?

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

von Ralf (Gast)


Lesenswert?


von Falk B. (falk)


Lesenswert?

Siehe Multitasking

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.