Hallo,
ich habe eine Schaltung zur Messung von Temperaturen aufgebaut die den
1-Wire Bus von Dallas bzw. Maxim benutzt. Zum Auslesen über den PC benutze ich den DS9490R/DS9490B USB to 1-Wire/iButton Adapter, ausgelesen werden die ICs DS2450 1-Wire Quad A/D Converter, DS18S20-PAR 1-Wire Parasite-Power Digital Thermometer und DS1822-PAR Econo 1-Wire Parasite-Power Digital Thermometer. Das Ganze dient zur Messung von Temperaturen an mehreren Stellen, teilweise auch mit drahtloser IR Übertragung und müsste über einige Stunden lang störungsfrei funktionieren, bei einer Messung pro Sekunde also einige 1000 Aufrufe.Die Verbindung ist ein kurzes Kabel mit unter 1 m Länge, der OneWire Bus kann auch bis zu 200 oder 300 m lang sein. Mit verschiedenen Beispielprogrammen von Maxim, aber auch mit eigenen Programmen habe ich immer das gleiche Problem, die Übertragung funktioniert wunderbar für einige 100 bis einige 1000 Aufrufe, aber irgendwann bricht sie ab und das Programm hängt. Bei einem Testprogramm in Visual Basic sehe ich im Debugger genau das das Programm immer im Aufruf tc.doTemperatureConvert(tc_state) oder adc.doADConvert(0, ad_state) des 1-Wire Drivers hängenbleibt. Es ging auch schon mal 17984 mal gut, der Fehler trat aber auch schon nach nur wenigen 100 Aufrufen auf.
Ich habe auch schon verschiednene Entstörungsmaßnahmen probiert, Abschluß der Busleitung mit einem Widerstand 330 oder 470 Ohm, mit einer Reihenschaltung 120 Ohm und 4,7 nF, eine Ferritperle direkt am 1-Wire Slave, ein Klappferrit um den 1-Wire Bus aber bisher ohne Erfolg. Eine Schottkydiode parallel zum 1-Wire Slave wie im 1-Wire Design Guide von
Es sind auch die Quellen der Treiber in Java veröffentlicht, unter Java tritt das Problem ebenso auf, aber mit der Sun Java NetBeans IDE kann man im Debugger nicht feststellen wo das Programm hängt wenn es denn einmal hängt.
Im Moment läuft noch ein Test mit einem Klappferrit um die Leitung, in der Mitte der Leitung trat der "Hänger" nach 264 Aufrufen auf, mit dem Ferrit direkt am 1-Wire Slave nach 399 Aufrufen, mit dem Ferrit direkt an dem 1-Wire to USB Adapter läuft es im Moment schon über 8900 mal ohne Problem. Aber es muß auch einige 100000 Mal sicher funktionieren, der AD Wandler DS2450 rauscht etwas, da muß ich über etwa 8 bis 64 Aufrufe mitteln um saubere Werte zu bekommen, es sollten also auch über eine Million Aufrufe funktionieren, ein Mittelwert pro Sekunde und das über einige Stunden lang.
Verschiedene 1-Wire Slaves habe ich ohne Erfolg probiert, verschiedene kurze Leitungen auch. Leider haben ich nur einen 1-Wire to USB Adapter da, da muß ich erst was bestellen um tauschen zu können.
Das seltene und statistische Auftreten des Fehlers macht es sehr schwer den Fehler zu fassen und zu beseitigen.
Mit dem Support von Maxim habe ich auch einige Emails ausgetauscht, aber das hat mich auch noch nicht weiter gebracht.
Hat jemand noch gute Ideen was ich noch machen könnte?
Vielen Dank schon mal,
Uwe