Ich habe mal schnell nen Atmega16 + ds1820 auf nem Steckbrett aufgebaut und dein Programm nur soweit modifiziert das es mir die Daten auf'n Comport ausgibt da ich kein LCD display zur Hand habe.
Mit 1 Mhz Intern rührt sich der DS1820 kein Stück. SerialNr sowie Temp. alles 0.
Mit 2 Mhz Intern funktioniert es wenn nach dem TempConvert &H44 ein wenig länger gewartet wird. (Waitms700)
Hier der Code
Edit: Display gefunden und eingebunden
Mit 1 Mhz Intern rührt sich der DS1820 kein Stück. SerialNr sowie Temp. alles 0.
Mit 2 Mhz Intern funktioniert es wenn nach dem TempConvert &H44 ein wenig länger gewartet wird. (Waitms700)
Hier der Code
Code:
' $regfile = "m32def.dat"
' $crystal = 4000000
' $hwstack = 40
' $swstack = 16
' $framesize = 32
'$regfile = "M8def.dat"
'$crystal = 1000000
'$hwstack = 64
'$swstack = 64
$regfile = "m16def.dat"
$crystal = 2000000
$hwstack = 64
$swstack = 64
$framesize = 64
'Config Lcdpin = Pin , Port = Portd , E = Portb.5 , Rs = Portb.4
'Config Lcd = 20 * 4
'Config Comport
$baud = 1200
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
waitms 500
Print
Print
Print "Takt Intern 2Mhz "
waitms 1000
Print "DS1820 Test"
Print
Config 1wire = Portc.5
Dim Ar(2) As Byte , A As Byte , I As Byte , Temperatur As Integer
Dim Halb As Byte
Dim Dsid(8) As Byte
Dim TempDS1820_tmp As String * 5
Dsid(1) = 1wsearchfirst()
Print "DS1820 ID: "
For I = 1 To 8
Print Hex(dsid(i))
Next
Print
Print "Temp:"
Do
Waitms 2000
1wreset 'reset the
1wwrite &HCC 'read ROM
1wwrite &H44
Waitms 700 'read ROM
1wreset 'reset the
1wwrite &HCC 'read ROM
1wwrite &HBE 'read ROM
For I = 1 To 2
Ar(i) = 1wread() 'place into
Next
'Locate 2 , 1
Temperatur = Ar(1)
If Ar(2) > 0 Then Temperatur = 0 Else Shift Temperatur , Right
'Lcd Temperatur ; ".";
Halb = Ar(1) And 1
If Halb = 1 Then TempDS1820_tmp = str(Temperatur) +".5 C" Else TempDS1820_tmp = str(Temperatur) +".0 C"
print TempDS1820_tmp
Loop
End
Edit: Display gefunden und eingebunden