- LiFePO4 Speicher Test         
Ergebnis 1 bis 1 von 1

Thema: Hygrosens Temperatur- & Feuchtigkeitssensoren am I2C-Bus

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    25.03.2006
    Ort
    nahe Tulln (Niederösterreich)
    Alter
    33
    Beiträge
    460

    Hygrosens Temperatur- & Feuchtigkeitssensoren am I2C-Bus

    Anzeige

    E-Bike
    Hi,

    ich ärgere mich jetzt schon seit zwei Tagen mit einem Problem herum, und finde den fehler einfach nicht.

    Ich baue gerade eine Terrariumsteuerung mit einem mega32, und verwende Temperatur- und Feuchtigkeitssensoren von Hygrosens mit I2C Interface:

    2 Stück Temperatursensoren: http://shop.hygrosens.com/Sensormodu...ng-acma-2.html
    1 Stück Feuchtigkeitssensor: HYT241, http://www.hygrosens.com/index.php?id=3738/

    Zuerst hatte ich nur die beiden Temperatursensoren angeschlossen, da hat alles funktioniert. Hab die beiden Temperaturwerte korrekt eingelesen und am Display angezeigt.
    Dann kam der Feuchtigkeitssensor dazu. Ich habe die Terrariumsteuerung abgeschalten, den Feuchtigkeitssensor angeschlossen, und die Steuerung wieder eingeschlten, also nichts am Code verändert. Der Controller hat sich genau dann aufgehängt, wo er die Temperatursensorwerte einlesen hätte sollen.
    Das sollte er eigentlich nicht tun oder?
    Ich hab dann ein neues Unterprogramm geschrieben, in dem der Feuchtigkeitswert eingelesen wird, rübergespielt - und es hat natürlich auch nicht funktioniert, er ist wieder hängen geblieben dort wo er die Temperaturwerte einlesen sollte.
    Dann hab ich das einlesen der Temperaturwerte auskommentiert, und sofort hat alles funktioniert: Feuchtigkeit wurde eingelesen und korrekt am Display angezeigt.

    Ich bekomm es einfach nicht hin dass Temperatur und Feuchtigkeit gleichzeitig funktionieren...

    Adressproblem ist es keines, das hab ich schon 1000 Mal nachgeprüft.

    Hier ist mein Code:

    HYGROSENS_I2C.C
    Code:
    void update_temp1()
    {
        uint32_t tempa, tempb;
        uint8_t temphigh, templow;
    
        i2c_start(TEMP1+I2C_READ);
            temphigh = i2c_readAck();                      
            templow = i2c_readNak();
        i2c_stop();
    
        tempa=(temphigh&0b01111111)*256;
        tempb=(templow&0b11111110);
        temp1=((tempa+tempb)*10)/256-320;
    }
    
    
    void update_temp2()
    {
        uint32_t tempa, tempb;
        uint8_t temphigh, templow;
    
        i2c_start(TEMP2+I2C_READ);
            temphigh = i2c_readAck();                      
            templow = i2c_readNak();
        i2c_stop();
    
        tempa=(temphigh&0b01111111)*256;
        tempb=(templow&0b11111110);
        temp2=((tempa+tempb)*10)/256-320;
    
    }
    
    
    void feuchte_init()
    {
        i2c_start(FEUCHTE1+I2C_WRITE);
        i2c_stop();
    }
    
    
    void update_feuchte1()
    {    
        uint8_t byte1=0, byte2=0, byte3=0, byte4=0;
    
        i2c_start(FEUCHTE1+I2C_READ);
            byte1=i2c_readAck();
            byte2=i2c_readAck();
            byte3=i2c_readAck();
            byte4=i2c_readNak();
        i2c_stop();
    
        i2c_start(FEUCHTE1+I2C_WRITE);
        i2c_stop();
        
        feuchte1=(uint32_t)((((byte1&0b00111111)*(uint32_t)256+byte2)*(uint32_t)1000)/(uint32_t)16383);
        feuchte1_temp=(uint32_t)((((byte3*(uint32_t)256+(byte4&0b11111100))*(uint32_t)165)/(uint32_t)16383)-(uint32_t)40);
    }

    HYGROSENS_I2C.H
    Code:
    // DEFINES
    
        #define TEMP1 0b00010010    // I2C-Adresse Temperatursensor 1
        #define TEMP2 0b00010100    // I2C-Adresse Temperatursensor 2
        
    //    #define FEUCHTE1 0b00100010    // I2C-Adresse Temperatursensor 2
    
    // VARIABLEN
    
    volatile unsigned long temp1;    // (uint32_t) Globale Variable für Temperatursensor 1 [Zehntel-°C]
    
    volatile unsigned long temp2;    // (uint32_t) Globale Variable für Temperatursensor 2 [Zehntel-°C]
    
    volatile unsigned long feuchte1;    // (uint32_t) Globale Variable für Feuchtigkeit [Zehntel-%]
    volatile unsigned long feuchte1_temp;    // (uint32_t) Globale Variable für die Temperatur des Feuchtesensors [Zehntel-°C]
    
    
    // DEKLARATIONEN
    
    void feuchte_init();
    void update_feuchte1();
    
    void update_temp1();
    void update_temp2();

    HAUPTPROGRAMM (Ausschnitt)
    Code:
    int main(void)
    {   
        ...
        feuchte_init();
        ...
    
        if(timer10ms>=100)    // folgendes wird jede Sekunde wiederholt
        {
    
        timer10ms=0;
    
         ...
         update_temp1();
         update_temp2();    
         update_feuchte1();
         ...
    
         // Print Temp1
         lcd_gotoxy(0,2);
         lcd_var32(temp1/10);
         lcd_putc('.');
         lcd_var32(temp1%10);
         lcd_putc('ß');        // ß=° am Display
         lcd_putc('C');
        
         // Print Temp2
         lcd_gotoxy(7,2);
         lcd_var32(temp2/10);
         lcd_putc('.');
         lcd_var32(temp2%10);
         lcd_putc('ß');        // ß=° am Display
         lcd_putc('C');
    
         // Feuchte anzeigen
         lcd_gotoxy(15,2);           
         lcd_var32(feuchte1);
         lcd_gotoxy(15,3);         
         lcd_var32(feuchte1_temp);
         ...
    
        }
        else;
    
        ...
    
    }

    Habt Ihr irgendeine Idee woran das liegen kann, oder was ich noch ausprobieren könnte?

    LG
    Christoph


    EDIT: Ignoriert bitte die vielen casts und die uint32_t variablen in den Berechnungen, ich habe einfach alles versucht, große/kleine Variablen, mit/ohne Casts, etc... nichts hat etwas gebracht...
    Geändert von Christoph2 (26.06.2011 um 01:47 Uhr)

Ähnliche Themen

  1. temperatur
    Von Che Guevara im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 13.07.2008, 20:21
  2. Temperatur via I2C
    Von Haveaniceday im Forum C - Programmierung (GCC u.a.)
    Antworten: 13
    Letzter Beitrag: 05.09.2007, 21:12
  3. Temperatur IC I2C
    Von Cybrix im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 19.04.2006, 10:54
  4. Temperatur Fühler
    Von Björn im Forum Sensoren / Sensorik
    Antworten: 15
    Letzter Beitrag: 29.11.2005, 20:44
  5. feuchtigkeitssensoren
    Von tuxilein im Forum Sensoren / Sensorik
    Antworten: 8
    Letzter Beitrag: 30.08.2005, 12:57

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests