D.h. egal
was kommt : Feuersturm , Eiszeit , Weltuntergang , Aliens ,
.... er misst immer exakt die Temperatur.
Den DS18B20 gibt es in verschiedenen Ausführungen :
Ich bevorzuge die Kabelversion :-)
Der DS18B20 arbeitet im sogenannten : 1-wire System
das heißt , er brauch als Datenleitung nur 1 Kabel
welches mit einem Pullup von 4,7K an Vcc betrieben wird.
Der Arbeitsbereich liegt bei :
Spannung : 3,3V bis 5V
Temperatur : -55° bis +125°C in
0,5°C Schritten
wobei die genaueste Messung zwischen -10°C und 85°C
liegt.
Angesprochen wird dieser ganz simple :
Einen Pin zu 1wire definieren .... und ein Array von 9 Datenbyte
anlegen, da der DS18B20 neun Bytes liefert.
Waitms 500 ' warten bis Messung fertig , kann aber auch weggelassen werden
1wreset ' Initialisierung 1wwrite &HCC ' überspringe ROM-Befehl 1wwrite &HBE ' Temperatur auslesen Sep(1) = 1wread(9) ' Daten in ein Array lesen, beschreibt Sep(1) bis Sep(9)
Da man äußerst wenig Daten anzuzeigen hat , habe ich
mich für den TM1637 als Anzeigegerät entschieden .
Wie dieser zu handhaben ist kann man in einem der anderen
Beiträge lesen , drum gehe ich auf diesen
nicht weiter ein.
Clk Alias Portd.2 Dout Alias Portd.3 Din Alias Pind.3
Dim
Zaehler As Byte Dim
Str_Displaywert As String * 5 Dim Ascii As
String * 1 Dim Messwert as
word Dim Data_(2) As
Byte
Declare Sub
Send_Display(byval Displaywert As Word) Declare Sub
I2C_write(byval Bdata As Byte) Declare Sub
I2C_on() Declare Sub
I2C_off() Declare Sub
I2C_start() Declare Sub
I2C_stop() Declare Sub
I2C_ack()
I2C_on
Do
1wreset 1wwrite
&HCC 1wwrite
&H44 1wreset 1wwrite
&HCC 1wwrite
&HBE Data_(1)
= 1wread(2) '
für die Temperatur werden nur die 1. beiden Bytes eingelesen
For Zaehler = 2 To 5
Ascii = Mid(Str_Displaywert , Zaehler , 1)
if Zaehler=4 then
Select Case Ascii
Case "0" :I2C_write &B10111111
Case "1" :I2C_write &B10000110
Case "2" :I2C_write &B11011011
Case "3" :I2C_write &B11001111
Case "4" :I2C_write &B11100110
Case "5" :I2C_write &B11101101
Case "6" :I2C_write &B11111101
Case "7" :I2C_write &B10000111
Case "8" :I2C_write &B11111111
Case "9" :I2C_write &B11101111
Case Else:I2C_write &B10000000
End Select
else
Select Case Ascii
Case "0" :I2C_write &B00111111
Case "1" :I2C_write &B00000110
Case "2" :I2C_write &B01011011
Case "3" :I2C_write &B01001111
Case "4" :I2C_write &B01100110
Case "5" :I2C_write &B01101101
Case "6" :I2C_write &B01111101
Case "7" :I2C_write &B00000111
Case "8" :I2C_write &B01111111
Case "9" :I2C_write &B01101111
Case Else:I2C_write &B00000000
End Select
endif
I2C_ack
Next
I2C_stop End Sub