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
Statt
1 | ' Temperatur in 0,1 Grad Schritten ausgeben |
2 | Locate 2 , 1 |
3 | Lcd T ; " Grad" |
das probieren (habe selbst kein BASCOM)
1 | ' Temperatur in 0,1 Grad Schritten ausgeben |
2 | ' Locate 2 , 1 |
3 | Print T ; " Grad" |
http://avrhelp.mcselec.com/print.htm
Wie Stefan schon schrieb, hilft Print weiter, natürlich muss sie eingebunden werden.
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.
schaltung habe ich überprüft, jetzt bekomme immer 246 grad
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.