DS1820 DS18S20 DS18B20 Temperatursensor 1Wire

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

    • DS1820 DS18S20 DS18B20 Temperatursensor 1Wire

      diese 3 Typen sind erhältlich und werden aber unterschiedlich angesprochen.
      Es handelt sich um digitale Temperatursensoren der Firma Dallas / Maxim, die über die 1wire Schnittstelle ihre Daten hergeben.
      In Bascom sind 1wire Routinen eingebaut, diese werden hier benutzt.
      Es gibt 2 verschiedene Typen dieser Sensoren, unterschieden werden sie über den Familycode.
      Die Software erkennt den Familycode und führt die korrekte Rechnung durch.
      Die Auflösung beträgt 0,1°C

      BASCOM-Quellcode

      1. 'Auslesen digitaler Temperatursensor Maxim Dallas DS1820 DS18B20 DS18S20
      2. 'mit automatischer Erkennung des Familycodes
      3. ' Michael @ bascomforum . de 01/2017
      4. $regfile = "m16def.dat" 'Atmega8 CPU
      5. $crystal = 16000000 'Quarz 16Mhz
      6. $baud = 38400 'Übertragungsgeschwindigkeit RS232; 115200 Baud 8,N,1
      7. $hwstack = 80
      8. $swstack = 32
      9. $framesize = 64
      10. '$sim
      11. Config 1wire = Portd.7 'achtung, externer Pullup 4k7
      12. Led Alias Portb.0 'Debug
      13. Config Pinb.0 = Output
      14. Dim 1w_i As Byte
      15. Dim 1w_t1 As Integer
      16. Dim 1w_t As Integer
      17. Dim Spp(9) As Byte
      18. Dim T_integer As Integer
      19. Dim Temp As Byte
      20. Dim Tempi As Integer
      21. Declare Function Ds1820_get_temp_f10() As Integer
      22. Declare Function Ds1820_get_temp_f28() As Integer
      23. Declare Sub Temperatur_starten
      24. Declare Sub Temperatur_lesen
      25. Declare Sub Ausgabe
      26. Do
      27. Toggle Led
      28. Call Temperatur_starten
      29. Wait 1 'Wartezeit zum Wandeln
      30. Call Temperatur_lesen 'Sensor auslesen
      31. Call Ausgabe
      32. Loop
      33. End
      34. Function Ds1820_get_temp_f10() As Integer
      35. 'Rechnung für Family Code 0x10
      36. 1w_i = Spp(1) And 1
      37. If 1w_i = 1 Then Decr Spp(1)
      38. 1w_t = Makeint(spp(1) , Spp(2))
      39. 1w_t = 1w_t * 50
      40. 1w_t = 1w_t - 25
      41. 1w_t1 = Spp(8) - Spp(7)
      42. 1w_t1 = 1w_t1 * 100
      43. 1w_t1 = 1w_t1 / Spp(8)
      44. 1w_t = 1w_t + 1w_t1
      45. 1w_t = 1w_t / 10
      46. ' Temperatur in 0,1 Grad Schritten
      47. 1w_t1 = 1w_t / 10
      48. Ds1820_get_temp_f10 = 1w_t '/ 10
      49. End Function
      50. Function Ds1820_get_temp_f28() As Integer
      51. 'Rechnung für Family Code 0x28
      52. 1w_i = Spp(1) And 1
      53. If 1w_i = 1 Then Decr Spp(1)
      54. 1w_t = Makeint(spp(1) , Spp(2))
      55. 1w_t = 1w_t * 10
      56. 1w_t = 1w_t / 16
      57. Ds1820_get_temp_f28 = 1w_t '/ 10
      58. End Function
      59. Sub Temperatur_starten
      60. 1wreset
      61. 1wwrite &HCC 'Skip ROM Kommando
      62. 1wwrite &H44 'Convert Temperature Kommando
      63. End Sub
      64. Sub Temperatur_lesen
      65. 1wreset
      66. 1wwrite &H33 'Read ROM Kommando
      67. Temp = 1wread(1) '1.Stelle enthält den Familycode
      68. 1wreset
      69. 1wwrite &HCC 'Rom überspringen, nur 1 Sensor
      70. 1wwrite &HBE 'Temperatur auslesen
      71. Spp(1) = 1wread(9) 'Daten in ein Array lesen
      72. 'Beispieldaten zum Debuggen
      73. 'Temp = &H10
      74. '36004B46FFFF0110B4 = 27,6°
      75. 'Spp(1) = &H36
      76. 'Spp(2) = &H00
      77. 'Spp(3) = &H4B
      78. 'Spp(4) = &H46
      79. 'Spp(5) = &HFF
      80. 'Spp(6) = &HFF
      81. 'Spp(7) = &H01
      82. 'Spp(8) = &H10
      83. 'Spp(9) = &HB4
      84. If Temp = &H10 Then
      85. T_integer = Ds1820_get_temp_f10() 'Familycode 16
      86. Elseif Temp = &H28 Then
      87. T_integer = Ds1820_get_temp_f28() 'Familycode 40
      88. Else
      89. T_integer = Temp + 1500 'kein Sensor angeschlossen
      90. End If
      91. End Sub
      92. Sub Ausgabe
      93. Local I As Byte
      94. Print "Familycode " ; Hex(temp) ; " ";
      95. For I = 1 To 9
      96. Print Hex(spp(i));
      97. Next
      98. Print " ";
      99. If T_integer >= 1500 Then
      100. Print "kein Sensor angeschlossen"
      101. Else
      102. Print T_integer ; " ";
      103. Tempi = T_integer Mod 10 'Nachkommastelle
      104. T_integer = T_integer / 10 'Vorkommastellen
      105. Print T_integer ; "," ; Tempi ; "°C"
      106. End If
      107. End Sub
      Alles anzeigen