DS18B20

Gast #50345
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.
Gast #50346
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.
Gast #50347
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
Gast #50350
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
Gast #50352
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
Gast #50353
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren