Hallo!
Ich habe einen 1Wire-Bus mit mehreren DS18B20-Sensoren aufgebaut. Dabei ist mit folgendes Problem aufgefallen, welches ich gerne in meinem Programm abfangen würde:
Kommt es zu einer Unterbrechung der Spannungsversorgung der DS18B20 dann bleibt das folgende Programm in der Zeile "1w_anzahl = 1wirecount()" hängen. Die Zeile "Print #1 , " +++ 3: ERR: " ; ERR" wird nicht mehr erreicht. Zuvor wird kein Fehler erkannt (err = 0 wird ausgegeben). Wenn man die Spannungsversorgung wieder verbindet, läuft das Programm wieder weiter.
Wird jedoch die Datenleitung oder die Masseleitung zu den Sensoren unterbrochen, dann wird das im Gegensatz dazu als Fehler erkannt (err=1 wird ausgegeben).
Ich möchte gerne, dass ich auch bei einer Unterbrechung der Sensorversorgung im Programm "weiterarbeiten" kann und eine Fehlerausgabe dafür erhalte. Gibt es dafür eine Lösung? Kann man da einen Timeout aktivieren oder überwachen? Wie könnte man aus dem 1wirecount wieder herauskommen? Watchdog ist keine Lösung, da ich in der nächsten Runde ja wieder an der Stelle hängen bleibe.
Bascom 2.0.8.1
Viele Grüße und herzlichen Dank!
Andy
Alles anzeigen
Ich habe einen 1Wire-Bus mit mehreren DS18B20-Sensoren aufgebaut. Dabei ist mit folgendes Problem aufgefallen, welches ich gerne in meinem Programm abfangen würde:
Kommt es zu einer Unterbrechung der Spannungsversorgung der DS18B20 dann bleibt das folgende Programm in der Zeile "1w_anzahl = 1wirecount()" hängen. Die Zeile "Print #1 , " +++ 3: ERR: " ; ERR" wird nicht mehr erreicht. Zuvor wird kein Fehler erkannt (err = 0 wird ausgegeben). Wenn man die Spannungsversorgung wieder verbindet, läuft das Programm wieder weiter.
Wird jedoch die Datenleitung oder die Masseleitung zu den Sensoren unterbrochen, dann wird das im Gegensatz dazu als Fehler erkannt (err=1 wird ausgegeben).
Ich möchte gerne, dass ich auch bei einer Unterbrechung der Sensorversorgung im Programm "weiterarbeiten" kann und eine Fehlerausgabe dafür erhalte. Gibt es dafür eine Lösung? Kann man da einen Timeout aktivieren oder überwachen? Wie könnte man aus dem 1wirecount wieder herauskommen? Watchdog ist keine Lösung, da ich in der nächsten Runde ja wieder an der Stelle hängen bleibe.
Bascom 2.0.8.1
Viele Grüße und herzlichen Dank!
Andy
Quellcode
- $regfile = "m328pdef.dat"
- $crystal = 16000000
- $hwstack = 150
- $swstack = 150
- $framesize = 800
- Config Com1 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
- Open "Com1:" For Binary As #1
- dim 1w_anzahl as word
- Config 1wire = Portb.0
- do
- Print #1 , " +++ 1: Start "
- 1wreset
- Print #1 , " +++ 2: ERR: " ; ERR ' <-- hier wird "0" ausgegeben, wenn (+) der Sensoren
- ' unterbrochen ist.
- ' Unterbrechung von (Data) oder (-) gibt "1" aus.
- 1w_anzahl = 1wirecount() ' <-- hier bleibt das Programm stehen, so lange die
- ' Spannungsversorgung (+) der Sensoren unterbrochen ist.
- ' Ist die Unterbrechung behoben, läuft es normal weiter.
- Print #1 , " +++ 3: ERR: " ; ERR
- Print #1 , " +++ 4: Anzahl: " ; 1w_anzahl
- wait 1
- loop
- End
Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von Mechanic ()