Option Explicit
'DS75-Ansteuerung von Christof Rueß, www.hobby-elektronik.de.vu
'Die Verwendung dieses Moduls ist kostenfrei, solange diese Zeilen erhalten bleiben.
'Fragen, Kritik und Anregungen an: hobbyelektronik@gmx.net
'Anschlussbelegung an den Parallelport (Sub-D):
'SCL an Pin 1
'SDA an Pin 14
'SDA über 470-Ohm-Widerstand an Pin 10
'Vcc an Pin 9
'GND an Pin 18-25
'Enum für die Auflösung des DS75
Public Enum enDS75_Resolution
res09bit = 0 '0.5°C
res10bit = 32 '0.25°C
res11bit = 64 '0.125°C
res12bit = 96 '0.0625°C
End Enum
'Die Temperatur auslesen. Der Wert wird immer in °C ausgegeben.
Function ReadTemp(ByVal I2C_Address As Long) As Double
Dim ByteA, ByteB As Long
Dim x As Long
Dim Temp As Double
I2C.Start
WriteByte 145 + I2C_Address * 2
ByteA = I2C.ReadByte(False)
ByteB = I2C.ReadByte(True)
I2C.Stopp
If ByteA > 127 Then
Temp = ByteA - 256
Else
Temp = ByteA
End If
For x = 1 To 4
If ByteB And (2 ^ (8 - x)) Then
Temp = Temp + 1 / (2 ^ x)
End If
Next
ReadTemp = Temp
End Function
'Auflösung des Sensors festlegen. DS75_Resolution gibt die Auflösung zwischen 9 und 12 Bit wieder.
Function SetResolution(ByVal I2C_Address As Long, ByVal Resolution As enDS75_Resolution)
I2C.Start
I2C.WriteByte 144 + I2C_Address * 2 'das nächste Byte wird geschrieben
I2C.WriteByte 1 'Pointer auf Configure setzen
I2C.WriteByte Resolution 'Auflösung festlegen
I2C.Stopp
I2C.Start
I2C.WriteByte 144 + I2C_Address * 2 'das nächste Byte wird geschrieben
I2C.WriteByte 0 'Pointer auf Temp setzen
I2C.Stopp
End Function
Function CheckSensor(ByVal I2C_Address As Long) As Boolean
Dim RetVal As Boolean
I2C.Start
RetVal = I2C.WriteByte(145 + I2C_Address * 2) 'Beim Schreiben wird überprüft, ob ein ACK zurück kommt
I2C.ReadByte False 'Noch zwei Byte lesen, damit der DS75 nicht "verwirrt" wird
I2C.ReadByte True
I2C.Stopp 'Fertig!
CheckSensor = RetVal 'Noch den Wert zurückgeben
End Function