Probleme mit 1-Wire Bus von Dallas Maxim

19/12/2008 - 11:11 von Uwe Hercksen | Report spam
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
www.1wire.org beschrieben muß ich noch ausprobieren.

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
 

Lesen sie die antworten

#1 Frank Buss
19/12/2008 - 11:35 | Warnen spam
Uwe Hercksen wrote:

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.



Adapter tauschen ist wohl die beste Idee, wenn man es nicht gleich selber
bauen möchte :-) Das One Wire Protkoll ist ja ziemlich einfach, ich habe
das mal vor einiger Zeit in VHDL programmiert:

http://www.frank-buss.de/vhdl/spartan3e.html

und làuft problemlos seit Jahren in einem Geràt, was kommerziell verkauft
wird, auch mit einem Maxim-Chip, der abgefragt wird. Wenn das Programm
hàngt, würde ich eher auf ein Problem des USB-Adapters tippen. Wenn es z.B.
ein HID-Adapter ist, der synchron angesprochen wird und im Microcontroller
vielleicht mal ein USB-Paket nicht beantwortet wird, könnte daß das
beobachtete Verhalten bei schlecht geschriebener PC-Software erklàren. Das
One Wire Protokoll selbst bietet nicht viel Möglichkeiten, daß ein Slave es
zum hàngen bringen kann. Hast du ein Scope da, um mal zu messen, ob noch
was auf der Leitung gesendet wird, wenn es hàngt? Ich habe in dem
englischsprachigen Wikipedia-Artikel mal ein Timing-Diagramm eingefügt,
damit kannst du das mit dem Scope leicht testen, ob z.B. das Device nach
einem Reset nicht mehr antwortet:

http://en.wikipedia.org/wiki/1-Wire

Hàngt es immer noch, wenn man den USB-Adapter rauszieht und wieder
reinsteckt? Die Chips dabei extra versorgen, aber im DS2450 ist das ja
vorgesehen, also die werden nicht über die One Wire Leitung versorgt, was
schonmal eine Fehlerquelle weniger ist.

Frank Buss,
http://www.frank-buss.de, http://www.it4-systems.de

Ähnliche fragen