Ich nutze den DS18s20 die Temperatur wird korrekt angezeigt aber nur bis
20.1 Grad alles was höher ist kommt bei mir 127 als Anzeige.
Könnte mir einer weiterhelfen was bei der Berechnung falsch ist
@ armin (Gast)
Alles reichlich komliziert. Mit ein bisschen Festkommaarithmetik
kriegt man das deutlich einfacher hin.
Beitrag "Onewire + DS18x20 Library"
Der IC liefert doch schon eine echte Zahl im Zweirkomplement, da muss
man KEINE Vorzeichenerweiterung machen! Das mit der Zusatzauflösung ist
Spielerei, wenn du einen höher auflösenden Sensor willst, nimm den
DS18B20 und gut, der kostet kaum mehr.
1
int16_ttemp,vorkomma,nachkomma;
2
3
// 2 Bytes in int16_t zusammenbauen, Temperatur in 0,5C Auflösung
4
temp=((int16_t)scratchpad[1]<<8)|scratchpad[0];
5
6
// in 0.1 C Auflösung "umrechnen"
7
temp*=5;
8
9
vorkomma=temp/10;
10
nachkomma=abs(temp)%10;
Wenn man unbedingt die erweiterte Auflösung haben will, dann so.
1
int16_ttemp,vorkomma,nachkomma;
2
3
// 2 Bytes in int16_t zusammenbauen, Temperatur in 0,5C Auflösung
4
temp=((int16_t)scratchpad[1]<<8)|scratchpad[0];
5
temp&=~1;// bit 0 loeschen
6
temp<<=3;// x8 -> Auflösung 1/16 C
7
temp=temp-4+(16-scratchpad[6]);
8
// das /16 entfällt, denn wir rechnen mit 1/16 Grad Auflöung
9
temp=(temp*640L)>>10;
10
// Erklärung: Umrechung von 1/16 Grad Auflösung in 1/10 Grad
Vielleicht vergleicht Du es einmal selbst mit den tausenden,
funktionierenden "C" Codeschnipseln im Netz.
Erst mal Hausaufgaben selbst machen.
Ferner bitte ein Schaltbild von deinem Aufbau.
Woher soll hier jemand wissen wie der angeschaltet ist?
Untersuch erst mal die HW und verzichte auf parasitäre Versorgung und
lange Leitungen.
Ein zweiter Sensor kann zum Test auch nicht schaden...
Hmm, hab gerade mal meinen Code getestet, scheint zu funktionieren, der
DS18S20 liefert 0,1C Auflösung. Aber bitte liebe Kinder immer schön den
Unterschied zwischen Auflösung und Genauigkeit beachten ;-)
Maximator schrieb:> Vielleicht vergleicht Du es einmal selbst mit den tausenden,> funktionierenden "C" Codeschnipseln im Netz.>> Erst mal Hausaufgaben selbst machen.> Ferner bitte ein Schaltbild von deinem Aufbau.> Woher soll hier jemand wissen wie der angeschaltet ist?>> Untersuch erst mal die HW und verzichte auf parasitäre Versorgung und> lange Leitungen.> Ein zweiter Sensor kann zum Test auch nicht schaden...
Die Hardware läuft die Temperratur wird ja auch richtig ausgegeben bis
20.1Grad.
Von daher ist also etwas in der Berechnung bei mir nich richtig.
Falk B. schrieb:
Wie wärs mit
> // = t(1/16C) * 10 / 16
statt
> // = t(1/16C) * 640 / 1024
weils dann in 16 Bits bleibt?
Deine Herleitung ist etwas von hinten durch die Brust ins Auge. ;-)
so im Anhang nochmal die Berechnung bis 20,2Grad gehts alles was über
20,2Grad ist wird als 127 angezeigt.
Auf meinem Sensor steht DS1820 die hab ich damals von pollin und da
stand DS18S20 mit falscher Beschriftung DS1820
@ armin (Gast)
>Das hab ich so gemacht aber über die 20Grad bekomm ich auch hier die 127>als ausgabe
Du hast möglicherweise das falsche HEX-File auf deinen Controller
geladen.
A. K. schrieb:> Tipp nebenbei: Es gibt beliebte und rare Formate. Was 7-zip nicht> verdaut bleibt bei mir meistens zu.
Dann verstehe ich deinen Kommentar nicht. 7-zip, zumindest in der schon
etwas betagten Version 9.20 hat mit der angehängten Bis_20Grad_ok.rar
keine Probleme.
armin schrieb:> so im Anhang ...