Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

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
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, C-Control II Station, CC2-Application-Board, eigenes Board, OSOPT_V2
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: