Hi,
hier mal mein Code. Ist ein 1920 im Dreileiter-Mode (kein parasite power) und funktioniert prima. Vielleicht hilft's ja
.
Code:
'ds_1920_2_16X4.bas
'DS1920 Temperaturmessung
$regfile = "m16def.dat"
$hwstack = 32
$swstack = 8
$framesize = 24
$crystal = 8000000
$baud = 9600
Config 1wire = Portb.0
Config Lcd = 27 * 4
Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0
Deflcdchar 0 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 'Grad Zeichen Chr(0)
Config Portd.2 = Input 'Taster für Hintergrundbeleuchtung
Config Porta.6 = Output 'LED-Hintergrundbeleuchtung
'Const Parasitpower = 1
Const Ds1920 = &H10
Const Skiprom = &HCC
Const Read_rom = &H33
Const Convertt = &H44
Const Read_ram = &HBE
Const Write_ram = &H4E
Const Copy_ram = &H48
Const Recall_ee = &HB8
Const Read_power = &HB4
Dim Family_code As Byte
Dim Serial_number(6) As Byte
Dim Crc As Byte
Dim Scratch(9) As Byte
Dim I As Byte
Dim Temp As Word
Dim Temp1 As Integer
Dim Stemp As Single
Dim Mint As Single
Dim Maxt As Single
Mint = 200
Do
1wreset
If Err = 1 Then Print "iButton Error"
1wwrite Read_rom
Family_code = 1wread()
For I = 1 To 6
Serial_number(i) = 1wread()
Next
Crc = 1wread()
If Family_code <> Ds1920 Then Exit Do
1wwrite Convertt
#if Parasitpower
Wait 2
#else
Do
Temp = 1wread()
Loop Until Temp = &HFF
#endif
1wreset
If Err = 1 Then Print "iButton Error"
1wwrite Skiprom
1wwrite Read_ram
For I = 1 To 9
Scratch(i) = 1wread()
Next
Temp = Scratch(2)
Shift Temp , Left , 8
Temp = Temp + Scratch(1)
Temp1 = Temp
Print "Der Temperaturwert ist " ; Temp ; " Counts."
Temp1 = Temp1 / 2
Print "Die gemessene Temperatur ist " ; Temp1 ; " Grad Celsius"
Stemp = Scratch(8) - Scratch(7)
Stemp = Stemp / Scratch(8)
Stemp = Stemp + Temp1
Stemp = Stemp - 0.25
Print "Die exakt gemessene Temperatur ist ";
Print Fusing(stemp , "#.##");
Print " Grad Celsius"
If Maxt < Stemp Then
Maxt = Stemp
End If
If Mint > Stemp Then
Mint = Stemp
End If
Cls
Cursor Off
If Pind.2 = 1 Then Toggle Porta.6
Upperline
Lcd "T-Ist: " ; Fusing(stemp , "#.#") ; Chr(0) ; "C"
Thirdline
Lcd "min: " ; Fusing(mint , "#.#")
Fourthline
Lcd "max: " ; Fusing(maxt , "#.#")
'Wait 2
Loop
Print "kein Temperatursensor kontaktiert"
End
Die LCD-Zeilen kannst ja rausnehmen.
Lesezeichen