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