DS1820 Temperaturmessung Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte
Autor |
|
|
|
BID = 25981
Benedikt Inventar
Beiträge: 6241
|
|
Der DS1820 ist ein Temperatursensor mit nur 2 Leitungen, was bereits das erste Problem darstellte, da das Datenblatt alles andere als anschaulich ist.
Die Temperatur steht als 7bit Wert (0 bis 128) + Vozeichen bit + 0,5° bit zur Verfügung.
Zusätzlich habe ich noch zwei weitere 8bit Werte:
COUNT_PER_C und COUNT_REMAIN
Um die Temperatur auf 0,1° genau bestimmen zu können, muss ich folgende Rechenoperation durchführen:
fertige Temperatur= gelesende Temperatur + (COUNT_PER_C – COUNT_REMAIN)/COUNT_PER_C - 0,25
Und dies bekomme ich einfach nicht hin.
Das Problem sind die Kommastellen und die dummen -0,25
Ich habe einige Programme die teilweise funktionieren, nur manchmal bekomme ich dann sowas wie 25,/°C. Das ist dann der Fall, wenn durch Rundungsungenauigkeiten und sonstige Fehler mehr als 9 für die Nachkommastelle errechnet werden.
Als Mikrocontroller verwende ich einen AT89C51RC, also 8051 kompatibel.
|
|
BID = 25989
perl Ehrenmitglied
Beiträge: 11110,1 Wohnort: Rheinbach
|
|
Zitat :
| ...Um die Temperatur auf 0,1° genau bestimmen zu können... |
Das wird nichts werden:
Der DS1820 hat nur eine Auflösung von 0,5°C, die Genauigkeit ist im Bereich 0..70°C auch nur 0,5°C. Außerhalb dieses Temperaturbereichs ist die Genauigkeit noch schlechter.
Zitat :
| ...Das Problem sind die Kommastellen und die dummen -0,25... |
Multipliziere die Gleichung mit 4, dann heißt sie:
4*fertige_Temperatur= 4*(gelesende_Temperatur + (COUNT_PER_C – COUNT_REMAIN)/COUNT_PER_C) -1
1 subtrahieren geht ganz gut.
Die Multiplikation geht auch ganz flott, wenn Du das Zwischenergebnis 2 mal nach links schiebts und dabei aufs Vorzeichen aufpasst.
Abschließend 2mal arithmetisch nach rechts schieben.
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten ! |
|
BID = 25992
Benedikt Inventar
Beiträge: 6241
|
Es stimmt schon, dass der DS1820 nur 0,5° Genauigkeit hat, aber wenn er in 0,5° Schritten springt, dann ist er ungenauer, als wenn er in kleineren Schritten anzeigt. Sieht zumindest besser aus.
Mein Hauptproblem ist folgender Bereich:
COUNT_PER_C – COUNT_REMAIN)/COUNT_PER_C)
COUNT_PER_C ist größer oder gleich COUNT_REMAIN. Deshalb erhält man einen Wert <1. Dieses wird zu 0 abgeschnitten.
Ich bräuchte aber die erste Nachkommestelle, habe aber keine Ahnung wie ich die Berechnen soll.
|
BID = 26007
perl Ehrenmitglied
Beiträge: 11110,1 Wohnort: Rheinbach
|
Zitat :
| ...COUNT_PER_C – COUNT_REMAIN)/COUNT_PER_C) ... |
Wenn Du bei Integer-Arithmetik bleiben willst oder mußt, kannst Du den Zähler mit einem festen Faktor multiplizieren, dann werden die Nachkommastellen des Ergebnisses zu Vorkommastellen.
Multiplikatoren welche Potenzen von 2 sind, eigenen sich besonders gut, weil man die am Ende notwendige Korrektur-Division dann einfach als Schiebeoperation erledigen kann.
Im Falle von 2 8 = 256 kannst Du die Multiplikation durch Voranstellen eines Byte, das mit dem Vorzeichen gefüllt ist, erledigen, die Division, indem Du einfach das letzte Byte des Ergebnisses wegwirfst.
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 19 Beiträge im Durchschnitt pro Tag heute wurden bisher 0 Beiträge verfasst © x sparkkelsputz Besucher : 182416046 Heute : 543 Gestern : 7490 Online : 402 28.11.2024 6:50 2 Besucher in den letzten 60 Sekunden alle 30.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.044606924057
|