Hallo,
ich habe ein Programm, dass einmal die Minute zwei Temp-Sensoren DS18B20 ausliest.
Funktioniert auch wunderbar.
Des Weiteren habe ich einen DCF77-Baustein angeschlossen, der auch wunderbar funktioniert,
wenn die Auswertung der Temp-Sensoren deaktiviert wird.
Ich habe hier einige Beiträge zu diesem Problem gefunden (Suchbegriff(e): dcf77, ds1820), aber in keinem wird der Grund dafür genannt,
warum die DCF-Zeitsynchro nicht funktioniert, wenn 1 Mal pro Minute die Temp-Sensoren ausgewertet werden.
Ich verwende einen Mega32 mit 8MHz, mein Testcode sieht folgendermaßen aus:
So wie abgebildet wird die Uhr nicht gestellt, Temperatur funktioniert.Code:Config Dcf77 = Pind.3 , Timer = 1 , Inverted = 0 , Timer1sec = 1 , Update = 2 , Updatetime = 3 Config 1wire = Porta.5 Enable Interrupts Config Date = Dmy , Separator = . Do Print Time$ , " " , Date$ , " " , Dummyword If _sec = 2 Then Gosub Temperatur Loop Temperatur: 'Fehler 1-9 'Testweise nur 1 Sensor Ds18b20(1) = 1wsearchfirst() Messung: 1wverify Ds18b20(1) ' Gerät mit der SerienNr. aus Ar() auswählen If Err = 0 Then 1wwrite &H44 ' Temperaturmessung anstoßen Waitms 750 ' warten bis Messung fertig 1wverify Ds18b20(1) ' Gerät mit der SerienNr. aus Ar() auswählen 1wwrite &HBE ' Temperatur auslesen Ds18b20(1) = 1wread(9) ' Daten in ein Array lesen Dummyint = Makeint(ds18b20(1) , Ds18b20(2)) Temp = Dummyint / 16 Temp = Temp * 10 If Temp < 0 Then Dummyword = Int(temp) Temp = Temp - Dummyword Dummyword = Dummyword + 1000 Else Dummyword = Int(temp) Temp = Temp - Dummyword End If Temp = Temp * 10 If Temp = 5 Or Temp > 5 Then Incr Dummyword Else Fehler = 1 End If
Kommentiere ich "If _sec = 2 Then Gosub Temperatur" aus, so wird die Uhr nach ca.
3 Minuten gestellt.
Warum ist dies so? Ich habe gelesen, dass für 1Wire kein Timer verwendet wird.
EDIT: Gerade für 30 Minuten weggewesen, komme wieder: Uhr noch nicht gestellt. Schalte den Laptop ein, Programmer führt Reset aus und 5 Minuten später geht die Uhr richtig. Also funktioniert es "nur" unzuverlässig, wenn die Temp-Sensoren ausgewertet werden. Aber warum....??? Ohne die Sensorenauswertung wird die Zeit immer in 3 Minuten gesynct.
EDIT2: Das hat bisher nur einmal funktioniert.







Zitieren

Lesezeichen