Temepratur messen mit DS1820 und ATMEGA8

OP #1700884
Lesenswert?

Guten Tag an Alle,

ich habe an Euch eine Frage. Ich bin neu im Mikrokontoller- und 
Bascom-bereich. Ich möchte Temperaturen messen mit DS1820 und atmega8.
Die Schaltung und den Code habe ich schon. Aber der Code zeigt die 
Temperatur nur auf einem LCD. Aber ich möchte, dass die Temperatur nur 
auf
Bascom-Terminal angezeigt wird. Wie kann ich den Code ändern um das zu 
erreichen.

Danke im Voraus


CODE:


' Beispiel für das myAVR Board 1 & 2 mit LCD und 1wire Temperatursensor 
an Pin 5 von Port C
$regfile = "m8def.dat"
$crystal = 3686411

' LCD konfigurieren Port auf Ausgabe setzten und Pin's entsprechend 
zuordnen
Ddrd = &HFF
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , 
Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2

' Pin für 1wire Schnittstelle festlegen, Schnittstelle wird von BASCOM 
durch Software realisiert
Config 1wire = Portc.5

Dim Dsid(8) As Byte
' Die Adresse meines DS1820 die ich vorher ermittelt habe
Dsid(1) = &H10 : Dsid(2) = &H68 : Dsid(3) = &H17 : Dsid(4) = &H25 : 
Dsid(5) = &H01 : Dsid(6) = &H08 : Dsid(7) = &H00 : Dsid(8) = &H98
Dim Sc(9) As Byte
Dim T As Integer
Dim T1 As Integer
Dim I As Byte

Cls
Cursor Off
Locate 1 , 1 : Lcd "Mein Termometer"

Do
 ' Alle angeschlossenen DS1820 zum Messen veranlassen
 1wreset
 1wwrite &HCC
 1wwrite &H44
 Waitus 200
 ' Den gewünschten Sensor auswنhlen
 1wverify Dsid(1)
 ' Kommando READ SCRATCHPAD
 1wwrite &HBE
 Sc(1) = 1wread(9)
 If Sc(9) = Crc8(sc(1) , 8) Then
  ' Genauere Temperaturberechnung auf 0,1 °C
  I = Sc(1) And 1
  If I = 1 Then Decr Sc(1)
  T = Makeint(sc(1) , Sc(2))
  T = T * 50
  T = T - 25
  T1 = Sc(8) - Sc(7)
  T1 = T1 * 100
  T1 = T1 / Sc(8)
  T = T + T1
  T = T / 10
  ' Temperatur in 0,1 Grad Schritten ausgeben
  Locate 2 , 1
  Lcd T ; " Grad"
 Else
  ' Wenn Fehler Scratchpad zur Kontrolle Hexadezimal ausgeben
  Locate 2 , 1
  ' Es passen nur 8 Byte auf das Display
  For I = 1 To 8
   Lcd Hex(sc(i))
  Next
 End If
 ' Ausgabe alle 0,5 Sekunden
 Waitms 500
Loop

End
#1701138
Lesenswert?

Hallo,
wie wäre es mal in der Hilfe zu Bascom nach RS232 zu suchen?
Da soll es Beispiele geben, wie man Zeichen ausgibt.
Und wenn man geschickt kombiniert, tauscht man
For I = 1 To 8
   Lcd Hex(sc(i))
  Next
gegen die andere Ausgabe aus. Init der RS232 zu Begin wäre auch ganz 
praktisch.
Viele Grüße Herbert
OP #1701570
Lesenswert?

danke für die Antwort, mit diese Code bekomme nur FFFFFFFF

' Beispiel für das myAVR Board  1wire Temperatursensor an Pin 5 von Port 
C
$regfile = "m8def.dat"
$crystal = 3686411
$baud = 9600

' Pin für 1wire Schnittstelle festlegen, Schnittstelle wird von BASCOM 
durch Software realisiert
Config 1wire = Portc.5

Dim Dsid(8) As Byte
' Die Adresse meines DS1820 die ich vorher ermittelt habe
Dsid(1) = &H10 : Dsid(2) = &H68 : Dsid(3) = &H17 : Dsid(4) = &H25 : 
Dsid(5) = &H01 : Dsid(6) = &H08 : Dsid(7) = &H00 : Dsid(8) = &H98
Dim Sc(9) As Byte
Dim T As Integer
Dim T1 As Integer
Dim I As Byte


Print "Mein Termometer"

