Ansteuerung eines Feuchtesensors vom Typ SHTxx (mit PIC-Mikrocontroller, Elektronik)


zurück zu Elektronik, Homepage


7. Demonstrationsbeispiel:

Das folgende Beispiel dient nur zur Demonstration. Es zeigt eine mögliche Einbindung der im Abschnitt 6. Software beschriebenen Unterprogramme

nach oben

7.1. Hardware

Schaltung zur Demonstration

Bei diesem Demonstrationsbeispiel misst der Sensor (IC1) zyklisch (ca. alle 10 Sekunden) die Feuchtigkeit und die Temperatur und übergibt diese dem steuernden Mikrocontroller (IC2) vom Typ PIC16F628. Dieser berechnet aus den vom Sensor empfangenen Daten die Temperatur und die relative Luftfeuchtigkeit. Diese Werte können nun via RS232-Schnittstelle von einem PC angezeigt werden. Dazu ist ein Schnittstellentreiber (IC3) vom Typ MAX232 mit einigen Kondensatoren (C5 bis C9) notwendig.
Die Beschaltung des Sensors erfolgt gemäß 2. Hardware mit einem Pull-Up-Widerstand (R1) für die DATA-Leitung und dem Stützkondensator C1.

Für die Takterzeugung dient eine Standardbeschaltung bestehend aus einem 4,096-MHz-Quarz (X1), zwei Kondensatoren (C3, C4) und einem Widerstand (R2).

nach oben

7.2. Anmerkungen zur Software

Die Software zum Demonstrationsbeispiel befindet sich im Download- Bereich auf dieser Seite

Die Software besteht im Wesentlichen aus folgenden Programmteilen:

ISR:
Die ISR (interrupt InterruptRutine(void)) wird alle 64ms aufgerufen und besitzt "nur" die Aufgabe eine 10-Sekunden Zeitbasis zu erzeugen, indem sie ein Botschaftsflags für das Hauptprogramm erzeugt. Damit eine Zeit von einer Sekunde entsteht, muss die ISR 156-mal aufgerufen werden (156 x 64ms = 9984ms also ca. 10 Sekunde). Bei jedem ISR-Aufruf muss also ein Zählregister um 1 vermindert werden. Besitzt es danach den Wert 0, so sind 10 Sekunde (genau 9,984 Sekunden) vergangen. Nun wird das Botschaftsflag FLAG10SEK im Register FLAGSISRHP gesetzt, und das Zählregister muss mit dem Wert 156 neu geladen werden. Der Wert 156 wird hier durch die Konstante KONSTISR10SEK ersetzt.

Die ISR wird, wie schon mehrmals erwähnt, alle 64ms aufgerufen Diese 64ms ergeben sich folgendermaßen: TMR0 wird mit dem Wert 0 geladen es dauert also 256 Taktzyklen bis das Register wieder den Wert 0 besitzt, der Vorteiler (VT) besitzt hier ebenfalls den Wert 256 (vgl. Unterprogramm INIT, Abschnitt. 6.2. Initialisierung (Unterprogramm "INIT"))). Der Taktzyklus ergibt sich aus dem verwendeten Quarz (X1). Dieser ist bei der PIC-Familie wie folgt definiert:

                              4
                        -------------
                        Quarzfrequenz

Daraus ergibt sich folgender Zusammenhang:

                            4 x 256 x VT       4 x 256 x 16
        ISRAUFRUF [s] = ------------------- = ------------ = 64000
                         Quarzfrequenz [MHz]       4,096

Also ein ISR-Aufruf alle 64000µs, was gleichbedeutend mit 64ms ist.

Achtung:
Die ISR muss nach dem Kompelieren an einer ganz bestimmten Stelle im Programmspeicher des PIC-Mikrocontroller stehen. Nämlich an der Adresse 0004h. Dies wird durch die Präprozessoranweisung #pragma origin 4 erreicht.

Hauptprogramm:
Das Hauptprogramm void main(void) befindet sich nach der Initialisierung (mit dem Unterprogramm void INIT(void) und der Interrupt-Freigabe in einer Endlosschleife. Diese Schleife besitzt die Aufgabe ständig dass Botschaftsflag (FLAG10SEK) abzufragen. Ist dieses Botschaftsflag gesetzt, so muss das Hauptprogramm zunächst eine Feuchtigkeitsmessung und anschließend eine Temperaturmessung mit dem Unterprogramm char FEUCHTE_MESSUNG() gemäß Abschnitt 6.3.7. durchführen. Waren beide Messungen erfolgreich (fehler = 0), aus dem vom Sensor erhaltenen Daten die Temperatur und die Feuchtigkeit mit dem Unterprogramm void FEUCHTE_LINEARISIERUNG(void) gemäß Abschnitt 6.3.8. berechnen, bzw. linearisieren und kompensieren, und anschließend mit dem Unterprogramm void AUSGABE(void) am PC ausgeben.
Bei einer fehlerhaften Messung (fehler ist ungleich 0) den Feuchtigkeitssensor mit dem Unterprogramm void FEUCHTE_CONNECTIONRESET(void) gemäß Abschnitt 6.3.2. neu initialisieren.
Das Botschaftsflag (FLAG10SEK) wird von der Interrupt Service Routine (ISR) alle 10 Sekunden (siehe oben).

Unterprogramm INIT:
Das Unterprogramm void INIT(void) dient zur Initialisierung des PIC-Mikrocontroller. Hier wird unter anderem der Timer eingestellt. Weiters die RS-232-Schnittstelle für die Kommunikation mit dem PC, und das Zählregister für den 10-Sekunden-Takt.

Unterprogramme AUSGABE, AUSGABEBCD und RS232_SENDE_ZEICHEN:
Das Unterprogramm void AUSGABE() dient zur Ausgabe der Temperatur und Luftfeuchtigkeit am PC. Dazu müssen diese Werte in die so genannte BCD-Form gebracht werden. Diese Aufgabe übernimmt das Unterprogramm void AUSGABEBCD(). Für das eigentliche Übertragen zum PC via RS232 ist das Unterprogramm void RS232_SENDE_ZEICHEN() zuständig.

Weitere Anmerkungen:

nach oben

7.3. PC-Programm: HyperTerminal

Zur Demonstration wird das PC-Programm "HyperTerminal" verwendet. Dieses Programm sollte bei jedem modernen Windows-PC installiert sein und wird bei Windows XP wie folgt aufgerufen: Taste "Start" in der Taskleiste -> Alle Programme -> Zubehör -> Kommunikation -> HyperTerminal.

Nach dem Start von HyperTerminal müssen Sie zuerst eine neue Verbindung einrichten.

Dazu "Datei" -> "Neu" anklicken. Es öffnet sich folgendes Fenster:

HyperTerminal (Schritt 1)

Einen Namen für diese neue Verbindung eingeben: z.B. Feuchtesensor SHTxx. Optional kann ein Symbol ausgewählt werden.

Taste "OK"

HyperTerminal (Schritt 2)

Den seriellen Port auswählen. Z.B. COM2

Taste "OK"

HyperTerminal (Schritt 3)

Den ausgewählten COM-Port (hier COM2) nach obigen Bild konfigurieren

Taste "OK"

Wenn alles richtig eingestellt und angeschlossen wurde sollten innerhalb von 10 Sekunden die Temperatur und die Feuchtigkeit so wie in folgenden Bild erscheinen.

HyperTerminal (Schritt 4)
nach oben


zurück zu Elektronik, Homepage

Autor: Buchgeher Stefan
Erstellt: 14. Dezember 2004
Letzte Änderung: 23. Februar 2011