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
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
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
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.
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.
danke für deine antwort.
Karl heinz Buchegger schrieb:> 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.
was meinst du genau, ich habe nicht verstanden
ich habe DS1820 TO-92
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.
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
Anstatt dir Debughilfen einzubauen, entfernst du sie.
Wenn du meinst, das das der richtige Weg ist, dann sei es dir gegönnt,
vor Code zu sitzen der nicht funktioniert und nicht zu wissen warum er
nicht funktioniert.