Hallo, ich bin neu hier als Mitglied und auch neu in der µC-Programmierung. Daher seht mir bitte nach, dass mein Code vermutlich noch nicht sehr sauber ist. Ich habe mich an die Programmierung des Luftfeuchtigkeitssensors DHT22 gemacht. Und eigentlich funktioniert auch alles soweit, aber es kommen keine richtigen Werte heraus und ich kann seit Tagen keinen Fehler mehr finden. Ich habe mir auch schon andere Code-Beispiele angeschaut aber auch dann finde ich bei meinem Code keinen Fehler, zum verzweifeln. Zum Code: Er ist soweit geschrieben, dass er mir die übertragenen Binär-Werte auf einem LCD-Display ausgibt. Das Problem ist, dass er immer nur konstant folgende Werte auf dem LCD ausspuckt, auch wenn ich ihn 1min lang anhauche obwohl er etwa alle 6 Sekunden eine Messung durchführt: 10000000 10000000 00000000 10000000 10000000 Checksumme Den LCD-Display-Code habe ich nicht mit dazugepackt weil der problemlos funktioniert. Da das Programm auch ganz durchläuft kann es auch nicht sein, dass er irgendwo in einer while-Schleife hängen bleibt. Wenn ich die for-Schleife 40 mal statt 39 mal durchlaufen lasse bleibt er auch erwartungsgemäß hängen. Also muss er die 40 Datensignale genau empfangen. Aber warum gibt er dann so konstante Werte aus? Ich bin für jeden Tip sehr dankbar und werde den Code natürlich sobald er grundsätzlich funktioniert noch deutlich weiter verbessern evtl. auch mit einem Timer. Und dann natürlich auch hier zur Verfügung stellen. Nur gerade verzweifel ich total weil ich einfach nicht mehr weiß wo ich noch ansetzen könnte um den Fehler zu finden.
wie schnell läuft dein prozessor denn?
probier's mal so: unsigned short readByte(){ unsigned short byte = 0; for (i=0;i<8;i++){ while(!(PINB&0x4)); TCNT0=0; while(PINB&0x4); if (TCNT0>40){ //eine 1 wurde gesendet byte |= (1<<(7-i)); }else{ //eine 0 wurde gesendet } } return byte; }
Danke, werde ich mal machen. Wird aber kurz dauern.
Ok, da muss ich mich wenn ich deinen Code richtig verstehe, wie gesagt bin recht neu in der µC-Programmierung, in die Timer-Programmierung einarbeiten. Das hatte ich ohnehin vor, allerdings wird es etwas länger dauern. Ich würde trotzdem gerne wissen wo der Fehler bei meinem Code ist, denn ich will ja besser werden und meine Fehler erkennen und dann möglichst nie wieder machen. Daher wäre ich sehr dankbar, wenn jemand auch meinen Code auf Fehler überprüft.
Ok, ich habe deinen Code bei mir eingearbeitet (siehe Anhang). Und jetzt gibt er das erste Datenbyte so aus: 00000001 Also gleiches Problem, nur die 1 ist jetzt im niedrigsten Bit. Das macht doch keinen Sinn. Ich weiß einfach nicht weiter. Trotzdem danke für die Hilfe, ist ja recht einfach mit dem Timer, aber ich weiß einfach nicht wo es jetzt noch hakt.
Hat vielleicht noch jemand eine Idee woran es liegen könnte? Der µC ist sonst eigentlich richtig angeschlossen und taktet auch richtig. Hab vorher eine Uhr drauf programmiert, die sehr genau lief. Und habe am Aufbau dann nichts geändert außer den DHT22 anzuschließen. Also kann es auch nicht an einer falschen Zeitgenerierung bzw. µC-Installation liegen.
Es gibt einiges zu deinem Code zu schreiben. U. a. gehört in die Headerdatei kein C-Code. Dein Startsignal stimmt nicht. Der Ausgang muss min. 1000 µS Lowpegel führen.
Danke für den Hinweis. Wusste ich nicht, werde es aber in Zukunft berücksichtigen. Aber mein Startsignal ist doch 20ms auf Low-Pegel. Im Datenblatt stehen zwei widersprüchliche Angaben drin: Im Text steht mind. 18 ms und in der Grafig steht mind. 500µs. Aber dann müsste ich mit 20ms auf der sicheren Seite sein, oder hab ich grad wirklich Kakao im Kopf und sehe die offensichtlichen Fehler nicht mehr?
Ich glaube es funktioniert mit deinem Code, Dario. Jetzt habe ich sich verändernde Bytes. Werde den Code jetzt mal weiter schreiben und dann sehe ich ja ob die Werte Sinn machen. Also schon mal vielen Dank für die Hilfe. Werde den Code wenn er funzt dann nochmal reinstellen da man für den DHT22 bzw. 11 nicht wirklich viel findet im Netz.
Es gibt eine ganze Reihe von "Datenblättern" zu diesen Sensoren. Im Datenblatt des von mir verwendeten DHT22 (siehe Anhang) stehen 1000 µs.
Hey, super. Das ist deutlich ausführlicher und klarer geschrieben als meins. Das hilft mir auf jeden Fall noch weiter. Das Forum hier ist echt klasse.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.