DS18B20 wie geht man mit den Minusgraden um?

#6472452
Lesenswert?
• ▲
▼
Franz Müller schrieb:
> Hallo,
>
> beim DS18B20 liegen die Minusgrade ja zwischen 64656 und 65528 wie
> wandle ich diese Werte in Dezimalwerte am besten um?

Die Werte liegen als Zweierkomplement vor. Da muss man gar nichts 
umrechnen wenns um Negative geht (für den Wert in °C schon).
In C kann der Wert direkt in eine signed Variable.
Evt. mal den Wikiartikel zu Zweierkomplement lesen.

https://de.wikipedia.org/wiki/Zweierkomplemen

> In Bascom.
Bascom hat sicher auch einen passenden signed typ.
Gast #6473430
Lesenswert?
• ▲
▼
Schön - und wie macht man es Deiner Meinung nach richtig?

Einfach "STR(Sensorwert)" schreiben, weil die BASCOM-Funktion STR 
(Integer-zu-String-Konvertierung) schließlich das Zweierkomplement 
versteht? Das funktioniert hier leider nicht, denn dem Sensorwert 65535 
= 0xFFFF ist nicht die Temperatur "-1 °C" zugeordnet. Wenn der DS18B20 
mit 12-bit conversion resolution (*) läuft, ändert sich der Sensorwert 
nicht um 1, sondern um 16 pro Ein-Grad-Celsius-Temperaturänderung. Der 
-1 °C repräsentierende Sensorwert ist deshalb 65520 = 0xFFF0.

Weil nun aber "STR(Sensorwert/16)" auch nicht funktioniert, würde mich 
interessieren, wie Deine Lösung aussieht.

__________________
(*) was er höchstwahrscheinlich tut, denn die entsprechende Tabelle im 
DB passt zu den vom TO angegebenen Werten. Außerdem ist es die 
Default-Einstellung.
Gast #6473471
Lesenswert?
• ▲
▼
"Falls man einen schweren Hirnschaden hat: JA! "
Lol, und das schreibt offenbar einer dieser...

Denn eine Auflösung gibt es nicht, die korrekte Bezeichnung solcher 
Menschen lautet Laberkopp
Gast #6473579
Lesenswert?
• ▲
▼
>Warum sollte das nicht gehen?

Du hast recht, hier war ich im Irrtum. Das funktioniert - zu dem Preis, 
dass die Division Sensorwert/16 in Fließkommaarithmetik gerechnet werden 
muss. Die Nachteile (Flash-Speicher, Rechenzeit) sind hinlänglich 
bekannt, aber vielleicht wird die Funktion sowieso gebraucht, dann 
relativiert sich das.

Meine Lösung wäre übrigens, 10·Sensorwert zu berechnen, anschließend 
einen Rechtsshift um 4 Stellen auszuführen und vom Ergebnis die 
Hunderter-, Zehner- und Einerstelle zu berechnen. Kann man z. B. per 
sukzessiver Subtraktion mit zuerst 100 und in der zweiten Stufe mit 10 
machen. Für positive Temperaturen ist das schon alles (korrekte Rundung 
auf eine Nachkommastelle inklusive!). Ist das MSB des Sensorwertes 
gesetzt, liegt eine negative Temperatur vor (z. B. -4.5 °C --> 0xFFB8). 
Dann vom Sensorwert das Einerkomplement bilden, 1 addieren und weiter 
wie oben (plus natürlich ein '-' im Display anzeigen).

So würde es ohne FP-Arithmetik gehen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.