1Wire-Problem bei Versorgungsproblem

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • 1Wire-Problem bei Versorgungsproblem

      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

      Quellcode

      1. $regfile = "m328pdef.dat"
      2. $crystal = 16000000
      3. $hwstack = 150
      4. $swstack = 150
      5. $framesize = 800
      6. Config Com1 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
      7. Open "Com1:" For Binary As #1
      8. dim 1w_anzahl as word
      9. Config 1wire = Portb.0
      10. do
      11. Print #1 , " +++ 1: Start "
      12. 1wreset
      13. Print #1 , " +++ 2: ERR: " ; ERR ' <-- hier wird "0" ausgegeben, wenn (+) der Sensoren
      14. ' unterbrochen ist.
      15. ' Unterbrechung von (Data) oder (-) gibt "1" aus.
      16. 1w_anzahl = 1wirecount() ' <-- hier bleibt das Programm stehen, so lange die
      17. ' Spannungsversorgung (+) der Sensoren unterbrochen ist.
      18. ' Ist die Unterbrechung behoben, läuft es normal weiter.
      19. Print #1 , " +++ 3: ERR: " ; ERR
      20. Print #1 , " +++ 4: Anzahl: " ; 1w_anzahl
      21. wait 1
      22. loop
      23. End
      Alles anzeigen

      Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von Mechanic ()

    • In der Bascom-Hilfe zu 1wirecount steht

      Bascom-Hilfe schrieb:

      When there is no 1WIRE device on the bus, the ERR bit will be set. When devices are found, ERR will be cleared.
      Du brauchst also die Variable "Err" nicht vorher auf NULL setzen. Das macht die 1wire-routine für dich und es zeigt dir an, ob ein Slave vorhanden ist oder nicht.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • @Mechanic was ist dein Ziel, den Fehler zu erkennen, der den Err nicht setzt? Wenn du schreibst, das Programm soll statt dem Hänger weiter arbeiten, was soll es ohne die Sensoren machen?
      Wenn es dir um eine Meldung geht, dann starte einen Timer, bleibt das Programm hängen, kommt es zu einem interrupt, wo du eine Meldung absondern kannst, läuft das Programm fehlerfrei durch, dann schaltest du den timer wieder ab. Geht halt auch nur, wenn interrupts auch erlaubt sind.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------