Re: Probleme beim DS2482-800 <-> DS18B20 Kategorie: I²C-Bus (von Dirk - 4.06.2009 9:32) | |
Als Antwort auf Re: Probleme beim DS2482-800 <-> DS18B20 von Jörg Hansen - 3.06.2009 23:16
| |
> > Hallo miteinander, > > > > irgendwie soll es mit den Raumfühlern nicht so richtig klappen. > > Da ich die DS18B20 sternförmig in den jeweiligen Heizkreizverteiler verkabelt habe erhoffte ich mir > > über die 1W-Bridge-800 die Lösung meiner Probleme. Zunächst sah alles recht gut aus. > > An den seperaten 1W-Anschlüssen 0,1,2,6,7 waren bis heute je ein Temp.-Fühler angeschlossen. > > Hin und wieder lieferte einer, manchmal auch zwei Sensoren, den Wert -0,0625°C (�bertragung > > ausschlie�lich von "1"en. Zumeist ein Zeichen, wenn die Abfrage der Sensoren zu schnell, also mit zuwenig > > Wartezeit versehen war => eher kein Problem. > > > > Heute wollte ich den nächsten Temp.-Fühler an einen der noch freien 1W-Anschlüsse 3,4 oder 5 > > anschlie�en. Kein Weg führte zum Ziel. Zunächst vemutete ich der zusätzliche Fühler sei defekt. > > Konnte ich durch Anschlu� an Port 7 ausschlie�en. Hier lieferte er regelmä�ig reale Werte. > > Manchmal hat der zusätzl. Fühler an Port 4 funktioniert, aber nur dann wenn ich den Fühler an Port 6 > > nicht mit der DS2482 verbunden hatte. > > > > Gibt es hier eine Art "Lastproblem"? > > Hat jemand eine DS2482-800 mit allen Anschlüssen beschalten erfolgreich in Betrieb? > > > > Ein Fehler am Baustein (DS2482-800) selber möchte ich fast ausschlie�en, da besagte Phänomene > > genau so bei einem zweiten Baustein auftreten (zwei Heizkreisverteiler im EFH). > > Beim Anschlu� eines Fühlers am 5 Port zeigt dieser lediglich die -0.0625°C an. > > > > Alle Temp.-Fühler werden mit 5V (OK, manchmal sind es nur 4,87V) "Speisung" betrieben > > => kein parasitärer Mode. > > > > Die Längen zu den Fühlern sind mitunter schon recht erheblich: > > Ltg.-Nr. Länge in Meter > > 1 11m > > 2 4m > > 3 6 / 10 / 22m > > 4 9 / 14m > > 5 5 / 12 / 23m > > 6 12 / 21m > > 7 13 / 22 / 26 / 32m > > 8 8 / 9m > > 9 12m > > 10 22m > > > > Aber das sollte doch gerade bei dem "gemächlichen" 1W-Bus nicht das Problem sein. ODER? > > > > Vielen Dank für Eure sachdienlichen Hinweise. > > Hallo Dirk, > > betreibe auch den DS2482-800 mit z.Zt. 15 Sensoren (alle DS18B20). > Habe die Ports 0-4 in Verwendung mit bis zu 4 Senoren auf einem Port und ähnlich langen Leitungen. > (Port 5 und 6 sind noch frei, Port 7 benötige ich um Romcodes neuer Sensoren einzulesen und an- > schliessend im EEPROM abzulegen). > > Alle Ports und Sensoren laufen bei mir ohne Probleme. OK, es besteht also Hoffnung ;-) > Ich betreibe die Sensoren ausschliesslich im parasitären Stromversorgungsmodus. Da las ich widerum in der Vergangenheit, dass es stabiler mit der 5V-Spannungsversorgung laufen soll. Aber wenn es so funktioniert, werd ich es halt im parasitären Mode ausprobieren. > > Folgende Punkte fallen mir als Fehlerquellen ein: > Hast Du jeweils einen 100 Ohm Widerstand zwischen IO-Port und Bus geschaltet? Wie ist das genau gemeint? Soll an dem Ende, wo der/die Temp.-Fühler ist/sind ein Widerstand eingesetzt werden oder auf der Seite des DS2482-800? Aus dem Datenblatt kann ich ein solchen Widerstand nicht erkennen. > Wie zuverlässig ist deine gemeinsame GND/ 0 Volt Verbindung ? Mittlerweile recht hoch. Alle Schirme der YStY-Leitungen als auch die verschiedenen Netzteile sind alle samt über Erde => über Potischiene => an Fundamenterder geerdet. > Wir konstant sind die +5 Volt (Restwelligkeit) ? Fehlt mir einfach ein Oszi. Mein ALDI-Multimeter dient eher als grobe Schätzung von Spannungswerten ;-) > Welche Kabel verwendest Du ? Zum Anschlu� der Temp.-Sensoren: NYM 5x1,5 bzw. 0,6-YStY (=> mit Schirm) => Probleme sind unabhängig von dem verwendetet Kabel > Ich benutze normale Telefonkabel, Sternvierer-verseilt. > Habe testweise 3 Sensoren aber auch schon über einen 100m Ring H03VV-F 3x0,75 ohne Probleme > betrieben. > > Wichtig ist auch, dass Du ca. 800ms zwischen dem convertTemperatur Befehl zum Sensor > und dem Auslesen des Wertes wartest. Dies könnte eine Ursache sein, da ich nicht die 800ms abwarte. Auch hier hatte ich bisher es so verstanden, dass diese recht lange "Wartezeit" lediglich im parasitären Mode notwendig ist. Da ich aktuell die Fühler mit 5V versorge habe ich die Wartezeit derzeitig lediglich mit 25ms veranschlagt. > Anbei mein Quelltext zum Auslesen aller meiner Sensoren und Ausgabe auf HWCOM. > (habe jedoch das DS 2482 Modul selber für die 800er Version erweitert und benutze nicht die spätere > Version von Andre. Die Funktionen haben dadurch eine etwas andere Namensgebung, sind aber > kompatibel) > > > //-------------------------------------------------- > function tempmessung() // Temperaturmessung manuell > //-------------------------------------------------- > { > > string s; //für Textausgaben > int i; // für Schleifen > byte getrom[16]; // Speicherstellen für ROM-Codes > int scratchpad; // Zwischenspeicher für gelesenen Temperaturwert > float temp [16]; // Zwischenspeicher für Temperaturwerte (wie maxSensor) > wait oneWirecapture ==0; > oneWirecapture =1; > for i = 0...(maxSensor-1) > { > eeprom.readbytearray(0,(i*16),getrom,16); // ROMcode aus EEprom lesen > if debug > { > s=Sensorname[i]; > hwcom.send(s,str.length(s)); > hwcom.ret(); > wait hwcom.ready(); > }; > if getrom[1]== 0xff continue; // wenn erste Speicherstelle FF (kein Romcode) weiter mit nächstem Sensor > ds2482800.setChannel (0,getrom[8]); // Kanalregister setzen 0-7 > ds2482800.resetDevices(0); > ds2482800.matchROM(0,getrom); > ds2482800.writeByte(0,0x44); //Convert Temperatur > sleep 800; // diese Zeit braucht ein DS18B20 bis der Wert ausgelesen werden kann > ds2482800.matchROM(0,getrom); > ds2482800.writeByte(0,0xbe); //read scratchpad > scratchpad=ds2482800.readByte(0) or ds2482800.readByte(0) shl 8; > if debug //Ausgabe des Temperaturintegers > { > s="Scratchpad gelesen:"; > hwcom.send(s,19); > wait hwcom.ready(); > s=""; > str.putint(s,scratchpad); > hwcom.send(s,10); > hwcom.ret(); > wait hwcom.ready(); > }; > if scratchpad and 0xF000 > temp[i]= (scratchpad) or 0xf000; > else > temp[i]= (scratchpad) ; > s=""; > str.putint(s,i); > if i<10 s=s+" "; > else s=s+" "; > s=s+Sensorname[i]; > s=s+" "; > str.putfloatf(s,(temp[i]*0.0625),1); > log(s); > }; > oneWirecapture =0; > }; > > > > Gru� und viel Erfolg > Jörg Vielen Dank für den Quellcode. Da muss ich mich erstmal einlesen. Das Wochenende steht ja fast vor der Tür, da werde ich mal das eine oder andere ausprobieren. Zunächst vielen Dank für die verschiedenen Hinweise. | |
Antwort schreiben Antworten: Re: Probleme beim DS2482-800 <-> DS18B20 (von Dirk - 5.06.2009 7:30) Re: Probleme beim DS2482-800 <-> DS18B20 (von Jörg Hansen - 6.06.2009 21:12) Re: Probleme beim DS2482-800 <-> DS18B20 (von Dirk - 11.06.2009 14:50) Re: Probleme beim DS2482-800 <-> DS18B20 (von Dirk - 11.06.2009 19:01) Re: Probleme beim DS2482-800 <-> DS18B20 (von Jörg Hansen - 12.06.2009 19:51) Re: Probleme beim DS2482-800 <-> DS18B20 (von Dirk - 15.06.2009 16:21) |