DS18B20 Dezimalwert berechnen

Gast #1531605
Lesenswert?

Hallo ich habe hier einen DS18B20 Temperatursensor.
Nun habe ich diesen soweit das ich daten von ihm Empfange. Nun wollte 
ich diese in eine Dezimalzahl umwandeln, vorerst ohne minus und 
nachstellen. Jedoch stimmt die angezeigte Temperatur nicht, woran könnte 
das liegen hier mal ein Stück code welches ich zur berechnung 
hergenommen habe.

1
Num_Ausgabe:
2

3

4

5
clr r29
6
calc:
7

8
lsl t_high
9

10
inc r29
11
cpi r29,4
12

13
brne calc
14
clr r29
15
calc1:
16
andi t_high, 0b11110000
17
andi t_low,  0b00001111
18

19
or t_high, t_low
20

21

22
mov temp1, t_high
23

24
rcall lcd_number
25
clr t_high
26
clr t_low
27
ret

Ich bin im Programmieren noch nicht so fit, deswegen bitte ich um 
nachsicht.
Gast #1531608
Lesenswert?

Die ausgelesenen Bytes beinhalten 4 binäre Nachkommastellen.

Also die Bytes um 4 Stellen nach rechts schieben. Die rausgeschobenen 
Bytes beinhalten den Nachkommateil, die verbliebenen Bytes den 
ganzzahligen Wert.

B.
Gast #1531611
Lesenswert?

Hi

Ich kenne den DS18B20 nicht. In welcher Form liegt dein Messwert in 
t_high/ t_low vor?
Was erwartet 'lcd_number'.

Übrigens lässt sich:
>clr r29
>calc:

>lsl t_high

>inc r29
>cpi r29,4

durch ein einfaches 'swap t_high' erledigen.

MfG Spess
Gast #1531615
Lesenswert?

Den ganzen code möchte ich eigentlich nicht einstellen weil er zum 
großen teil nicht von mir ist und nur von mir angepasst wurde.
Jedoch könnte folgendes noch hilfreich sein:

t_low = Zuerst ausgelesenes Byte
t_high = 2.Byte

temp1 = Ausgabe für LCD soll nur positiven Dezimalwert ohne Kommastellen
enthalten

r29 = nur temporär nicht weiter in Verwendung

Es gibt keine Interrupts

Es gibt keine CRC Überprüfung

Vlt. helfen diese Informationen weiter
Gast #1531621
Lesenswert?

mag schrieb:
> Den ganzen code möchte ich eigentlich nicht einstellen weil er ...

Damit hast du das Tischtuch zwischen der Forengemeinde und dir zerissen!

Btw: Gibts auch einen Link zum kompletten Datenblatt?
Gast #1531639
Lesenswert?

Hi

>Hier noch ein Bild aus dem Datenblatt.

Habe ich mittlerweile auch gefunden

>Den ganzen code möchte ich eigentlich nicht einstellen weil er zum
>großen teil nicht von mir ist und nur von mir angepasst wurde.

Auch verstanden?

Wenn du nur die Vorkommastellen haben willst, musst du ähnlich wie in 
deinem Programmausschnitt aus dem High-Nibble von t_low und dem 
Low-Nibble von t_high ein Byte machen.

swap t_low
swap t_high
andi t_low, $0F
andi t_high, $F0
or t_low,t_high

Den Wert musst du dann nach dezimal wandeln und an das Display ausgeben.

MfG Spess

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