Forum: Mikrocontroller und Digitale Elektronik DS1820 liefert nur Müll


von Ronald E. (ronald_1)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich versuche gerade einen DS1820 Temperatursensor zu betreiben, und das 
Ergebnis über ein Display auszugeben. Nun es scheint alles zu 
funktionieren, außer, dass ein falscher Wert ausgegeben wird (nämlich 
3.0625°C). Ich betreibe alles auf eimen myAVR mk2. Die Datenleitung 
liegt an PortC Pin0.
Code und Schaltung befinden sich im Anhang. Evt. hat mal jemand ein 
Bisschen Zeit um drüberzuschaun.
Danke für eure Hilfe.

MfG Ronald

von Alex W. (a20q90)


Lesenswert?

Ich glaube das die Quelltexte für den DS18S20 sind, und bei einem DS1820 
nicht laufen. Zudem war da nicht mal mit dem 1820 irgend ein Problem, 
das dieser vom "S" abgelöst wurde?

von H.Joachim S. (crazyhorse)


Lesenswert?

zufällig der Faktor 8 zwischen Ist- und Ausgabewert?

von Ronald E. (ronald_1)


Lesenswert?

Alex W. schrieb:
> Ich glaube das die Quelltexte für den DS18S20 sind, und bei einem DS1820
> nicht laufen. Zudem war da nicht mal mit dem 1820 irgend ein Problem,
> das dieser vom "S" abgelöst wurde?

Laut Conrad sind die gleich:

"TEMPERATURSENSOR DS1820 = DS18S20"

>zufällig der Faktor 8 zwischen Ist- und Ausgabewert?

Kann sein ja! Aber wie kommts dazu? Jetzt brauch ich mal ein Thermometer 
zum checken.

MfG

von Ronald E. (ronald_1)


Lesenswert?

Hallo,

also ich habs jetzt mal mit x8 probiert, und es scheint ziehmlich gut zu 
passen. trotzdem check ich nicht ganz warum das so ist.

MfG Ronald

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Steht eventuell auf dem Sensor DS18B20 drauf?
Der hat ein anderes Datenformat - drei Nachkomma-Bits mehr (= x8).

von Ronald E. (ronald_1)


Lesenswert?

Der genau Text:

DALLAS
DS1820
0938C3
+028AE

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Hast Du den ROM Code des Sensors ausgelesen?

Moment:
Ich glaube, ich habe etwas Mist erzählt.
Du hast wohl doch einen DS1820 bzs DS18S20. Das Programm ist für DS18B20 
gedacht und rechnet die Daten falsch um.

Ja, im Code steht
1
//Store temperature integer digits and decimal digits
2
  digit=temperature[0]>>4;
Für DS1820/DS18S20 müsste statt 4, eine 1 stehen. Damit werden dann alle 
Nachkommastellen weggeworfen.

von Ronald E. (ronald_1)


Lesenswert?

also, hab mal auf
1
//Store temperature integer digits and decimal digits
2
digit=temperature[0]>>1;
3
digit|=(temperature[1]&0x7)<<1;

umgeändert, und auch das x8 wieder entfernt. Es scheint auch zu 
funktionieren, aber die Nachkommastellen (4 und 5te) sind nicht 0.

ps. vielen Dank Christian

von Ronald E. (ronald_1)


Angehängte Dateien:

Lesenswert?

So,

im Anhang nochmal die Richtige Methode, um die Temperatur (Siehe auch 
Datenblatt) auszulesen.

MfG Ronald

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Ronald E. schrieb:
> umgeändert, und auch das x8 wieder entfernt. Es scheint auch zu
> funktionieren,
Klar, ein A >> 4 * 8 ist gleicht A >>1, weil A*8 = A<<3.

>aber die Nachkommastellen (4 und 5te) sind nicht 0.
Klar, der erste Code ist ja auch für einen DS18B20 gedacht und arbeitet 
mit einem DS1820 nicht korrekt.

Aber das hast Du ja bereits im zweiten Code korrigiert.

von eProfi (Gast)


Lesenswert?

Hier kompakter Code (200 Byte Flash), der aus dem DS18(S/B)20-Scratchpad 
12 Bit Auflösung berechnet und in druckbare Zeichen mit 2 
Nachkommastellen umwandelt:
Beitrag "DS18S20 - extended resolution bei Temperaturen um 0°C"

das o.g. temp.h gibt nur 9 Bit aus.
Übrigens: Code gehört nicht in ein h-File, sondern in ein c-File.

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.