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.
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.
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
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
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
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
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
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
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
th+tl sind eine ganz normale 16bit integer! die Temperatur ist aber diesen integerwert * 0,0625°C. Marc
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.