PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] PIC und DHT Sensoren DHT11/DHT22



oderlachs
06.08.2017, 14:47
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:



// 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




Ich hoffe, das ich mein Bezwecken der einzelnen Codezeilen gut genug kommentiert habe....
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.