Forum: Mikrocontroller und Digitale Elektronik DS18S20 Atmega8 zeigt immer 85°


von C. A. (james_cole)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich komme nicht mehr weiter mit meinem DS18S20.
Natürlich habe ich schon die Foreneinträge und auch google bemüht, 
leider ohne Erfolg.

Zum Problem:
Ich benutze die Lib von Stefan Sicklinger. Zuerst habe ich mir nur 
einige Funktionen rausgepickt und sie benutzt. Nachdem das nicht 
funktioniert hat habe ich jetzt einfach das gesamte Projekt genommen mit 
den selben Ergebnissen.
Mein Sensor liefert mir ständig 85°(laut DB der Ursprungswert im 
Sensorspeicher).
Auf den beiden Screenshots vom Oszi sieht man die Kommandos auf dem 
OneWire Interface.
zuerst der Reset Pulse...der Sensor reagiert. Danach die Kommandos 0xCC 
und 0x44. Skip ROM und start Temp Convert. Daraufhin sollte der Sensor 
solange "0" senden bis er mit der Messung fertig ist(laut DB ca. 750ms).
Aber schon nach 100us kommt die "1" übers Interface was heißen würde der 
Sensor ist fertig.
Im zweiten Bild sind der Reset Pulse und die Kommandos zum auslesen 
zusehen woraufhin der Sensor die Daten aus dem Speicher ausgibt.

Und wie gesagt immer 85°. meine Vermutung ist, dass der Sensor nicht 
fertig wird mit der Messung und trotzdem die "1" sendet. Aber ich weiß 
nicht wieso und hoffe hier kann mir jemand weiterhelfen.

Für die Mühe schonmal vielen Dank...

von g457 (Gast)


Lesenswert?

Wie versorgst Du den DS1820? Parasitär oder extern?

von C. A. (james_cole)


Lesenswert?

Oh ja...noch nen paar Infos....

Die Spannungsversorgung ist extern und ich habe das ganze angeschlossen 
über nen Pollin Evaluation und AddOn Board. Wenn ich also Leiterbahnen 
und Verbindungskabel etc mit einrechne habe ich ne Leitungslänge von ca. 
20cm bis zum uc und ca. 5cm zur Spannung.
Die Datenleitung habe ich mit nem 4k7 Pullup versehen. Ich hatte aber 
ohne den Pullup die gleichen Ergebnisse. Einziger Unterschied war, dass 
die Bits nicht soooo sauber rüberkamen. Man konnte also auf dem Oszi ne 
leichte Ladekurve sehen.

Ich hab den Sensor auch schonmal ausgelesen wegen der Versorgung und die 
Antwort war Externe Versorgung.

von Thomas R. (Gast)


Lesenswert?

IRQs sind ausgeschaltet?

von C. A. (james_cole)


Angehängte Dateien:

Lesenswert?

Interrupts habe ich gar keine Im Programm.
Hier nochmal der wesentliche Teil des Programms.

Es handelt wie gesagt um die Lib von Stefan Sicklinger. Ich habe nur in 
dem Teil wo die Temperatur ausgelesen wird im nachhinein ne LCD Ausgabe 
gemacht um zu sehen was er wirklich liest...

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

C. A. schrieb:
> Mein Sensor liefert mir ständig 85°(laut DB der Ursprungswert im
> Sensorspeicher).

Hast Du auch die Messung ausgelöst ?

von C. A. (james_cole)


Lesenswert?

jup...

von Thomas R. (Gast)


Lesenswert?

Wenn während der Conversation die Versorgungspannung einbricht, liefern 
die DS18x20 immer 85°. Probier mal ein Abblock-C direkt an der 
Sensor-Versorgung.

Ich betreibe 8 Stück DS18x20 an einem 20m langen Kabel.
Wegen der Kabelkapazität war da ein kleinerer Pull-Up (ich glaube 1 
kOhm??) erforderlich.

von C. A. (james_cole)


Lesenswert?

Ich hab mir die Spannung vährend des auslesens mal auf´m zweiten Kanal 
angesehen. An der Stelle wo der Sensor anfängt zu messen und die "0" 
liefert bis zum Übergang zur "1" also Messung beendet ist die Spannung 
sauber.
Hinterher beim auslesen bricht sie ab und zu mal ein. Aber auch nur für 
2us und auf 4,4V.
Der Spannungseinbruch sollte dem Sensor nichts ausmachen!?!?!?!?
Ist übrigens mit und ohne C das gleiche.

Der Pullup sollte auch völlig reichen, denn die Bits kommen ja sauber 
rüber und mit den internen die doppelt so groß sind ging die Übertragung 
ja auch.

@Thomas:
Ich hab nen 100nF direkt am Sensor angeschlossen zwischen VCC und GND.
Oder meintest du was anderes???

von Thomas R. (Gast)


Lesenswert?

Mein letztes AVR/DS18x20-Projekt ist schon ziemlich lange her und ich 
habe keine Lust, die von dir angeführte Lib zu checken ;-)
Damals habe ich die Lib vom M.Thomas verwendet:
Beitrag "AVR-Ctrl DS18S20 Thermometer"

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Es sieht ja so aus, als würde die Messung nicht durchgeführt.

Ich würde da ein Scope anklemmen und alle Kommandos noch mal
genau überprüfen. Auch die Reihenfolge der Sequenzen noch mal
genau checken. Im Datenblatt ist das genau beschrieben.

von Thomas R. (Gast)


Lesenswert?

...deinen Code habe ich nicht genauestens gecheckt, aber vor einem 
"read" muss sowas wie "start_meas" erfolgen:
Hier in der Anwendung der Lib von M.Thomas:


