Re: DS18S20 ohne I2C to 1Wire Converter 2 Kategorie: Programmierung Basic (von PeterS - 1.03.2009 8:56) | |
Als Antwort auf DS18S20 ohne I2C to 1Wire Converter 2 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 ? Wenn ich auf Programme schaue, die ein Problem haben, suche ich erstmal immer nach Array Problemen. Zumindest ist hier erstmal die Dimensionierung falsch: Dim scratch_pad(1) As Byte ist ein Byte zuwenig. Gruss Peter > > Grü�e aus Kiel > > Andreas Kunze > > | |
Antwort schreiben Antworten: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum