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

Re: Float ins EEprom speichern??? Kategorie: Programmierung (von André H. - 13.10.2002 11:02)
Als Antwort auf Re: Float ins EEprom speichern??? von Thomas - 12.10.2002 23:07

Hallo Thomas,

> eigendlich hast du mit denn long zahlen recht.aber ich muÃ? zugeben das ich das mit dem komma
> setzen noch nie verstanden habe.Ich habe es auch versucht aber dann habe ich als nach kommastelle
> nur ,0 oder ,5 bekommen. mit deiner funktion für den ad592 bin ich auch nicht klar gekommen aber ich habe sie geändert und nu geht es bei mir.
>


Festkommarechnen mit Integer, das in Deinem Fall sicher reicht, ist ganz einfach:
Es wird mit einer Kommastelle nicht in °C sondern in "dezi-Grad" gerechnet.
Diese Einheit gibt es zwar offiziell nicht, aber vielleicht hilft es zum Verständnis,
wenn man Grad mit Meter und "dezi-Grad" mit Dezimeter vergleicht.
Genauso wie 1 Meter 10 Dezimeter sind, sind 1 Grad 10 "dezi-Grad".

Wenn Du jetzt meine Funktion zum Auswerten des Sensormoduls benutzt,
dann bekommst Du "dezi-Grad" zurück. z.B. tatsächliche temperatur +32,2°C
enstpricht dem Wert +322.

Wenn Du jetzt die Temperatur mit einem anderem Wert vergleichen willst,
so muÃ? dieser auch in "dezi-Grad" sein.
z.B. wenn temp grö�er 24,5°C dann ... :
if temp > 245 { ... }
Ins EEpomn brauchst Du so nur den Integerwert 245 schreiben, der nur 2 Byte
anstatt 8 eines floats benötigt.

Das Ganze geht auch mit zwei Nachkommastellen:
//----------------------------------------
 function gettemp(long ADC) returns int
//----------------------------------------
{ long Temp;
  Temp= 510*ADC; // anstatt 51  510
  return (Temp/25)-250;// Rückgabe wert bei 21,5°C  2150
}
Bei dem Vergleich von vorhin muÃ?t Du das dann auch beachten:
wenn temp grö�er 24,5°C dann ... :
if temp > 2450 { ... }

Wenn Du so eine "Festkommazahl" mit Komma in einen String setzen willst,
dann geht das ganz einfach:
Hier mit einer Kommastelle: (z.B. 1254 für 125,4)
str.putint(s, wert/10);
s=s + "," + ((wert % 10) + 0x30)

Hier mit zwei Kommastellen: (z.B. 12541 für 125,41)
str.putint(s, wert/100);
s=s + ",";
str.putint(s, wert%100);


Ein Workaround ware auch, wenn Du Festkomma im EEProm speicherst,
und dann als Float benutzt:
Wert x =245 für 24,5 °C aus dem EEProm
float f;
f=x * 0.1 // nicht x / 10 schreiben !!

oder
float f;
f=x;
f=f / 10;


> float temp,temp1;
>        temp = (ports.adc(0)*25) ;
>        temp1=(temp/200)-27.5;
>        output = "Temp = ";
>        str.putfloatf (output,temp1,1);
>        str.putchar(output, 'C');
>        lcd.print(output, str.length(output));
>        lcd.clreol();
>
> dieser temp 1 soll dann später mit der zahl aus dem eprom  auf ==, <= ,>= Verglichen werden.
>
> ich habe die Zeilen nu in das modul eeprom ein gefügt aber es klappt immer noch nicht.
> ich wollte mit der folientastatur so die float zahl erzeugen und ins eprom schreiben.
>

Das ist klar. Das Modul eeprom.c2 steht oberhalb von mem.c2. Somit
sind die Funktionen von mem.c2 noch nicht bekannt.
Entweder Du schreibst die beiden Funktionen in eines Deiner Projektmodule, oder
Du setzt eeprom.c2 unterhalb von mem.c2. (in Lib/modules.txt)

>  s="";                                                         //s Soll die floatzahl werden
>       wait keyb2.keywert <=3;
>       str.putfloatf(s,keyb2.keywert,0);
>       lcdext.goto(3,2);
>       lcdext.print(s);
>       keyb2.keywert=255;
>       sleep 250;
>       wait keyb2.keywert <=9;
>       str.putfloatf(s,keyb2.keywert,0);
>       lcdext.goto(3,2);
>       lcdext.print(s);
>       keyb2.keywert=255;
>       sleep 250;
>       wait keyb2.keywert <=9;
>       s=s+'.';
>       str.putfloatf(s,keyb2.keywert,0);
>       lcdext.goto(3,2);
>       lcdext.print(s);
>       keyb2.keywert=255;
>       sleep 250;
>       wait keyb2.keywert ==100;
>       eeprom.writestr(0,256,s);                        // hir solltedas float ins eeprom geschrieben werden
>       sleep 100;
>       }
>  ich habe das eeprom 24c65
> 256??? Eprom schon voll?

Nein. Das 24C65/64 hat 8192 Byte. ( 0 bis 8191)

> im augenblich steht hir alles als string variabele.kannst du mir da vieleicht nochmal weiter helfen und mir noch mal nen tip geben wie das nen float werden kann?
>


Ã?brigens: Versuche bitte ein biÃ?chen auf Deine Rechtschreibung zu achten.
Ich habe nicht umsonst eine Vorschau im Forum:
z.B: hier anstatt "hir"
oder Variable anstatt "variabele"

MfG André H.


Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: Float ins EEprom speichern??? (von Thomas - 13.10.2002 18:26)
    Re: Float ins EEprom speichern??? (von André H. - 13.10.2002 20:30)
        Re: Float ins EEprom speichern??? (von Thomas - 14.10.2002 12:09)