Forum: Mikrocontroller und Digitale Elektronik Sensorsignal AM2302 (DHT22) auf ATmega8A


von Ferdinand T. (ferdl79)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich möchte auf einem ATmega8A den Temperatur/Feucht.sensor AM2302 
(DHT22) zum Laufen bringen. Ich habe aus diesem Projekt 
(Beitrag "Feuchtesensor AM2302/DHT22 avr-gcc") den Sourcecode 
verwendet, um das Sensorsignal auszulesen. Verwendet habe ich dabei den 
Teil, wo das Signal an sich ausgelesen wird. Der Code ist etwas geändert 
worden, hauptsächlich wg. Port-Änderungen, zusätzliche Kommentare, 
Debugging-Ausgaben und Timing-Anpassungen.

Der Funktionsaufruf "am2302()" läuft durch, allerdings sind alle 
ausgelesenen Bits "1". Das ist mein aktuelles Problem. Im Datenblatt 
(http://www.adafruit.com/datasheets/Digital%20humidity%20and%20temperature%20sensor%20AM2302.pdf) 
wird davon gesprochen, dass wenn das Sensorsignal des AM2302 dauerhaft 
auf VCC ist, die Verdrahtung nicht korrekt ist. Wenn das der Fall wäre, 
würde aber der Aufruf "am2302()" einen anderen Fehler werfen.

Für diesen Fehler konnte ich online keine Hilfe finden. Mein MCU-Aufbau 
ist als Eigenbau anhand des AVR-Tutorials entstanden. Der Code leider 
gemischt-sprachig kommentiert, dank der Verwendung von Code-Snippets 
unterschiedlicher Quellen.

Im Programm müsste in Z. 125 (am2302.c) das Sensorsignal immer auf VCC 
sein; an anderer Stelle wird das Bit nicht positiv gesetzt. Beim delay 
in Z. 120 habe ich verschiedene Zeiten versucht. Laut Datenblatt steht 
der Pegel für logisch "0" 26-28us auf VCC, für logisch "1" steht er 
~70us auf VCC.

Als externen Pull-Up Widerstand habe ich 1.1k, 4.7k und 10k ausprobiert. 
Ich habe vier verschiedene Sensoren durchprobiert, mit allen zeigt sich 
ein identisches Verhalten.

Danke für eure Hilfe,

Ferdinand

von Pascal G. (Firma: http://www.pgollor.de) (mc-kalle)


Lesenswert?

Moin Ferdinand,

du hattest auf meiner Homepage erwähnt, dass du den Sensor mit einem 
Arduino schon benutzt hast? Wenn ja hast du exakt den selben mit der 
selben Verschaltung einfach an den Atemga angeschlossen?

Manchmal ist es ja das einfachst und vielleicht hast du einfach Pin 2 
oder 3 vertauscht?
Ansonsten tausche mal bitte alle Kabelverbindungen auf deinem Bredboard 
aus. Je nach dem was für Kabel zu verwendest haben die schon mal einen 
Wackelkontakt.
Poste ggf. mal ein Foto von deiner Schaltung.

Leider habe ich gerade keine Zeit deinen Code zu testen.
Falls du aber morgen immer noch nicht weiter sein solltest, dann nimm 
doch mal einen funktionierenden Code ohne Veränderungen. Also nicht mal 
die Pinbelegung ändern. Vielleicht ist dann ja doch ein Fehler beim 
umschrieben hinein gekommen.


LG
Kalle

von Ferdinand T. (ferdl79)


Lesenswert?

Hallo Kalle,
vielen Dank nochmal für deine Hilfestellungen. Inzwischen konnte ich 
meine Probleme lösen und der AM2302 läuft. Die Verdrahtung hat soweit 
gepasst. Ich hatte das Gefühl, dass ich mit den Timings in am2302.c 
nicht zurecht komme und habe beim Auslesen des Sensorsignals einen 
anderen Weg eingeschlagen.

In meinem Programm nutze ich den Interrupt INT0 und detektiere alle 
Flanken, die während des Auslesevorgangs auftreten. Solange das Signal 
sauber ist, sind das ja nicht viele (85). Dann nutze ich noch Timer / 
Counter 1 und schätze die Zeiten der Pegel. Damit kann ich mir dann mein 
Nutzsignal erzeugen.

VG, Ferdinand

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
Noch kein Account? Hier anmelden.