Diese Seite ist Teil des Projekts Automatische Gewächshauslüftung.

Das Atmel-Studio-Projekt und die erstellte .hex-Datei können hier heruntergeladen werden.

 

Übersicht

Das Projekt besteht aus nachfolgenden Dateien. Diejenigen, die speziell für dieses Projekt sind, werden anschließend näher beschrieben. Ansonsten ist der Quellcode mit vielen Kommentaren versehen.

Datei Funktion
AppVersion.h Versionsnummer (s. Build-Nummer)
Controls.h
Controls.c
Steuerung des Tasters und der LEDs (s.u.)
DHT11.h
DHT11.c
Steuerung des DHT11 (s. DHT11-Ansteuerung)
GeneralDefinitions.h Allgemeine Definitionen & Makros (s. Bibliothek)
Greenhouse.h Allgemeine Definitionen für dieses Projekt
HC05.h
HC05.c
Steuerung des HC-05 (s. HC-05-Ansteuerung)
main.c Hauptprogramm
Param.h
Param.c
Verwaltung der Steuerparamter (s.u.)
usart.h
usart.cfg.h
usart.c
Ansteuerung der USART (s. USART)

Controls

Die Dateien Controls.h und Controls.c enthalten den Code zur Ansteuerung des Tasters und der LEDs. Das Interface (Controls.h) definiert den Typ LedState_t über den angegeben werden kann, welche LED leuchten soll. Über die Funktion InitControl() wird das Modul initialisiert und der übergebene LedState eingestellt.

 Über SetLedState() kann im laufenden Betrieb eingestellt werden, welche LED leuchten soll. Die Funktion hat nur dann eine sichtbare Auswirkung, wenn die LEDs nach Betätigung des Tasters auch zum Leuchten freigegeben sind. Die LEDs werden nach einer gewissen Zeit wieder ausgeschaltet, damit sie besonders in der Nacht nicht zur Lichtverschmutzung beitragen. Hierzu wird Timer2 genutzt.

Über die Variable ButtonPressed wird dem Hauptprogramm mitgeteilt, dass der Taster gedrückt wurde. Das Hauptprogramm setzt die Variable nach deren Auswertung zurück.

Ein Tastendruck löst den Interrupt PCINT22 aus. Die zugehörige ISR setzt ButtonPressed und startet den Timer0. Dieser wird zur Tastenentprellung genutzt. Während der Laufzeit des Timers wird der PCINT22 unterdrückt.

Weitere Details können dem Quellcode und den dort enthaltenen Kommentaren entnommen werden.

Param

Das Modul Param (Param.h und Param.c) übernimmt die Verwaltung der Steuer-Parameter. InitParam() lädt die Parameter aus dem EEPROM in Kopien im RAM. Setxx() dient zum setzen der einzelnen Parameter. Sie werden auch ins EEPORM übertragen. Zu beachten ist, dass die Parameter Mode und FanState nicht unabhängig voneinander sind und nicht im EEPROM abgelegt werden.

main

Das Hauptprogramm besteht im Wesentlichen aus zwei Funktionen. Die Funktion main() initialisiert die Komponenten und prüft dann in einer einer Schleife, ob irgendwelche Aufgaben erledigt werden müssen. Nach jedem Schleifendurchlauf wird ein delay von 1 ms eingeschoben. Die Zeitdauer des eigentlichen Schleifendurchlaufs ist im Vergleich zum delay vernachlässigbar. Die Variable SysTime, die nach jedem Schleifendurchlauf inkrementiert wird, zählt also vergangene Millisekunden. Sehr genau ist diese Zeitmessung nicht. Gelegentlich kommt es doch vor, dass die ein oder andere Funktion in der Schleife länger benötigt (100 ms und mehr). Aber da es nur darum geht, gewisse Mindestzeiten einzuhalten, ist das in Ordnung.

Download

Das Atmel-Studio-Projekt und die erstellte .hex-Datei können hier heruntergeladen werden.