Tido
15.01.2019, 18:00
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:
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
So wie abgebildet wird die Uhr nicht gestellt, Temperatur funktioniert.
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.
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:
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
So wie abgebildet wird die Uhr nicht gestellt, Temperatur funktioniert.
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.