Forum: Mikrocontroller und Digitale Elektronik ds18b20 ausgabe in temeratur umwandeln


von pascal (Gast)


Angehängte Dateien:

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

von chris (Gast)


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

von pascal (Gast)


Lesenswert?

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

von chris (Gast)


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.

von pascal (Gast)


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

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.