1Wire-Problem bei Versorgungsproblem

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • 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

      Source Code

      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
      Display All

      The post was edited 8 times, last by Mechanic ().

    • In der Bascom-Hilfe zu 1wirecount steht

      Bascom-Hilfe wrote:

      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.
    • Pull up zu klein? Die Sensoren würden versuchen ihre Stromversorgung über die Data Leitung zu bekommen.
      Wieder rauskommen - über einen timer-int der nach einer kleinen Wartezeit die Data hochzwingt (über ca 1kOhm). Das sollte den Sensoren reichen und das Count kann seine Job zu Ende bringen.
    • @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

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

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