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


zurück zu Elektronik, Homepage


6. Software

Die Aufgabe der Software ist das im Abschnitt 3 (Protokoll) beschriebene Protokoll umzusetzen. Weiters die Linearisierung und Temperaturkompensation gemäß Abschnitt 4. Je nach Bedarf kann auch noch die Checksumme gemäß Abschnitt 5 berücksichtigt werden. Dies ist aber hier (noch) nicht ausgeführt!

Als Programmiersprache wurde C, und als Compiler CC5X gewählt.

nach oben

6.1. Portdefinition, externe Register und Konstanten

Portdefinition:
Im Allgemeinen werden bei jeder Anwendung die Eingangspins für den Feuchtigkeitssensor an einen anderen Portpin verwendet. Damit dies in der Software nur an einer Stelle berücksichtigt werden muss befindet sich in der Software eine Portdefinition. Diese besteht aus den folgenden 3 Parametern:

Achtung: Wird für DATA der Port B verwendet, so muss für TRIS_DATA das zum Port B zugehörige TRIS-Register definiert werden. Eine mögliche Portdefinition für einen PIC-Mikrocontroller der PIC16Fxx-Familie ist:

bit        DATA           @ PORTB.0;
bit        TRIS_DATA      @ TRISB.0;
bit        SCK            @ PORTB.3;    

Externe Register:
Die externen Register sind in einer Struktur (struct Sensor) zusammengefasst und beinhalten die Rohdaten vom Sensor und die daraus berechnete Temperatur und Luftfeuchtigkeit

struct Sensor
{
        unsigned char        feuchte_lo;        // Rohwert vom Sensor (Low-Byte der Feuchte)
        unsigned char        feuchte_hi;        // Rohwert vom Sensor (High-Byte der Feuchte)
        unsigned char        temperatur_lo;     // Rohwert vom Sensor (Low-Byte der Temperatur)
        unsigned char        temperatur_hi;     // Rohwert vom Sensor (High-Byte der Temperatur)
        long                 temperatur_lin;    // linearisierter Temperaturwert
        long                 feuchte_lin;       // linearisierter Feuchtewert
        unsigned long        feuchte_komp;      // kompensierten Feuchtewert
};

Konstanten für den Feuchtigkeitssensor:

nach oben

6.2. Initialisierung (Unterprogramm "INIT")

Dieses Unterprogramm dient zur Initialisierung des Mikrocontrollers. Bei diesem Beispiel ist hier, für die Implementierung des Protokolls, nur die Definition der der verwendeten Portpins als Ausgang notwendig.

nach oben

6.3. Unterprogramme zur Kommunikation mit dem Feuchtigkeitssensor

Zur Kommunikation mit dem Feuchtigkeitssensor sind folgende Unterprogramme notwendig:

Nun aber zu den einzelnen Unterprogrammen im Detail:

nach oben

6.3.1. Unterprogramm FEUCHTE_START

Aufgabe:
Dieses Unterprogramm erzeugt die Startbedingung für die Kommunikation mit dem Feuchtigkeitssensor.

Zur Erinnerung, die Startbedingung ist wie folgt definiert (vgl. Abschnitt 3.1.).

Start-Sequenz
nach oben

6.3.2. Unterprogramm FEUCHTE_CONNECTIONRESET

Aufgabe:
9 SCK-Zyklen, während DATA = 1, anschließend eine Startbedingung (vgl. Abschnitt 3.6.).

Connection-Reset-Sequenz
nach oben

6.3.3. Unterprogramm FEUCHTE_SCHREIBEN

Aufgabe:
Ein Byte (also eine Anweisung) an den Sensor übergeben und die Bestätigung vom Sensor empfangen.

Vorgehensweise:

nach oben

6.3.4. Unterprogramm FEUCHTE_LESEN

Aufgabe:
Ein Byte vom Sensor lesen und eine Bestätigung zurückgeben, wenn ack=1

Vorgehensweise:

nach oben

6.3.5. Unterprogramm FEUCHTE_STATUSSCHREIBEN

Aufgabe:
Statusregister des Sensors beschreiben

Vorgehensweise:

nach oben

6.3.6. Unterprogramm FEUCHTE_STATUSLESEN

Aufgabe:
Statusregister des Sensors und Checksumme auslesen

Vorgehensweise:

nach oben

6.3.7. Unterprogramm FEUCHTE_MESSUNG

Aufgabe:
Einen Feuchtigkeits- oder Temperatur-Messzyklus starten

Vorgehensweise:

nach oben

6.3.8. Unterprogramm FEUCHTE_LINEARISIERUNG

Aufgabe:
Aus den vom Sensor empfangenen Roh-Daten die Temperatur und die Feuchtigkeit berechnen. Anschließend muss der Feuchtigkeitswert linearisiert und mit der Temperatur kompensiert werden.

Formeln: (8/12-Bit-Mode):

Formeln: (12/14-Bit-Mode)

nach oben


zurück zu Elektronik, Homepage

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