if ( DS18X20_start_meas( DS18X20_POWER_PARASITE, NULL )

      == DS18X20_OK) {
      delay_ms(DS18B20_TCONV_12BIT);

      // read and show temparture
      familycode = DS18S20_ID; // for conversion routine
      if ( DS18X20_read_meas_single( familycode, &subzero,
          &cel, &cel_frac_bits) == DS18X20_OK ) {
        lcd_put_temp(subzero, cel, cel_frac_bits);
      }
      else
      {
        lcd_gotoxy(0,1);
        lcd_puts("CRC Error");
      }
    }
    else
    {
      lcd_gotoxy(0,1);
      lcd_puts("Start meas. fail");
    }

    delay_ms(1000);
  }

von C. A. (james_cole)


Lesenswert?

Die Signale hab ich mir schon angesehen. Zu sehen in den beiden Bildern 
ganz am Anfang. Der letzte Peak im ersten ist auch der erste Peak im 
zweiten Bild.

Aber ich kann kein Fehler finden. Ich glaube auch nicht das es daran 
liegt denn andere Kommandos wie auslesen des Speichers funktionieren ja 
auch.

Für mich sieht es allerdings auch so aus als würde die Messung entweder 
nicht gestartet oder abgebrochen....

von C. A. (james_cole)


Lesenswert?

Ja ich weiß. Das ist ja auch alles im Code drin. Erst Reset dann Skip 
Rom dann Start Messung dann warten bis Messung fertig dann wieder 
Reset-Skip Rom und auslesen.

Ich kann mir auch nicht vorstellen das in der Lib nen Fehler ist, denn 
sie hat ja bei anderen Funktioniert.
Ein Problem mit der Taktrate kanns auch nicht sein, denn auf dem Oszi 
sieht man ja die Zeiten laut DB....mh, ich kapiers nicht.

von Lutz (Gast)


Lesenswert?

C. A. schrieb:
> Daraufhin sollte der Sensor
> solange "0" senden bis er mit der Messung fertig ist(laut DB ca. 750ms).
> Aber schon nach 100us kommt die "1" übers Interface was heißen würde der
> Sensor ist fertig.

Ich hatte das mit dem Pollen letztes Jahr auch mal probiert; hat auch 
gleich wunderbar nicht funktioniert. Da ich aber sowieso nur ein mal pro 
Minute gemessen habe, habe ich es einfach nicht weiter verfolgt und 
einfach nach 1
Sekunde ausgelesen.
Was kommt denn bei dir raus, wenn du einfach statt zu Polen z.B. 800 ms 
wartest?
Ohne den Code jetzt durchgesehen zu haben, aber die Conversion Time ist 
ja abhängig von der gewählten Auflösung. Dann unterscheiden sich auch 
die auszuwertenden bits.

von C. A. (james_cole)


Lesenswert?

Das hatte ich auch schon probiert. Das pollen hab ich rausgenommen und 
zwischen 100ms und 10s hab ich ne ganze Reihe von Wartezeiten probiert.
Auf dem Oszi konnte ich dann sehen, dass wieder einige nullen kommen und 
den Rest der Zeit nur noch einsen.

von C. A. (james_cole)


Lesenswert?

Hey Leute,

erstmal vielen Dank an alle die sich hier so bemüht haben.
Ich hab jetzt ne funktionierende Version.
Ich hab mir das Projekt von Thomas genommen (ganz vielen Dank 
dafür!!!!!) und für meine Schaltung angepasst und schon funktionierts.
Ich weiß nur noch nicht warum.
Wenn ich noch Lust und Zeit habe das herauszufinden werde ichs 
posten....schönen Abend noch.

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

C. A. schrieb:
> Ich weiß nur noch nicht warum.

Oha, da würde ich aber nachhaken ... :)

von Thomas R. (Gast)


Lesenswert?

Na also, ist es wohl doch ein SW-Problem.
Bei mir läuft die Lib von Martin Thomas mit 8 Sensoren an 20 m Kabel nun 
schon 3 Jahre. Dabei werden die Sensoren etwa alle 10 Sekunden 
abgefragt.
Ich habe auch gaaaanz selten ( vielleicht 20 mal/yr ) das 85°-Problem.
Ich führe das auf EMV-Probleme wegen der langen Kabel zurück - 
Blitzeinschläge in der Nähe und Hochstromschaltspitzen aus dem Netz?
Noch ein Tipp, wenn du lange Kabel verwenden willst:
Dann empfielt es sich, statt des Pull-Up-Widerstandes eine 
Konstantstromquelle von 2...3mA einzusetzen.

von F. F. (foldi)


Lesenswert?

C. A. schrieb:
> Hey Leute,
>
> erstmal vielen Dank an alle die sich hier so bemüht haben.
> Ich hab jetzt ne funktionierende Version.
> Ich hab mir das Projekt von Thomas genommen (ganz vielen Dank
> dafür!!!!!) und für meine Schaltung angepasst und schon funktionierts.
> Ich weiß nur noch nicht warum.
> Wenn ich noch Lust und Zeit habe das herauszufinden werde ichs
> posten....schönen Abend noch.

Für den Arduino gibt es da auch was, falls es dich interessiert.
Funktioniert ganz prima.
Da ich nun den DHT11 benutze, wegen der zusätzlichen Luftfeuchte, hab 
ich da nicht mehr weiter gemacht.
Aber noch einen Hinweis, wenn ich das noch richtig im Kopf habe, bei 
langen Leitungslängen und vielen Sensoren empfehlen die laut Datenblatt 
dringend den ParasiteMode zu nehmen.

Frank

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.