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

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.