www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMEGA8 & DS1820 unter Bascom


Autor: Michael Matthes (mima)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

$regfile = "m8def.dat"
$crystal = 16000000
Config Lcd = 20 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portb.5
Config 1wire = Portb.0

Const Ds1920 = &H10
Const Skiprom = &HCC
Const Read_rom = &H33
Const Convertt = &H44
Const Read_ram = &HBE
Const Write_ram = &H4E
Const Copy_ram = &H48
Const Recall_ee = &HB8
Const Read_power = &HB4

Dim Family_code As Byte
Dim Serial_number(6) As Byte
Dim Crc As Byte
Dim Scratch(9) As Byte

Dim I As Byte
Dim Temp As Word
Dim Temp1 As Integer
Dim Stemp As Single


Do
  1wreset
  1wwrite Read_rom
  Family_code = 1wread()
  For I = 1 To 6
    Serial_number(i) = 1wread()
  Next
  Crc = 1wread()
  1wwrite Convertt
  Do
    Temp = 1wread()
  Loop Until Temp = &HFF

  1wreset
  1wwrite Skiprom
  1wwrite Read_ram

  For I = 1 To 9
    Scratch(i) = 1wread()
  Next

  Temp = Scratch(2)
  Shift Temp , Left , 8

  Temp = Temp + Scratch(1)
  Temp1 = Temp
  Temp1 = Temp1 / 2
  Stemp = Scratch(8) - Scratch(7)
  Stemp = Stemp / Scratch(8)
  Stemp = Stemp + Temp1
  Stemp = Stemp - 0.25


  Cls
  Upperline
  Lcd "Counts: " ; Temp ; " (" ; Temp1 ; " Grad C)"
  Lowerline
  Lcd "exakt " ; Fusing(stemp , "#.##") ; " Grad C"
  Cursor Off
  Wait 2

Loop

End


Bedank, Michael

Autor: bascom looser (Gast)
Datum:

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

Autor: Michael Matthes (mima)
Datum:

Bewertung
0 lesenswert
nicht 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,

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.