Hallo,
ich hab nen Source geschrieben, welcher mir als Subs erleichtern soll Variabeln in ein 24C64 zu speichern und zu lesen. Möglich sind bei mir damit auch word uns Singles zu verarveiten.
Jedoch tritt hier ein seltsamer Effekt auf. Wenn ich z.B. die Single 12.65 speichr möchte geschieht folgendes:
Die Single im Ram wird zu 12.649999....
Ok, kann ja sein, da es sich um Singles und nich um Doubles handelt....wäre für mich ok. Aber wenn ich diesen Wert wieder aus dem EEprom lese ist er 12.625!
Wie kommt das? Ich selbst kam dem rätsel noch nicht auf die Spur, aber vieleicht kann mmir von euch jemand sagen, was hier passiert.
Source auf Single-Variabeln gekürzt:
Code:$lib "i2c.lib" Config Scl = Portc.0 'PIN für I2C Bus Config Sda = Portc.1 I2cinit Config I2cdelay = 3 Dim Eesingle As Single Dim Eeword(2) As Word At Eesingle Overlay Dim Eebyte(6) As Byte At Eesingle Overlay Dim Eebanz As Byte Dim Ee_adresse As Word Const 24c64w = &B10100000 Const 24c64r = &B10100001 'Definition der Funktionen ++++++++++++++++++++++++++++++++++++++++++++++++++++ Declare Function Loadsingle(byval Ee_adresse As Word) As Single Declare Sub Savesingle(byval Ee_daten As Single , Byval Ee_adresse As Word ) Goto 001 Sub Savesingle(byval Ee_daten As Single , Byref Ee_adresse As Word ) Eesingle = Ee_daten Ee_adresse = Ee_adresse Eebanz = 4 : Gosub Write_ee End Sub Function Loadsingle(byref Ee_adresse As Word) As Single Ee_adresse = Ee_adresse Eebanz = 4 : Gosub Read_ee Loadsingle = Eesingle End Function 'Routine zum schreiben von Daten in das EEPROM ++++++++++++++++++++++++++++++++ Write_ee: Eebanz = Eebanz + 2 Eebyte(1) = High(ee_adresse) Eebyte(2) = Low(ee_adresse) I2csend 24c64w , Eebyte(1) , Eebanz Waitms 30 Return 'Routine zum lesen von Daten aus dem EEPROM ++++++++++++++++++++++++++++++++++++ Read_ee: Eebyte(1) = High(ee_adresse) Eebyte(2) = Low(ee_adresse) I2csend 24c64w , Eebyte(1) , 2 Waitms 5 I2creceive 24c64r , Eebyte(3) , 0 , Eebanz Waitms 25 Return 001: Dim Ins As Single Dim Inw As Word Dim Inb As Byte Do Input "Single: " , Ins Call Savesingle(ins , 100) Print "gespeicherter Wert: ";ins Ins = 0 Ins = Loadsingle(100) Print "geladener Wert: " ; Ins Loop







Zitieren

Lesezeichen