Forum: Mikrocontroller und Digitale Elektronik 2 Stk DHT 22 am Atmega?


von Holger Z. (boomboommagic)


Lesenswert?

Ich möchte gern 2 Stk DHT22 am Atmega8 mit Bascom auslesen .
Leider habe ich vom DHTxx überhaupt keine Ahnung bzw. bekomme das 
Auslesen selber nicht hin.

Ich habe diverse Beispiel Codes für einen DTH22 gefunden , schaffe es 
aber nicht den Code für 2 Stk zu erweitern.

Brauche auch bitte keine guten Ratschläge.
Wenn da jemand etwas parat hat bin sehr dankbar.

von Achim M. (minifloat)


Lesenswert?

Holger Z. schrieb:
> schaffe es aber nicht den Code für 2 Stk zu erweitern.

Wo hängt es denn?
Welche Codeschnipsel hast du als Vorlage?

Holger Z. schrieb:
> Leider habe ich vom DHTxx überhaupt keine Ahnung

Datenblatt lesen hilft ;)

mfg mf

von Holger Z. (boomboommagic)


Lesenswert?

Ich habe folgendes :
1
'######################## DHT-22 Humidity & Temperature Sensor####################
2
3
4
$regfile = "m8def.dat"
5
$crystal = 8000000
6
$baud = 9600
7
8
$hwstack = 64
9
$swstack = 64
10
$framesize = 64
11
12
13
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.2 , Rs = Portd.3
14
Config Lcd = 16 * 2
15
Cursor Off
16
Cls
17
18
19
'#####################################
20
21
Config Pinc.2 = Input
22
Config Timer0 = Timer , Prescale = 8
23
24
'#####################################
25
26
Const Min_time = 70                                         'this has to be changed according to your frequency settings in $crystal
27
28
Dim Count As Byte
29
dim timec as byte
30
dim x as byte
31
dim chksum as byte
32
33
Dim Humidityw As Word
34
Dim Temperaturew As word
35
dim tneg as byte 'indicate if temperature<0
36
Dim Humsens_chksum As Byte
37
38
Dim Humiditys As String * 16
39
Dim Temperatures As String * 16
40
41
Do
42
43
gosub Read_sensor 'takes 3 seconds
44
45
locate 1,1
46
lcd Format(humiditys , "0.0")
47
locate 2,1
48
lcd Format(temperatures , "0.0")
49
50
51
Loop
52
53
End
54
55
56
Read_sensor:
57
 Humidityw = 0
58
 Temperaturew = 0
59
 Humsens_chksum = 0
60
 Wait 3
61
 Count = 1
62
63
Config Pinc.2 = Output : Portc.2 = 0                     ' request data
64
Waitms 20                                                ' wait 20 ms
65
Config Pinc.2 = Input                                    ' wait for data, receive data
66
67
   While Count < 43                                         'collect 42 timings / signals
68
69
      Bitwait Pinc.2 , Set                                  'signal goes high > start timer
70
      Start Timer0
71
      Bitwait Pinc.2 , Reset                                'signal goes low  > stop timer
72
      Stop Timer0
73
      timec=tcnt0
74
      Tcnt0 = 0
75
76
      Select Case Count
77
78
         Case 3 To 18
79
            X = 18 - Count
80
            If timec > Min_time Then Toggle Humidityw.x
81
82
         Case 19 To 34
83
            X = 34 - Count
84
            If timec > Min_time Then Toggle Temperaturew.x
85
86
         Case 34 To 42
87
            X = 42 - Count
88
            If timec > Min_time Then Toggle Humsens_chksum.x
89
            'locate 1,1
90
            'lcd bin(humidityw);" "; bin(Temperaturew)
91
      End Select
92
93
      Incr Count
94
95
  Wend
96
97
98
'############################################################# Calculate Checksum and compare with trasnmitted value
99
Chksum = Low(humidityw) + High(humidityw)
100
Chksum = Chksum + Low(temperaturew)
101
Chksum = Chksum + High(temperaturew)
102
103
If chksum=Humsens_chksum Then
104
105
106
temperatures=""
107
   if temperaturew.15=1 then
108
    temperaturew.15=0
109
    temperatures="-"
110
   endif
111
112
   Humiditys = Str(humidityw)
113
   Temperatures = Temperatures+ Str(temperaturew)
114
115
end if
116
117
return

von erklehr behr (Gast)


Lesenswert?

Holger Z. schrieb:
> Ich habe folgendes :

Was ist an den Hinweisen nicht zu verstehen?

----------------------------------------------
Wichtige Regeln - erst lesen, dann posten!
...................
   Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
----------------------------------------------

von Holger Z. (boomboommagic)


Lesenswert?

Ich weiss net , nen AKW oder Space Shuttle programmieren is nen Witz für 
mich , aber diesen Codes erweitern wohl zu viel  :-(

von Falk B. (falk)


Lesenswert?

Holger Z. schrieb:
> Ich weiss net , nen AKW oder Space Shuttle programmieren is nen Witz für
> mich , aber diesen Codes erweitern wohl zu viel  :-(

Tja, Gen Z, zu allem fähig, zu nichts zu gebrauchen ;-)

Mensch Meier, wenn man wenigstens die einfachsten Grundlagen beherrscht, 
sollt man erkennen, daß eine Funktion namens Read_sensor gibt. Die macht 
den Job. Wenn man einen 2. Sensor lesen will, kopiert man die Funktion 
und ändert das zugehörige Pin. Ist für BASCOM das Einfachste.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Siehe Anhang. Das Pin musst du noch an deine hardware anpassen, siehe 
Kommentar im Quelltext von read_senbsor2.

von Holger Z. (boomboommagic)


Lesenswert?

Sehr herzlichen Dank für Deine Mühe .
So ähnlich habe ich auch angefangen.
Ich hatte da wohl nen Brett vorm Kopf ... ? ...

Jetzt muss ich nur noch mal schaun was mit den DHT los is , bekomme nur 
NULLEN als Anzeige

von Falk B. (falk)


Lesenswert?

Holger Z. schrieb:
> Jetzt muss ich nur noch mal schaun was mit den DHT los is , bekomme nur
> NULLEN als Anzeige

Da fehlt wohl ein externer Pull-Up Widerstand.

von Holger Z. (boomboommagic)


Lesenswert?

Das ist höchst interessant.

Ich habe 1x einen uralten DHT22 , der schon einen Hau weg hat und nur 
noch sinnige Temperaturen anzeigt , aber Feuchte nur noch 99,9% :-)
Ohne Pull up !

Läuft !

Dann einen nagel neuen , mit 10k Pull up - zeigt nur 0,0 in allen Farben 
?!?

Auf nem Arduino allerdings , so wie er ist , perfekt !
Aber ich will absolut nicht auf Arduino gehen , war ja nur nen Spaß zum 
testen.

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.