Forum: Mikrocontroller und Digitale Elektronik DS18B20


von Martin Fritz (Gast)


Lesenswert?

Ich habe die ersten Versuche mit einem DS18B20 gemacht. Das Auslesen der
Temperatur klappt auch einwandfrei. Ich habe nur ein Problem mit der
Umwandlung der beiden Temperaturegister TH und TL in einen BCD-Code,
damit man die Temperatur an einer 7-Segment-Anzeige anzeigen kann.

von Marc Donner (Gast)


Lesenswert?

1. Welche Auflösung stellst du dir vor ?
2. 16 od 8Bit prozessor
3. und wo genau hast du das Problem beim auslesen od. beim umwandeln?
TH und TL zusammen sind ein ganz einfacher Integerwert mit vorzeichen.

von Martin Fritz (Gast)


Lesenswert?

Hallo Marc,

ich suche nach einer Routine, die den 16Bit-Temperaturwert (TH und TL),
der vom DS18B20 ausgegeben wird, in einen 16Bit-BCD-Wert (4 Zeichen)
umwandelt, damit ich damit über BCD zu 7-Segmentdecoder (4511 o.ä.) die
Temperatur über eine Anzeige ansteuern kann. Ich verwende einen
AT90S8515 und will über zwei 8-Bit-Ports 4 Decoder-ICs ansteuern.

In den Datenblättern habe ich zur Umrechnung die verschiedensten
Formeln und auch hochkomplizierte Beispielprogramme gefunden, aber
irgendwie klappt das nicht so richtig.

Gruß, Martin

von Edgar (Gast)


Lesenswert?

Hallo Martin,

bei Atmel gibt's eine AppNote zu BCD
http://www.atmel.com/dyn/resources/prod_documents/doc0938.pdf
mit Software in Assembler.

Edgar

von Martin Fritz (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Edgar,

dein Datenblatt bezieht sich auf die normale binär zu BCD Umwandlung.
Aber was aus dem DS18B20 kommt ist keine normale Binärzahl. Ich hab das
Datenblatt vom DS18B20 mal angehängt (Tabelle2 Seite3).

Gruß, Martin

von Edgar (Gast)



Lesenswert?

Martin,

ok, jetzt habe ich verstanden.
Ich habe das in BasCom mal gemacht, den Code aber zuhause ;-(
Aber: es gibt von Dallas eine AppNote (ich weiß, schon wieder ...), die
auch ein C-Beispiel enthält. Soweit ich weiß, war mein BasCom-Programm
daran angelehnt ...
AppNote ist im Anhang.

Welche Sprache verwendest Du?

Gruß,
Edgar

von Marc Donner (Gast)


Lesenswert?

Wenn du die zwei bytes vom DS aneinander fügst erhältst du einen
Normalen 16Bit Integer wert. Den in 4 Dezimalen zerlegen und ausgeben.

Marc

von Martin Fritz (Gast)


Lesenswert?

Hallo Edgar,

ich verwende das AVR Studio mit Assembler. Hast Du eventuell dafür was?
Mit C kann ich nicht viel anfangen, hab mich immer gesträubt noch eine
Programmiersprache zu lernen.

Hallo Marc,

das sind keine normalen Integerwerte Z.B. ist der binäre Wert 10100010
nicht dezimal 162, sondern +10,125°C.

Gruß, Martin

von Uwe (Gast)


Lesenswert?

Hi!
Schaue dir mal die beiden Byte genau an(DS Seite 3)
Das High-Byte ist nur das Signatur-Byte (wenn>0=negativ).
Das LSB im LS-Byte zeigt den 0,5°C Schritt(1=0,5°C).
Also:
ROR TH
ROR TL ;das C-Flag zeigt jetzt an ob 0,5°C oder eben nicht
und in TL steht die ganzzahlige und signierte Temperatur in hex
die du nur noch in dez umsetzen musst.
Wenn du natürlich auf Genauigkeit machst, funktioniert das aber nicht
so einfach für reine Anzeige reicht es aber.

MFG Uwe

von Marc Donner (Gast)


Lesenswert?

th+tl sind eine ganz normale 16bit integer! die Temperatur ist aber
diesen integerwert * 0,0625°C.

Marc

von Paul Baumann (Gast)


Lesenswert?

Hallo Martin!

Ich habe ein Bascom Programm in das Codeforum gestellt.
Das macht genau so eine Umwandlung.

MfG Paul

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.