Do
 ' Alle angeschlossenen DS1820 zum Messen veranlassen
 1wreset
 1wwrite &HCC
 1wwrite &H44
 Waitus 200
 ' Den gewünschten Sensor ausw?hlen
 1wverify Dsid(1)
 ' Kommando READ SCRATCHPAD
 1wwrite &HBE
 Sc(1) = 1wread(9)
 If Sc(9) = Crc8(sc(1) , 8) Then
  ' Genauere Temperaturberechnung auf 0,1 °C
  I = Sc(1) And 1
  If I = 1 Then Decr Sc(1)
  T = Makeint(sc(1) , Sc(2))
  T = T * 50
  T = T - 25
  T1 = Sc(8) - Sc(7)
  T1 = T1 * 100
  T1 = T1 / Sc(8)
  T = T + T1
  T = T / 10
  ' Temperatur in 0,1 Grad Schritten ausgeben

  Print T ; " Grad"

 Else
  ' Wenn Fehler Scratchpad zur Kontrolle Hexadezimal ausgeben

  ' Es passen nur 8 Byte
  For I = 1 To 8

   Print Hex(sc(i));

  Next
  Print
 End If
 ' Ausgabe alle 0,5 Sekunden
 Waitms 500
Loop

End
Persönliche Seite #1701666
Lesenswert?

Some One schrieb:

> danke für die Antwort, mit diese Code bekomme nur FFFFFFFF

dann bist du in diesem else-Fall, allerdings müssten mehrere (8) Zeilen 
mit FFFFFFFF pro Sensorabfrage kommen.

>   ' Wenn Fehler Scratchpad zur Kontrolle Hexadezimal ausgeben

Wenn du sonst nichts gegenüber dem Democode verändert hast und die 
Sensor-IDs stimmen, bedeutet das am wahrscheinlichsten, dass der Sensor 
falsch angeschlossen ist. Näheres kann ich dazu nicht sagen, weil ich 
deinen Schaltplan zum Sensoranschluss nicht kenne.
#1701806
Lesenswert?

Dann würde ich mal sagen:
Übernimm mal den Teil zur Ausgabe der Hex Bytes auch in den anderen 
Programmpfad und lass die die empfangenen Bytes ausgeben.

Dann schnappst du dir das Datenblatt zum DS1820 und versuchst die 
Berechnung nachzuvollziehen bzw. abzuklären, wie plausibel diese 
Ausgangswerte überhaupt sind.
#1701844
Lesenswert?

Du kriegst vom Ds1820 8 Bytes zurück.

Wenn diese 8 Bytes einen CRC Fehler haben, dann gibst du bisher auch 
schon diese 8 Bytes aus.

So. Jetzt haben deine Daten keinen CRC Fehler. Nach menschl. Ermessen 
sollten sie daher richtig sein. Aber ist das tatsächlich so?
Du siehst dir diese 8 Bytes nirgends an, bzw. lässt sie dir nirgends 
ausgeben um das kontrollireen zu können, ob das was da ausgerechnet wird 
auch stimmen kann. Du rechnest aber mit diesen 8 Bytes!

Und genau da sollst du ansetzen.
Lass dir die 8 Bytes ausgeben und sieh mal nach, ob die plausibel sind. 
Getreu dem Motto: mit falschen Ausgangsdaten kann man keine richtigen 
Ergebniss erzielen.
OP #1701883
Lesenswert?

das ist der code nach alle änderung
jetzt zeig die Temp. bis 32 grad, dann zeigt die Temp. in Minus...
die Genauigkeit muss ich noch überprüfen


code:

$regfile = "m8def.dat"
$crystal = 11059200
$baud = 9600


Config 1wire = Portc.5

Dim Dsid(8) As Byte
' Die Adresse  DS1820
Dsid(1) = &H10 : Dsid(2) = &H68 : Dsid(3) = &H17 : Dsid(4) = &H25 : 
Dsid(5) = &H01 : Dsid(6) = &H08 : Dsid(7) = &H00 : Dsid(8) = &H98
Dim Sc(9) As Byte
Dim T As Integer
Dim T1 As Integer
Dim I As Byte


Print "Mein Termometer"

Do
 ' Alle angeschlossenen DS1820 zum Messen veranlassen
 1wreset
 1wwrite &HCC
 1wwrite &H44
 Waitms 700
 1wwrite &HBE
 ' Den gewünschten Sensor ausw?hlen
 1wverify Dsid(1)
 ' Kommando READ SCRATCHPAD
 1wwrite &HBE
 Sc(1) = 1wread(9)
 If Sc(9) = Crc8(sc(1) , 8) Then
  ' Genauere Temperaturberechnung auf 0,1 °C
  I = Sc(1) And 1
  If I = 1 Then Decr Sc(1)
  T = Makeint(sc(1) , Sc(2))
  T = T * 50
  T = T - 25
  T1 = Sc(8) - Sc(7)
  T1 = T1 * 100
  T1 = T1 / Sc(8)
  T = T + T1
  T = T / 10
  ' Temperatur in 0,1 Grad Schritten ausgeben

  Print T ; " Grad"

  Else
  ' Wenn Fehler Scratchpad zur Kontrolle Hexadezimal ausgeben

  ' Es passen nur 8 Byte


   Print "fehler"




  Print
 End If
 ' Ausgabe alle 0,5 Sekunden
 Waitms 500
Loop

End

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