ds18b20 ausgabe in temeratur umwandeln

Gast #3955770
Lesenswert?

Hallo, ich habe ein Problem.
Bei folgendem Programm was ich zugegeben noch nicht ganz verstehe 
(zusammenkopiert)
1
$regfile = "m8def.dat"
2
$crystal = 16000000
3
$baud = 2400
4
$hwstack = 100
5
$swstack = 100
6

7
Config 1wire = Portc.5
8

9
Dim Sep(9) As Byte
10
Dim Ar(8) As Byte
11
Dim I As Byte
12
1wreset
13
1wwrite &H33                                        ' ROM-Befehl zum lesen der SerienNr
14
Ar(1) = 1wread(8)                                   ' 8 Bytes lesen, beschreibt Ar(1) bis Ar(8)
15

16
For I = 1 To 8
17
    Print Hex(ar(i));                               ' Ausgeben
18
    Print " ";
19
Next
20

21
Print
22

23
Wait 1
24

25

26
  Do
27
    1wverify Ar(1)                                 ' Gerät mit der SerienNr. aus Ar() auswählen
28
    ' Gerät vorhanden
29
    If Err = 0 Then
30

31
        1wwrite &H44                               ' Temperaturmessung anstoßen
32

33
        Waitms 500                                 ' warten bis Messung fertig
34

35
        1wverify Ar(1)                             ' Gerät mit der SerienNr. aus Ar(1)...Ar(8) auswählen
36
        1wwrite &HBE                               ' Temperatur auslesen
37
        Sep(1) = 1wread(9)                          ' Daten in ein Array lesen, beschreibt Sep(1) bis Sep(9)
38

39
        For I = 1 To 9
40
            Print Hex(sep(i));
41
        Next
42
        Print
43

44
        ' Nur für die Temperatur wichtige Daten ausgeben
45
        Print Hex(sep(2));
46
        Print Hex(sep(1))
47
        '  High und Low-Byte, nach Datenblatt zusammen setzen und berechnen...
48
    Else
49
        Print "Fehler"
50
    End If
51

52
    Wait 1
53
     Loop
54
End

bekomme ich diese ausgabe : siehe Bild

Die Frage ist jetzt wie mach ich daraus eine Temeratur? Ich bin Anfänger 
sorry das ich so doof frage..

Danke
MfG Pascal
Angehängte Dateien:
Gast #3955855
Lesenswert?

schau ins Datenblatt und lass dir mal auf der Zunge zergehen wie was 
zusammengesetzt ist.

Die 1te Zeile ist die Adresse des Sensors, die 2te Zeile ist der Ganze 
Kommunikationskram wobei eigentlich nur die ersten 2 byte wichtig wären 
und diese sind durch 16 zu teilen.
3te Zeile sind die ersten 2byte der 2ten Zeile nur andersrum dargestellt

016A (hex) = 362(dez) / 16 = 22,625°C
Gast #3955885
Lesenswert?

pascal schrieb:
> das datenblatt hab ich mir angeshaut,aber nicht verstanden.... gibts da
> zufällig ein beispielcode der funktioniert?

du hast doch alles was du brauchst schon in der Ausgabe drine nur das du 
zuviel ausgibst und eine Division durch 16 wirst du wohl hinbekommen, 
abspeichern und nur die Temps ausgeben.

Programmieren ist mehr als nur Code zusammzufügen.
Gast #3955904
Lesenswert?

1
$regfile = "m8def.dat"
2
$crystal = 16000000
3
$baud = 2400
4
$hwstack = 100
5
$swstack = 100
6

7
Config 1wire = Portc.5
8
 Dim Tempdata(9) As Byte
9
 Dim Temperature As Integer
10
Do
11
  1wreset
12
  1wwrite &HCC
13
  1wwrite &H44
14
  Waitms 750
15
    1wreset
16
1wwrite &HCC
17
1wwrite &HBE
18
 Tempdata(1) = 1wread(9)
19
 If Tempdata(9) = Crc8(tempdata(1) , 8) Then
20
Temperature = Makeint(tempdata(1) , tempdata(2))
21

22
Temperature = temperature / 16
23
  Print Temperature
24
End If
25

26
Loop
27

28
End

so geht es ... trotzdem danke

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