Einzelnen DS18B20 auslesen Arduino Uno

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Einzelnen DS18B20 auslesen Arduino Uno

      Hallo,
      da ich nur Codes für mehrere Sensoren gefunden habe.
      Diese gerade für Anfänger sehr unübersichtlich waren.
      Und ich aber nur einen einzelnen gebraucht habe zum vergleichen, dachte ich mir ich stell das mal ein.
      Mein Code sollte auch sehr gut Kommentiert sein das jeder es nachvollziehen kann.

      Viel Spaß damit. Ich hoffe ich konnte helfen.

      BASCOM Source Code

      1. 'Programm zum Ansteuern des Arduino Uno mit DS18B20
      2. $regfile = "m328pdef.dat"
      3. $crystal = 16000000
      4. $hwstack = 100
      5. $swstack = 100
      6. $framesize = 100
      7. $baud = 9600 'Übertragungsgeschwindigkeit RS232; 115200 Baud 8,N,1
      8. '---------- DS18B20 -----------------------------------------------------
      9. 'Temperatur Messung:
      10. '1wire am
      11. 'DS18B20 ueber 4,7k Wiederstand an 5V VCC
      12. ' VCC--4,7k---|-----DS18B20-----GND
      13. '
      14. ' PC5
      15. '---------- Variablen DS18B02 -----------------------------------------------------
      16. Dim DS18B20(9) As Byte
      17. Dim Itemperature As Integer At DS18B20 Overlay 'enthält Temp. in 0.0625°C
      18. Dim TempD As Single
      19. '---------- DS18B02 --------------------------------------------------------
      20. Config 1wire = Portc.5 'achtung, externer Pullup 4k7 nach VCC 5V
      21. '---------- Hauptprogramm -----------------------------------------------------
      22. Print " ----- Temperatur Messung DS18B02 ----- " 'Ausgabe Seriell
      23. print "" 'hilfe zur lesbarkeit Monitor
      24. do 'Start Hauptprogramm
      25. 'print " ----- DS18B20 Messung -----"
      26. print ""
      27. Gosub TemperaturD_starten 'Unterprogramm Sensor Starten
      28. waitms 500
      29. Gosub TemperaturD_lesen 'Unterprogramm Sensor lesen
      30. waitms 500
      31. Gosub TemperaturD_ausgeben
      32. print " "
      33. print " ----- ENDE -----"
      34. print " "
      35. print " "
      36. Wait 2
      37. loop 'Ende Hauptprogramm
      38. '---------- Sub TemperaturD_starten -----------------------------------------------------
      39. TemperaturD_starten:
      40. 1wreset 'Initialisierung
      41. 1wwrite &HCC 'Skip ROM Kommando
      42. 1wwrite &H44 'Convert Temperature Kommando
      43. return
      44. '---------- Sub TemperaturD_lesen -----------------------------------------------------
      45. TemperaturD_lesen:
      46. 1wreset 'Initialisierung
      47. 1wwrite &HCC 'Rom überspringen, nur 1 Sensor
      48. 1wwrite &HBE 'Temperatur auslesen
      49. DS18B20(1) = 1wread(9) 'Daten in ein Array lesen
      50. return
      51. '---------- Sub TemperaturD_ausgeben -----------------------------------------------------
      52. TemperaturD_ausgeben:
      53. print " Temperatur vom DS18B20"
      54. Print ""
      55. wait 1
      56. TempD = Itemperature * 0.0625 'umrechnen des DS18B20 Wertes in Grad Celsius
      57. Print " " ; TempD 'Ausgabe Temperatur
      58. wait 1
      59. Print ""
      60. Print " -------------------------------------------------------"
      61. Print ""
      62. wait 1
      63. return
      Display All
    • Lordcyber wrote:

      $baud = 9600 'Übertragungsgeschwindigkeit RS232; 115200 Baud 8,N,1
      den Kommentar hast du aber nicht so gut ausgewählt ;)

      Es gibt 2 verschiedene DS 1820, mit unterschiedlichen Family Codes.
      Hier findest du ein Beispielprogramm, welches beide berücksichtigt und durch den Verzicht auf Single auch noch eine Menge Flash spart:
      DS1820 DS18S20 DS18B20 Temperatursensor 1Wire
    • Der DS18B20 hat eine Conversion-Time von bis zu 750ms. Das ist in Deinem Code nicht optimal:

      Source Code

      1. do 'Start Hauptprogramm
      2. 'print " ----- DS18B20 Messung -----"
      3. print ""
      4. Gosub TemperaturD_starten
      5. waitms 750 ' <-- siehe Datenblatt Conversion Time
      6. Gosub TemperaturD_lesen
      7. 'waitms 500 <-- entfernen, Du kannst gleich berechnen und ausgeben!
      8. Gosub TemperaturD_ausgeben
      9. print " "
      10. print " ----- ENDE -----"
      11. print " "
      12. print " "
      13. Waitms 1250 ' <-- dann hast Du zusammen mit der Conversion-Time ca. alle 2 Sekunden eine Ausgabe.
      14. loop
      Display All