www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mehrere Funktionen in einem Programm


Autor: Fragender Anfänger (Gast)
Datum:

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

Autor: Ralf (Gast)
Datum:

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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe Multitasking

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.