DS18S20 ohne I2C to 1Wire Converter 2 Kategorie: Programmierung Basic (von AndreasK - 28.02.2009 18:23) | ||
| ||
Hallo, ich komme beim Programmieren nicht weiter... Dieses Programm läuft: 'Benötigte Libs´s: IntFunc_lib.cc 'Funktion: Auslesen EINES Temperatursensors DS18B20 (pro Port) 'ohne I2C to 1-Wire Converter '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ' Mögliche Ports (RAM besser über JP7 ausschalten): ' PortA.0 = Portbit 0 ... PortA.7 = Portbit 7 ' PortB.0 = Portbit 8 ... PortB.7 = Portbit 15 ' PortC.0 = Portbit 16 ... PortC.7 = Portbit 23 ' PortD.0 = Portbit 24 ... PortA.7 = Portbit 31 ' PortE.0 = PortBit 32 ... PortE.6 = PortBit 38 (39 geht nicht) ' PortF.0 = PortBit 40 ... PortF.7 = PortBit 47 ' PortG.0 = PortBit 48 ... PortG.4 = PortBit 52 '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Dim Port As Integer ' das PortBit Dim TextaufAnzeige(5) As Char ' AusgabeTextaufAnzeige auf LCD Dim i As Integer ' Zählervariable Dim temp As Integer ' Temperaturwert LCD Dim scratch_pad(1) As Byte ' Temperaturwert DS18B20 Sub main() LCD_Init() LCD_ClearLCD() LCD_CursorOff() Port = 7 TextaufAnzeige = "A7:" ' + temp Do While True OneWire_Reset(Port) OneWire_Write(0xcc) ' ROM überspringen Kommando OneWire_Write(0x44) ' starte Temperatur Messung Kommando AbsDelay(50) ' Wert ausprobieren... OneWire_Reset(Port) OneWire_Write(0xcc) ' ROM überspringen Kommando OneWire_Write(0xbe) ' scratchpad lesen (bis i=9 nicht notwendig) For i = 0 To 1 scratch_pad(i)= OneWire_Read() Next temp= scratch_pad(1) * 256 + scratch_pad(0) LCD_Locate(1,1) ' Zeile 1, Spalte 1 LCD_WriteText(TextaufAnzeige) LCD_WriteFloat(temp*0.06255,1)'Faktor 0.06255 für DS18B20 End While End Sub Nun wollte ich die Sache mit einer Funktion lösen: Sub DS18B20(PortBit As Integer)As Integer Dim i As Integer ' Zählervariable Dim temp As Integer ' Temperaturwert für LCD-Anzeige Dim scratch_pad(1) As Byte ' Temperaturwert DS18B20 OneWire_Reset(PortBit) OneWire_Write(0xcc) ' ROM überspringen Kommando OneWire_Write(0x44) ' starte Temperatur Messung Kommando AbsDelay(50) ' Wert ausprobieren... OneWire_Reset(PortBit) OneWire_Write(0xcc) ' ROM überspringen Kommando OneWire_Write(0xbe) ' scratchpad lesen (bis i=9 nicht notwendig) For i = 0 To 1 scratch_pad(i)= OneWire_Read() Next temp= scratch_pad(1) * 256 + scratch_pad(0) Return temp * 0.06255 'Faktor 0.06255 für DS18B20 End Sub Sub main() Dim temp As Integer ' Temperaturwert für LCD-Anzeige LCD_Init() LCD_ClearLCD() LCD_CursorOff() Do While True DS18B20(7) LCD_Locate(1,1) ' Zeile 1, Spalte 1 LCD_WriteFloat(temp,1) End While End Sub Nun ist der Anzeigewert unsinn. Wo steckt der Fehler ? Grü�e aus Kiel Andreas Kunze | ||
Antwort schreiben Antworten: Re: DS18S20 ohne I2C to 1Wire Converter 2 (von PeterS - 1.03.2009 8:56) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum