Ich hab nen Mega8 mit HardwrePWm, nem timer0 und 2 1-wire Temp sensoren.
Hab aber probleme beim auslesen der Temp.
Hardwaremässig funktioniert es, jedoch nich im gesamten.
Hab Dann rausgefunden das die ISR Routine des Timer0 meine 1-wire kommunikation stört.
beim auslesen bekomme ich nun folgende Ausgabe über Print
Der code sieht vl ein bisschen komisch aus, sollte aber eigentlich in ner Function werkeln, bei der es versch Sensorarten gibt,.
Wie man sieht bekomme ich nur komische Temperturwerte angezeigt, entweder 0,0000024 oder 455..
Hab aber probleme beim auslesen der Temp.
Hardwaremässig funktioniert es, jedoch nich im gesamten.
Hab Dann rausgefunden das die ISR Routine des Timer0 meine 1-wire kommunikation stört.
beim auslesen bekomme ich nun folgende Ausgabe über Print
Booting.?Booting..<\r><\n>
|> 2Sensoren gefunden<\r><\n>
|> 1.Sensor 10<\r><\n>
|> 2.Sensor 22<\r><\n>
anfang hauptschleife<\r><\n>
|-->crc Daten sensor 1 OK<\r><\n>
Scratchpad00110101<\r><\n>
Scratchpad00000000<\r><\n>
Scratchpad01001011<\r><\n>
Scratchpad01000110<\r><\n>
Scratchpad11111111<\r><\n>
Scratchpad11111111<\r><\n>
Scratchpad00000101<\r><\n>
Scratchpad00010000<\r><\n>
temp zwischenwert 53<\r><\n>
temp1 zwischenwert 53<\r><\n>
Code:
Start:
1wreset ' Initialisierung
1wwrite &HCC ' überspringe ROM-Befehl
1wwrite &H44 ' Temperaturmessung anstoßen
Wait 5 ' warten bis Messung fertig
1wreset ' Initialisierung
1wverify Sensor1(1) 'sensor mit bestimmter id ansprechen
1wwrite &HBE ' Temperatur auslesen
Scratch(1) = 1wread(9) 'scratchpad auslesen
If Scratch(9) <> Crc8(scratch(1) , 8) Then
Print "|-->crc sensor 1 Falsch," ; Crc_cnt ; "Versuch, => wiederholen"
Incr Crc_cnt
If Crc_cnt < 3 Then 'versuche 3 mal temp auslzulesen
Goto Start:
End If
Else
Print "|-->crc Daten sensor 1 OK"
For I = 1 To 8
Print "Scratchpad" ; Bin(scratch(i))
Next
End If
Temp = Scratch(2)
Shift Temp , Left , 8
Temp = Temp + Scratch(1)
Print "temp zwischenwert " ; Temp
Temp1 = Temp
If Scratch(1) = &H10 Then ' 16 unterscheidung nach Family code
Temp1 = Temp1 / 16
Elseif Scratch(1) = &H22 Then '34
Temp1 = Temp1 / 2
End If
Print "temp1 zwischenwert " ; Temp1
Ist_temp1 = Scratch(8) - Scratch(7)
Ist_temp1 = Ist_temp1 / Scratch(8)
Ist_temp1 = Ist_temp1 + Temp1
Ist_temp1 = Ist_temp1 - 0.25
Ist_temp1 = Fusing(ist_temp1 , "#.##")
Der code sieht vl ein bisschen komisch aus, sollte aber eigentlich in ner Function werkeln, bei der es versch Sensorarten gibt,.
Wie man sieht bekomme ich nur komische Temperturwerte angezeigt, entweder 0,0000024 oder 455..