AVRboy
16.10.2006, 19:48
Hi,
ich habe heute mal den 1 wire baustein ds 1820 testen wollen doch irgendwie will er nich mit mir reden aber ich bin mir ziemlich sicher das ich nichts falsch mache. der sensor steck auf einem steckbrett, bekommt 5V und hat den benötigten widerstand. jedoch macht er keinen mucks kann mir jemand helfen.
hier mal den zusammen geschnipselten code:
$regfile = "m8def.dat"
$crystal = 4000000
$baud = 19200
Config 1wire = Portb.0 'daten port
Const Ds1820 = &H10 'daten des 1w devices
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 'daten variabeln die gelesen werden
Dim Serial_number(6) As Byte
Dim Crc As Byte
Dim Scratch(9) As Byte
Dim I As Byte 'temperatur variabeln
Dim Temp As Word
Dim Temp1 As Integer
Dim Stemp As Single
Do
1wreset
If Err = 1 Then
Print "DS 1820 Error" ' prüfe ob ds1820 angeschlossen
1wwrite Read_rom 'nur wenn 1 ds am bus man braucht kein 1wsearch wenn 1 am bus
Family_code = 1wread() 'lese familie aus
For I = 1 To 6
Serial_number(i) = 1wread() 'lese name aus
Next
Crc = 1wread() ' lese check summe aus
If Family_code <> Ds1820 Then 'vergleiche familie mit daten über ds1820
Exit Do
1wwrite Convertt 'initialiesiere temperaturmessung
Do
Temp = 1wread() ' lese Temperatur in temp
Loop Until Temp = &HFF 'verlase wenn temp = FF
1wreset 'reset 1w device
If Err = 1 Then
' prüfe ob ds1820 angeschlossen
Print " DS 1820 Error"
1wwrite Skiprom ' starte: alle ds am bus senden Temperatur
1wwrite Read_ram ' starte: lese scart pad
For I = 1 To 9
Scratch(i) = 1wread() 'speichere daten in scratch * 9
Next
Temp = Scratch(2) ' temp ist 1+2 byte von scratch
Shift Temp , Left , 8 ' lese linke 8 von temp
Temp = Temp + Scratch(1) 'rechne temperatur aus counts
Temp1 = Temp
Print "Der Temperaturwert ist: " ; Temp ; "Counts." 'sende temp als wert
Temp1 = Temp1 / 2
Print "Die gemessen Temp.ist" ; Temp1 ; "Grad" 'sende temp als grad
Stemp = Scratch(8) - Scratch(7)
Stemp = Stemp / Scratch(8) 'bestimme endgültige temperatur
Stemp = Stemp + Temp1
Stemp = Stemp - 0.25
Print Fusing(stemp , "#.##"); 'sende temperatur mit komma
Wait 2
Loop
Print "Kein Sensor aktiv" ' kein sensor momentan aktiv
End If
End If
End If
End
man muss nicht so auf die kommerntare sehen die habe ich mir bei meiner verzweifelten fehlersuche rein gebaut. ausserdem mag das prog vieleicht für den anfang etwas komisch sein.
nun woran liegt es vileicht an der verbindung was ich nicht glaube oder am prog.
mfg m.r.
ich habe heute mal den 1 wire baustein ds 1820 testen wollen doch irgendwie will er nich mit mir reden aber ich bin mir ziemlich sicher das ich nichts falsch mache. der sensor steck auf einem steckbrett, bekommt 5V und hat den benötigten widerstand. jedoch macht er keinen mucks kann mir jemand helfen.
hier mal den zusammen geschnipselten code:
$regfile = "m8def.dat"
$crystal = 4000000
$baud = 19200
Config 1wire = Portb.0 'daten port
Const Ds1820 = &H10 'daten des 1w devices
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 'daten variabeln die gelesen werden
Dim Serial_number(6) As Byte
Dim Crc As Byte
Dim Scratch(9) As Byte
Dim I As Byte 'temperatur variabeln
Dim Temp As Word
Dim Temp1 As Integer
Dim Stemp As Single
Do
1wreset
If Err = 1 Then
Print "DS 1820 Error" ' prüfe ob ds1820 angeschlossen
1wwrite Read_rom 'nur wenn 1 ds am bus man braucht kein 1wsearch wenn 1 am bus
Family_code = 1wread() 'lese familie aus
For I = 1 To 6
Serial_number(i) = 1wread() 'lese name aus
Next
Crc = 1wread() ' lese check summe aus
If Family_code <> Ds1820 Then 'vergleiche familie mit daten über ds1820
Exit Do
1wwrite Convertt 'initialiesiere temperaturmessung
Do
Temp = 1wread() ' lese Temperatur in temp
Loop Until Temp = &HFF 'verlase wenn temp = FF
1wreset 'reset 1w device
If Err = 1 Then
' prüfe ob ds1820 angeschlossen
Print " DS 1820 Error"
1wwrite Skiprom ' starte: alle ds am bus senden Temperatur
1wwrite Read_ram ' starte: lese scart pad
For I = 1 To 9
Scratch(i) = 1wread() 'speichere daten in scratch * 9
Next
Temp = Scratch(2) ' temp ist 1+2 byte von scratch
Shift Temp , Left , 8 ' lese linke 8 von temp
Temp = Temp + Scratch(1) 'rechne temperatur aus counts
Temp1 = Temp
Print "Der Temperaturwert ist: " ; Temp ; "Counts." 'sende temp als wert
Temp1 = Temp1 / 2
Print "Die gemessen Temp.ist" ; Temp1 ; "Grad" 'sende temp als grad
Stemp = Scratch(8) - Scratch(7)
Stemp = Stemp / Scratch(8) 'bestimme endgültige temperatur
Stemp = Stemp + Temp1
Stemp = Stemp - 0.25
Print Fusing(stemp , "#.##"); 'sende temperatur mit komma
Wait 2
Loop
Print "Kein Sensor aktiv" ' kein sensor momentan aktiv
End If
End If
End If
End
man muss nicht so auf die kommerntare sehen die habe ich mir bei meiner verzweifelten fehlersuche rein gebaut. ausserdem mag das prog vieleicht für den anfang etwas komisch sein.
nun woran liegt es vileicht an der verbindung was ich nicht glaube oder am prog.
mfg m.r.