'zusammen,
ich versuche, einen DS1820 am ATMEGA8 auszulesen. Das Listing habe ich
mal aus dem BASCOM-AVR-Buch von C. Kühnel übernommen, was mich ja
eigentlich vermuten ließ, dass es funzt, tuts aber net ;))
Habe die anderen Threads zum Thema auch schonmal gelesen, allerdings
nichts was die Lösung herbeiführte.
Schaltung ist im Anhang; da ich also den DS1820 selber mit 5V versorge
habe ich alles, was ParasitePower betrifft, rausgenommen.
EDIT: Leider kann ich den Anhang nicht mehr editieren. Es gibt noch ne
Verbindung zwischen 1-Wire-Bus und +5V über 4,7 kOhm Widerstand, in der
Skizze leider vergessen einzuzeichnen!
Als Rückgabe ins LCD-Display kommen aber immer nur 65535 Counts und
dementsprechend 0°C bzw. -0,25°C. Hier der Code, vielleicht sieht ja
jemand auf Anhieb meinen Fehler.
1 | $regfile = "m8def.dat"
|
2 | $crystal = 16000000
|
3 | Config Lcd = 20 * 2
|
4 | Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portb.5
|
5 | Config 1wire = Portb.0
|
6 |
|
7 | Const Ds1920 = &H10
|
8 | Const Skiprom = &HCC
|
9 | Const Read_rom = &H33
|
10 | Const Convertt = &H44
|
11 | Const Read_ram = &HBE
|
12 | Const Write_ram = &H4E
|
13 | Const Copy_ram = &H48
|
14 | Const Recall_ee = &HB8
|
15 | Const Read_power = &HB4
|
16 |
|
17 | Dim Family_code As Byte
|
18 | Dim Serial_number(6) As Byte
|
19 | Dim Crc As Byte
|
20 | Dim Scratch(9) As Byte
|
21 |
|
22 | Dim I As Byte
|
23 | Dim Temp As Word
|
24 | Dim Temp1 As Integer
|
25 | Dim Stemp As Single
|
26 |
|
27 |
|
28 | Do
|
29 | 1wreset
|
30 | 1wwrite Read_rom
|
31 | Family_code = 1wread()
|
32 | For I = 1 To 6
|
33 | Serial_number(i) = 1wread()
|
34 | Next
|
35 | Crc = 1wread()
|
36 | 1wwrite Convertt
|
37 | Do
|
38 | Temp = 1wread()
|
39 | Loop Until Temp = &HFF
|
40 |
|
41 | 1wreset
|
42 | 1wwrite Skiprom
|
43 | 1wwrite Read_ram
|
44 |
|
45 | For I = 1 To 9
|
46 | Scratch(i) = 1wread()
|
47 | Next
|
48 |
|
49 | Temp = Scratch(2)
|
50 | Shift Temp , Left , 8
|
51 |
|
52 | Temp = Temp + Scratch(1)
|
53 | Temp1 = Temp
|
54 | Temp1 = Temp1 / 2
|
55 | Stemp = Scratch(8) - Scratch(7)
|
56 | Stemp = Stemp / Scratch(8)
|
57 | Stemp = Stemp + Temp1
|
58 | Stemp = Stemp - 0.25
|
59 |
|
60 |
|
61 | Cls
|
62 | Upperline
|
63 | Lcd "Counts: " ; Temp ; " (" ; Temp1 ; " Grad C)"
|
64 | Lowerline
|
65 | Lcd "exakt " ; Fusing(stemp , "#.##") ; " Grad C"
|
66 | Cursor Off
|
67 | Wait 2
|
68 |
|
69 | Loop
|
70 |
|
71 | End
|
Bedank, Michael