Re: Float speichern Kategorie: Programmierung (von Cris, http://www.crisullmann.de - 13.05.2005 8:07) | ||
Als Antwort auf Re: Float speichern von JackFrost - 13.05.2005 0:16 | ||
| ||
Hallo JackFrost, ich kann nur Vermutungen über die Fehlerursache anstellen. Selbst habe ich die Speicherung von Floats im EEPROM bisher immer vermieden. meine Vermutung: Die Bitschiebeoperationen funktionieren nur mit Bytes und integers. Also wird aus Deiner 25.26 vor Ausführung der Verschiebung eine 25. Ich hatte versuchsweise Floats mit mem.putfloat in ein Bytearray geschrieben und diese gespeichert. Offensichtlich funktioniert bei mir mem.putfloat nicht. Es wird immer ILL OPA angezeigt. Deshalb werden jetzt überhaupt keine float-Zahlen gespeichert. Ich verwende nur noch Festkommazahlen die als integer gespeichert sind. Die Anzahl der Nachkommastellen ist im Programm fest hinterlegt. Diese Festkommzahlen reichen meistens aus, lassen sich gut anzeigen, speichern und über CAN oder RS232 versenden. Grü�e Cris > > Ich versuche eine float variable in ein 24c512 zu Speichern , mit dem veränderten eeprom.c2 > > > > > > function writeint(byte eepromaddr,int addr, float data) returns int > > { > > if write(eepromaddr,addr) > > { > > i2c.write(data shr 56); > > if ((addr+1) % Pagewrite)==0 > > {i2c.stop(); > > if not write(eepromaddr,addr+1) {lasterr=0x70001;return 0;} > > } > > i2c.write(data shr 48); > > if ((addr+2) % Pagewrite)==0 > > {i2c.stop(); > > if not write(eepromaddr,addr+2) {lasterr=0x70002;return 0;} > > } > > i2c.write(data shr 40); > > if ((addr+3) % Pagewrite)==0 > > {i2c.stop(); > > if not write(eepromaddr,addr+3) {lasterr=0x70003;return 0;} > > } > > i2c.write(data shr 32); > > if ((addr+4) % Pagewrite)==0 > > {i2c.stop(); > > if not write(eepromaddr,addr+4) {lasterr=0x70004;return 0;} > > } > > i2c.write(data shr 24); > > if ((addr+5) % Pagewrite)==0 > > {i2c.stop(); > > if not write(eepromaddr,addr+5) {lasterr=0x70005;return 0;} > > } > > i2c.write(data shr 16); > > if ((addr+6) % Pagewrite)==0 > > {i2c.stop(); > > if not write(eepromaddr,addr+6) {lasterr=0x70006;return 0;} > > } > > i2c.write(data shr 8); > > if ((addr+7) % Pagewrite)==0 > > {i2c.stop(); > > if not write(eepromaddr,addr+7) {lasterr=0x70007;return 0;} > > } > > i2c.write(data); > > i2c.stop(); > > return -1; > > } > > lasterr=0x70000; > > return 0; > > } > > > > > > { > > float data; > > if read(eepromaddr,addr) > > { > > data = i2c.read(); > > data = (((((((((((((data shl 8) or i2c.read()) shl 8) or i2c.read()) shl 8 ) or i2c.read()) shl 8) or i2c.read()) > > shl 8) or i2c.read()) shl 8) or i2c.read()) shl 8) or i2c.readlast(); > > i2c.stop(); > > return data; > > } > > lasterr=0x3000; > > return 0; > > } > > > > > > Leider wird aus 25.26 ein 25.00 nach dem lesen , kann man keine floats speichern ? > > > > Gruss JackFrost > > > > > > > > Ich vergass den Code zum anzeigen auf den Display: > > > eeprom.writefloat(3,1,b); > sleep 250; > c = eeprom.readfloat(3,1); > > if b == c > { > pcflcd.goto(4,0); > //c = runden.arunden(c,2); > d=b*100; > pcflcd.zahl4n2(d); > pcflcd.goto(3,0); > e=c*100; > pcflcd.zahl4n2(e); > } > else > { > pcflcd.goto(4,0); > d=b*100; > pcflcd.zahl4n2(d); > pcflcd.goto(3,0); > e=c*100; > pcflcd.zahl4n2(e); > } > > d ist dem Fall 25.26 aber e ist 25.00 > > wo liegt der Fehler ? > > Gruss JackFrost Meine Seite: http://www.crisullmann.de | ||
Antwort schreiben Antworten: |