Forum: Mikrocontroller und Digitale Elektronik ATMEGA8 & DS1820 unter Bascom


von Michael M. (mima)


Angehängte Dateien:

Lesenswert?

'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

von bascom looser (Gast)


Lesenswert?

Fertigen code findeste
im  http://bascom-forum.de
ist zwar für den DS18B20 ich hoffe das hilft dir weiter

von Michael M. (mima)


Lesenswert?

Hallo,

danke, ja, Thread war sehr aufschlussreich, habe herausgefunden dass ich 
im Datenblatt das Kleingedruckte ("Bottom View") überlesen hatte und den 
DS1820 prompt verkehrt beschaltet hatte. Jetzt gibt er nur noch 
unzutreffende Werte von sich; ich glaube, die Verpolung hat ihn in den 
ewigen Elektronikhimmel geschossen hmpf, naja, Problem jedenfalls 
gelöst.

greetz,

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.