Forum: Mikrocontroller und Digitale Elektronik DS18B20 Problem


von Stefan U. (unti)


Lesenswert?

Hallo Leute

Ich habe meinen DS18B20 in ein Aluminiumgehäuse eingegossen und mit 
einer dreipoligen Steuerleutung verbunden. Wenn ich den DS18B20 an den 
PIC anschließe funktioniert er einwandfrei. Verlängere ich das Kabel mit 
einem zweipoligen Kabel + Abschirmung funktioniert er nicht mehr (die 
zwei Leitungen sind für Plus und Datenleitung, die Abschirmung ist für 
Minus). An was kann das leigen??

MfG unti

von Paul Baumann (Gast)


Lesenswert?

Du hättest vor dem Eingießen noch einen Widerstand von 4,7K zwischen
die Datenleitung und +Ub löten sollen.

MfG Paul

von (prx) A. K. (prx)


Lesenswert?

Stefan Untner schrieb:
> > zwei Leitungen sind für Plus und Datenleitung, die Abschirmung ist für
> Minus). An was kann das leigen??

Welcher Code? Ich hatte mal eine Längenabhängigkeit. Es stellte sich 
heraus, dass im Code (von PeDa) an einer Stelle nicht explizit gewartet 
wurde und die Datenleitung bedingt durch die Leitungskapazität nicht 
genug Zeit hatte, wieder auf 1 zu kommen.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Paul Baumann schrieb:
> Du hättest vor dem Eingießen noch einen Widerstand von 4,7K zwischen
> die Datenleitung und +Ub löten sollen.

Der muss nicht am Sensor sitzen, das andere Ende tut es auch. Ausserdem 
gäbe es dann Probleme bei mehreren Sensoren an einem Bus.

von Paul Baumann (Gast)


Lesenswert?

A.K. schrob:
>Der muss nicht am Sensor sitzen, das andere Ende tut es auch.

Ich hätte das nicht geschrieben, wenn ich das Verhalten nicht auch
erlebt hätte.

Zitat Pittiplatsch, der Liebe:
"Kannste glauben!"

MfG Paul

von Max H. (hartl192)


Lesenswert?

Zeig uns mal den Code...
Wird die Datenleitung spätestens 10µs nach Start der Messung niederohmig 
auf high gesetzt?

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Max H. schrieb:
> Wird die Datenleitung spätestens 10µs nach Start der Messung niederohmig
> auf high gesetzt?

Unnötig, weil 3-adrig verdrahtet, also nicht parasitär versorgt.

von (prx) A. K. (prx)


Lesenswert?

Paul Baumann schrieb:
> Ich hätte das nicht geschrieben, wenn ich das Verhalten nicht auch
> erlebt hätte.

Ich habe in einer Installation zig Meter Leitungwildwuchs im Einsatz, 
teils als Stern, mit Pullup am Controller. Allerdings parasitär. 
Interessanter fände ich, ob hier Störungen einer ungefilterten 
Vcc-Leitung auf die Daten durchschlagen. Ein L/C Filter wär da kein 
Schaden.

: Bearbeitet durch User
von Max H. (hartl192)


Lesenswert?

A. K. schrieb:
> Unnötig, weil 3-adrig verdrahtet, also nicht parasitär versorgt.
Stimmt. Ich hätte den Beitrag zu Ende lesen sollen und nicht bei "einem 
zweipoligen Kabel" aufhören...

von seit_z80 (Gast)


Lesenswert?

Man kann sich durchaus mal von den Application Notes trennen und weniger 
als 4,7 kOhm Pull-Up Widerstand benutzen, denn im Datenblatt steht etwas 
von mind. 4 mA Sink Current, bei 0,4 v Sättigung, d.h. bei 5 V - 0,4 V = 
4,6 V / 4 mA = 1,15 kOhm.
Bei mir hat ein Widerstand von 1,2 kOhm am ATMega 328 alle Störungen der 
6 Sensoren an einem nicht-parasitären Bus von ca. 20 m Länge eliminiert. 
Mit 4,7 kOhm war nur etwa jeder 20. Meßzyklus erfolgreich.

von Stefan U. (unti)


Angehängte Dateien:

Lesenswert?

Danke für die vielen und schnellen Antworten.
Der 4,7kOhm Widerstand ist auf der Platine zwischen Plus und 
Datenleitung angelötet (Verbindung mittels Molexstecker).

