Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > 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 > > > >