DHT22 Programm

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • DHT22 Programm

      Könnte jmd bitte das Programm vom DHT22 hochladen?
      Im letzten Forum gab es ein verständliches, kurzes.
      Ich weiß leider nicht mehr von wem dieses war.
      Danke!

      Ich habe zwar einen funktionierenden Code, der ist allerdings unverständlich.

      Quellcode

      1. Dht_put Alias Portk.7
      2. Dht_get Alias Pink.7
      3. Dht_io_set Alias Ddrk.7
      4. Dim Temp_dht22 As String * 5 '12,2°C
      5. Dim Humi_dht22 As String * 4 '23,3 %
      6. Dim Aktuali_zeit_Temperatur as Word
      7. Declare Sub Get_DHT22()
      8. Set Dht_io_set
      9. Set Dht_put
      10. ......
      11. Do
      12. .....
      13. if Aktuali_zeit_Temperatur >= 10000 then
      14. Aktuali_zeit_Temperatur =0
      15. Call Get_dht22()
      16. 'Call Text(1 , Temp_dht22 +"°C" , Grün , Reset_ja)
      17. 'Call Text(2 , Humi_dht22 +"%" , Rot , Reset_ja)
      18. else
      19. Incr Aktuali_zeit_Temperatur
      20. end if
      21. .....
      22. Loop
      23. Sub Get_DHT22()
      24. Local Chksum As Byte
      25. Local Crc As Byte
      26. Local Mybyte As Byte
      27. Local Sensor_data As String * 40
      28. Local Count As Byte
      29. Local T As Word
      30. Local H As Word
      31. Local T_String As String *4
      32. Local H_String As String *4
      33. Local Data_temp As String * 16
      34. Count = 0
      35. Sensor_data = ""
      36. Dht_io_set = 1
      37. Dht_put = 0
      38. Waitms 1
      39. Dht_put = 1
      40. Waitus 20
      41. Dht_io_set = 0
      42. Waitus 40
      43. If Dht_get = 1 Then
      44. Temp_dht22 = "Err1"
      45. Humi_dht22 = "Err1"
      46. Exit Sub
      47. End If
      48. Waitus 80
      49. If Dht_get = 0 Then
      50. Temp_dht22 = "Err2"
      51. Humi_dht22 = "Err2"
      52. Exit Sub
      53. End If
      54. While Dht_get = 1 : Wend
      55. Do
      56. While Dht_get = 0 : Wend
      57. Waitus 30
      58. If Dht_get = 1 Then
      59. Sensor_data = Sensor_data + "1"
      60. While Dht_get = 1 : Wend
      61. Else
      62. Sensor_data = Sensor_data + "0"
      63. End If
      64. Incr Count
      65. Loop Until Count = 40
      66. Dht_io_set = 1
      67. Dht_put = 1
      68. Data_temp = Left(sensor_data , 16)
      69. H = Binval(Data_temp)
      70. H_String =Str (H)
      71. Data_temp = Mid(sensor_data , 17 , 16)
      72. T = Binval(Data_temp)
      73. T_String =Str (T)
      74. Data_temp = Right(sensor_data , 8)
      75. Crc = Binval(Data_temp)
      76. Chksum = Low(H ) + High(H )
      77. Chksum = Chksum + Low(T)
      78. Chksum = Chksum + High(T)
      79. If Chksum = Crc Then
      80. Temp_dht22 = Format(T_String , "#.#")
      81. Humi_dht22 = Format(H_String , "#.#")
      82. Else
      83. Temp_dht22 = "Err3"
      84. Humi_dht22 = "Err3"
      85. End If
      86. End Sub
      Alles anzeigen
      Ich habe zwar einen funktionierenden Code, der ist allerdings unverständlich.
    • Moin sk8erboi, ich habe einen Code von Darsol:

      BASCOM-Quellcode

      1. $regfile = "m168def.dat"
      2. $crystal = 8000000
      3. $hwstack = 100
      4. $swstack = 40
      5. $framesize = 100
      6. Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , _
      7. Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
      8. Config Lcd = 16 * 2
      9. Cursor Off
      10. Cls
      11. Config Portb.0 = Output 'LED1'
      12. Config Portd.17 = Output 'LED2'
      13. Config Portb.6 = Output 'Ausgang1'
      14. Config Portb.7 = Output 'Ausgang2'
      15. Declare Function Get_dht11() As Byte
      16. Dim Dht_daten(5) As Byte 'Array für empfangene Daten
      17. Dim Luftfeuchtigkeit As Word
      18. Dim Luftfeuchtigkeit1 As Byte At Dht_daten(1) Overlay
      19. Dim Luftfeuchtigkeit2 As Byte At Dht_daten(2) Overlay
      20. Dim Luft_ausgabe As String * 5
      21. Dim Temperatur As Word
      22. Dim Temp_ausgabe As String * 5
      23. Dim Temperatur1 As Byte At Dht_daten(3) Overlay
      24. Dim Temperatur2 As Byte At Dht_daten(4) Overlay
      25. Dim Crc_ergebniss As Byte At Dht_daten(5) Overlay
      26. 'Config DHT
      27. Dht_write Alias Portd.5 'Empfange Daten vom DHT-Sensor
      28. Dht_read Alias Pind.5 'Schreibe Daten zum DHT-Sensor
      29. Dht_io Alias Ddrd.5 'Umschalten der Datenrichtung write/read
      30. '10ms Interrupt
      31. Config Timer0 = Timer , Prescale = 1024
      32. Const Timerpreset = 178
      33. Dim Timer_tick As Word
      34. Dim Sec_tick As Bit
      35. Timer0 = Timerpreset
      36. On Timer0 Timer0_isr
      37. Enable Timer0
      38. Enable Interrupts
      39. Sec_tick = 0
      40. Set Dht_io 'Daten senden
      41. Set Dht_write 'Ausgang high
      42. Do
      43. 'Jede Sekunde eine Messung
      44. If Sec_tick = 1 Then
      45. Reset Sec_tick
      46. If Get_dht11() = 1 Then 'Daten richtig empfangen
      47. Luftfeuchtigkeit = Luftfeuchtigkeit1 * 256
      48. Luftfeuchtigkeit = Luftfeuchtigkeit + Luftfeuchtigkeit2
      49. 'Luftfeuchtigkeit = Luftfeuchtigkeit / 10
      50. Luft_ausgabe = Str(luftfeuchtigkeit)
      51. Temperatur = Temperatur1 * 256
      52. Temperatur = Temperatur + Temperatur2
      53. 'Temperatur = Temperatur / 10
      54. Temp_ausgabe = Str(temperatur)
      55. Locate 1 , 1
      56. Lcd "Rh:" ; Format(luft_ausgabe , "00.0") ; " % " ; " CRC:" ; Crc_ergebniss
      57. Locate 2 , 1
      58. Lcd "T :" ; Format(temp_ausgabe , "00.0") ; " C"
      59. Else 'Fehlercod ausgeben
      60. Cls
      61. Locate 1 , 1
      62. Lcd Get_dht11()
      63. End If
      64. End If
      65. Loop
      66. End
      67. Function Get_dht11() As Byte
      68. Local Array_index As Byte 'Index für Array
      69. Local Bit_position As Byte 'Bit-Position im Byte
      70. Local Crc_check As Byte 'Berechnung CRC
      71. 'Start Übertragung
      72. Set Dht_io 'Daten Senden
      73. Reset Dht_write 'Ausgang auf low
      74. Waitms 18 '18ms auf low
      75. Set Dht_write 'Ausgang auf high
      76. Waitus 30 'Ausgang muss 20-40µs high sein
      77. Reset Dht_io 'Daten Empfangen
      78. Waitus 40 'DHT sendet 80µs low => hier halbe Periode
      79. If Dht_read = 1 Then 'ist der Eingang nach 40µs immer noch high
      80. Get_dht11 = 2 'Fehlercode => 2
      81. Exit Function 'Function verlassen
      82. End If
      83. Waitus 80 'Eingang muss nach weiteren 80 µs wartzeit eigendlich high sein
      84. If Dht_read = 0 Then 'ist der Eingang low
      85. Get_dht11 = 3 'Fehlercode => 3
      86. Exit Function 'Function verlassen
      87. End If
      88. While Dht_read = 1 : Wend 'warten bis Eingang auf low geht => Startsequenz beendet
      89. '40 Daten-Bit's empfangen und in Daten-Array schreiben
      90. 'Byte 1 => Vorkomma Luftfeuchtigkeit
      91. 'Byte 2 => Nachkomma Luftfeuchtigkeit
      92. 'Byte 3 => Vorkomma Temperatur
      93. 'Byte 4 => Nachkomma Temperatur
      94. 'Byte 5 => CRC
      95. For Array_index = 1 To 5 '5 Byte => Dht_daten(5)
      96. For Bit_position = 7 To 0 Step -1 '8 Bit => höheres Bit zu erst
      97. While Dht_read = 0 : Wend 'warten bis der Eingang auf high geht => dauer 50µs
      98. '26-28us high => entspricht 0
      99. '70us high => entspricht 1
      100. Waitus 30 '30µs warten und schauen wie der Eingang ist
      101. If Dht_read = 1 Then 'bei "1" ist der Eingang nach 30µs immer noch high
      102. Dht_daten(array_index).bit_position = 1 '"1" an Bitposition schreiben
      103. While Dht_read = 1 : Wend 'warten bis Eingang wieder auf low geht
      104. Else 'bei "0" ist der Eingang nach 30µs low
      105. Dht_daten(array_index).bit_position = 0 '"0" an Bitposotion schreiben
      106. End If
      107. Next 'ein Bit empfangen
      108. Next
      109. Set Dht_io 'Daten Senden
      110. Set Dht_write 'Ausgang high
      111. 'Vergleich Summe der ersten 4 Bytes des Array, mit dem 5. Byte des Array
      112. Crc_check = Dht_daten(1) + Dht_daten(2)
      113. Crc_check = Crc_check + Dht_daten(3)
      114. Crc_check = Crc_check + Dht_daten(4)
      115. If Crc_check = Dht_daten(5) Then
      116. Get_dht11 = 1 'Alles in Ordnung
      117. Else
      118. Get_dht11 = 4 'Fehlercode => 4
      119. End If
      120. End Function
      121. Timer0_isr:
      122. Timer0 = Timerpreset
      123. Incr Timer_tick
      124. If Timer_tick = 100 Then
      125. Timer_tick = 0
      126. Set Sec_tick
      127. End If
      128. Return
      Alles anzeigen
      Versuch macht klug !

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Cable ()