Forum: Mikrocontroller und Digitale Elektronik DS18B20 Dezimalwert berechnen


von mag (Gast)


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.

von Bernadette (Gast)


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.

von Wolfgang S. (wsm)


Lesenswert?

Kannst du mal deinen ganzen Code hier reinstellen ?

Gruß

Wolf

von spess53 (Gast)


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

von mag (Gast)


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

von mag (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch ein Bild aus dem Datenblatt.

von KramerGegenKramer (Gast)


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?

von mag (Gast)


Angehängte Dateien:

Lesenswert?

Na gut, der Code stammt aus diesem Threat. Angehängt ist meine 
Veränderte Version die mit 8MHz läuft.

Das Datenblatt gibts hier:

http://datasheets.maxim-ic.com/en/ds/DS18B20.pdf

von mag (Gast)


Lesenswert?


von spess53 (Gast)


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

von mag (Gast)


Lesenswert?

Danke spess53 das hat mich weitergebracht, nun scheint die sache zu 
funktionieren

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.