Hallo Freunde !
Bestimmt befinde ich mich wieder in einer Anfänger-Fussangel, aber ich komme nicht selber heraus.
Gestärkt aus dem Urlaub zurück wollte ich mich auf ein Projekt mit einem DHT Sensor stürzen....aber ich komme nicht richtig auf die Sprünge da.
Nun habe ich anhand des Datenblattes und Beispielen im Web ein kleines "Testprogrämmchen" geschrieben, aber es will nicht , ganz und gar nicht.
Ich denke, das es schon bei der Initialisierung des Datenaustausches MCU - DHT22 hängt, da ich einfach kein "DHT - Response" bekomme, also die Pegelbedingungen am Datenpin nicht stimmen.
Hier mal kurz mein DHT - Start und DHT Response Check als Code:
Ich hoffe, das ich mein Bezwecken der einzelnen Codezeilen gut genug kommentiert habe....Code:// DHT22-Protokoll-Start: #define DHT_PORT_PIN PORTCbits.RC3 #define DHT_TRIS_PIN TRISCbits.TRISC3 unsigned char DHT_RESPONSE; void dht_start() { DHT_TRIS_PIN = 0: // Ausgang DHT_PORT_PIN = 0: // LOW-Pegel __delay_ms(18): // 18 mSec warten DHT_PORT_PIN = 1; // HIGH -Pegel __delay_us(30) ; // 30 µSec warten DHT_TRIS_PIN = 1; // auf Eingang umschalten __delay_ms(40); // 40 mSec warten } void test_response() { DHT_RESPONSE = 0; // Variable DHT_RESPONSE auf LOW/NULL setzen __delay_us(40); // kurze Wartezeit if (DHT_PORT_PIN == 0) // ist DHT Port auf LOW , { __delay_us(80); // dann 80 µSec warten } if (DHT_PORT_PIN == 1) // ist der DHT_Port jetzt auf HIGH, { DHT_RESPONSE = 1 // dann RESPONSE als OK = 1 bewerten } __delay_us(40) // nochmals 40 µSec warten } } ..... weiterer Programmablauf
Es kann ja auch ein Timing Problem sein, das ich beim Datenblatt was falsch interpretiert habe..jedenfalls bekomme ich kein DHT_RESPONSE = 1
Vielleicht kann ja Bitte mal wer über den Code schauen und mir das Brett vorm Kopf entfernen.... ??
Habe als Debug eine LED die bei DHT_RESPONSE = 1 leuchten soll...aber leider nur "Dunkeltastung"...
Gruss und Dank
Gerhard
Nachtrag :
Fehler gefunden , war meine Dummheit ...habe bei test_response den port_pin falsch abgefragt....mit:
while( DHT_PORT_PIN == 0) ;
while( DHT_PORT_PIN == 1) ;
usw... klappt es nun.
Lesezeichen