HYT221 mit wiringPi auslesen

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,

    ich versuche ein Programm in C zu schreiben das über I2C einen HYT221 auslesen kann. Beispiele dafür hab ich einige gefunden, leider nicht in C, sondern für Arduino und fürs RPI in Python.

    Beispiel fürs Arduino:
    https://github.com/stylesuxx/Ardu…mp/i2c_temp.ino

    Informationen zum HYT221 Sensor:
    http://www.hygrochip.com/index.php?id=8&L=1

    Nun wollte ich die gleiche funktionalität die im Arduino Programm benutzt wurde auf C mit der wiringPi lib übertragen. Da merkte ich das eine ReadBlock Funktion fehlt. Also hab ich versucht diese zu ergänzen in wiringPi.

    wiringPi sourcen:
    https://git.drogon.net/?p=wiringPi;a=…f79e074;hb=HEAD

    Mein Patch für wiringPi:
    add_block_read_function_I2C.patch.txt
    https://paste.xinu.at/CKME/

    Mein Testprogramm:
    i2c-test.c
    https://paste.xinu.at/RN9fE/#n38

    Sobald mein Testprogramm in die Funktion wiringPiI2CReadBlock (Zeile 38) springt, verliere ich die ssh Verbindung. Dann hilft nur noch ein Hardreset um das RPI zu einer Reaktion zu bewegen.

    Hoffe hier kann mir jemand damit weiterhelfen.

    Gruß Thorsten

    Edit: Mir ist gerade aufgefallen das ich den Thread wohl im Falschem Unterforum platziert habe. Kann das ein Mod vielleicht in "Programmierung" verschieben?

    Einmal editiert, zuletzt von surfhai (4. Dezember 2013 um 19:38)

  • Ist natürlich immer doof sone speziellen hardwarefragen du beantworten aber. hast du mal versucht nicht gleich 4 byte zu lesen sondern evtl erstmal ein bit?

    und warum


    Code
    block = data.block[i + 2];


    ? ich denke es werden 4 bytes zurück geliefert 2 Humi und 2 Temp? bei dir liest er deb letzen block ja mit dem index 6 ein

  • Du meinst ich soll erstmal die bereitgestellte Funktion wiringPiI2CRead() verwenden und schaun ob der Output passt. Ich habe schon versucht die Funktion 4x hintereinander aufzurufen, aber das Ergebnis war bei jedem Abruf gleich 90. Das würde mich also auch nicht weiterbringen die kompletten Daten abzufragen.

    Was ich machen könnte ist zu schauen ob mein Arduino, mit dem es schon funktioniert, beim ersten byte den gleichen Wert ausspuckt.

    Code
    block = data.block[i + 2];

    Das ist vermutlich noch ein Fehler, den hätte ich aber ausbügeln können, sobald das mal läuft und die Werte nur falsch sind.

    Gruß Thorsten

    Edit: Ich habe "block = data.block[i +2]" zu "block = data.block[i]" korrigiert und es trat der gleiche Fehler auf.

    Einmal editiert, zuletzt von surfhai (4. Dezember 2013 um 20:46)

  • wenn du die anzahl der zu lesendes bytes mal wegnimmst sprich die schleife und nur einmal einliest bzw nur das erste byte nutzt?

    Debuggen kann ein echtes Arschloch sein :D


    Baust eigentlich jedes mal wiringPi neu? oder bindest du die i2c libs ein ich meine den fd hast u ja also könntest du auch direkt drauf zugreifen aber egal

    versuch doch mal anstatt eines bytes ein Word zu laden also 16 bit dann hättest du schonmal einen wert mit dem man arbeiten kann


    int data = wiringPiI2CReadReg16(fd, 0);

    oder eben
    i2c_smbus_read_word_data(fd,0);

    wäre interessant ob was bei rum kommt


    hab hier noch etwas gefunden:
    http://stackoverflow.com/questions/5029…-libraries-wire

    Code
    int retval;
    uint8_t *block;
    
    
    block = malloc(32); //i2c_smbus_read_block_data() can return up to 32 bytes
    retval = i2c_smbus_read_block_data(fd, 0, block);
    
    
    // check retval.  retval returns bytes read on success, or <0 on error

    hast du mal versucht evtl statt der 0 dort eine 1 zu wählen für quasi das erste register?

    BASIC für den PI -> Tutorial

    Einmal editiert, zuletzt von ruohki (4. Dezember 2013 um 22:11)

  • Starte auch gerade ein Projekt mit diesem Sensor, schon irgendwelche neuen Erkenntnisse zum Auslesen mit wiringPi?? Oder hast Du schon eine andere Lösung gefunden - würde mich auch über neue Info's freuen ;)

    :cool:

    Einmal editiert, zuletzt von Danny (22. Februar 2014 um 05:15)

  • Hallo allerseits :),
    ich bin ebenfalls gerade dabei einen Feuchte-Temperatur-Sensor auszulesen, bei mir handelt es sich um den HYT939, welcher intern genau so strukturiert ist, wie der HYT221.
    Und bei mir sind genau die selben Probleme aufgetreten, alles 90 oder Vollabsturz bei Benutzung des Blockweisen Auslesens. Ich experimentiere jetzt schon seit mehreren Tagen intensiv damit rum, google und vergleiche Code aus anderen Systemen (Arduino, PC), aber so richtig will's einfach nicht funktionieren.
    Habt ihr es mittlerweile hinbekommen? :helpnew:

    Beste Grüsse .. yogi

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!