Hier der Code mit dem die Temp. ausgelesen wird (im Anhang ist der Code 
für die Unterprogramme/Befehle):

output_high(DS1820_DATA);
if(!timer_DS1820)
{
     timer_DS1820=TIMER_500msec;
     if(ds1820_present())
     {
          DS_present=1;
     if(!conv)
    {
          ds1820_present();
        ds1820_write_byte(SKIPROM);
        ds1820_write_byte(CONVERT);
        conv=1;
    }
    else
    {
         ds1820_present();
               ds1820_write_byte(SKIPROM);
         ds1820_write_byte(READSCRATCH);
         conv=0;
           for(i=0;i<9;i++)
            {
             buffer[i] = ds1820_read_byte();
         }//end for

         temp = ((buffer[0]>>4)+ ((buffer[1]&0x07)<<4));
          temp_10=(buffer[0]&0x0F)*10/16;
         temp_ist=((float)temp+(float)temp_10/10);
           if(buffer[1]&0xF0)
               {
       temp_sign='-';
       temp_ist=temp_ist*(-1);
               }
               else
               {
       temp_sign=' ';
               }
     }//end if
      }
      else
      {
    DS_present=0;
    prg=prg_stoerung;
      }//end if
}//end if(!timer_DS1820)

MfG unti

von xxx (Gast)


Lesenswert?

@Stefan Untner

Soviel ich noch weiss, müüstest bei
ds1820_write_byte(CONVERT); mindestens etwas mehr als 700ms warten.

Schau mal ins Datenblatt.

Eigendlicht dürfte es keine Probleme machen. D.h.
bei der Versorgung +- und Datenleitung.

Stefan Untner schrieb:
> Ich habe meinen DS18B20 in ein Aluminiumgehäuse eingegossen und mit
> einer dreipoligen Steuerleutung verbunden. Wenn ich den DS18B20 an den
> PIC anschließe funktioniert er einwandfrei.

Ahha!

> Verlängere ich das Kabel mit
> einem zweipoligen Kabel + Abschirmung funktioniert er nicht mehr
Soso!

>(die
> zwei Leitungen sind für Plus und Datenleitung, die Abschirmung ist für
> Minus). An was kann das leigen??
D.h. also, als erstes hast due  +- und Datenleitung angeschlossen.

zweitens, als du auf zweipoligen Kabel, umgeschwitcht bist, vergessen 
das sowas im Parasitären betrieb laufen lassen solltest.

von xxx (Gast)


Lesenswert?

Nachtrag!
Über einen Schirm als Minus zu benutzen ist ein NOGO!
Schirm soll doch EMV Strahlung minimieren bzw. eleminieren. Duck und 
weg.

von (prx) A. K. (prx)


Lesenswert?

1-Wire ist ein Open Drain Bus. Wenn das Device nicht parasitär versorgt 
wird, dann sollte der Bus nicht aktiv auf 1 gezogen werden. Dafür ist 
der Widerstand zuständig. Wenn der Controller also nicht ausdrücklich 
Ports mit Open Drain Eigenschaft implementiert (oder so gut wie, bei den 
8051), dann sollte es nur 2 Zustände geben:
   output low
und
   input
nie aber
   output high
Etwas wie
   output_high(DS1820_DATA);
ist also fehl am Platz. Ausnahme: parsitäre Versorgung in der Messphase.

Je nach Tempo des Controllers scheint mir das Timing in 
ds1820_write_byte etwas knackig dimensioniert zu sein. 10µs low plus 
etwas Code plus lange Leitung mit deutlich rise time ist bei 15µs max 
auf der knappen Seite. 1µs low reicht, weshalb 10µs?

von (prx) A. K. (prx)


Lesenswert?

xxx schrieb:
> Duck und weg.

Man kann 1-Wire zwar auch mit grossem Bahnhof und CAT7 Kabel betreiben, 
aber wenn die Umgebung EMV-mässig nicht zu schlimm ist, dann ist der Bus 
nicht allzu pingelig. Und man kann dann ein geschirmtes Kabel an Stelle 
einer ungeschirmten 3-polig Steuerleitung betreiben.

: Bearbeitet durch User
von xxx (Gast)


Lesenswert?

A. K. schrieb:
> Und man kann dann ein geschirmtes Kabel an Stelle
> einer ungeschirmten 3-polig Steuerleitung betreiben.

Als nächtes wird noch behauptet, dass sowas auch für ne Erdung (PE) 
benutzt werden kann.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.