PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rechnet der AVR falsch oder bin in ich nur zu dumm ?



NumberFive
11.02.2005, 10:01
Hallo Leute,

habe zwar einen umweg gefunden wie es geht aber schon gerne wissen
warum es nicht geht.




void GetBat(WORD Value)
{
float ADRef = 5 / 1.023;
float Volt = Value * ADRef;
Volt = Volt * 5.2941;
Volt = Volt / 1000;
// Berechnung Volt gemessen bei Ref von 5V
// Mit Spannungsteiler 22k 5,1 k
#ifdef DEBUG
SendString("Batterie ");
char buffer[20];
dtostrf(ADRef,2,10,buffer);
SendString(buffer);
SendString(" Volt: ");
dtostrf(Volt,2,3,buffer);
SendString(buffer);
SendString("\r\n");
#endif
// Das If grab an passen wenn mal die Akkus wirklich daran hängen
if(Volt > 11)
{


das ist der code wie ertut





void GetBat(WORD Value)
{
float Volt = ((Value * 5 / 1023) * 5.2941);

// Berechnung Volt gemessen bei Ref von 5V
// Mit Spannungsteiler 22k 5,1 k
#ifdef DEBUG
SendString("Batterie ");
char buffer[20];
dtostrf(ADRef,2,10,buffer);
SendString(buffer);
SendString(" Volt: ");
dtostrf(Volt,2,3,buffer);
SendString(buffer);
SendString("\r\n");
#endif
// Das If grab an passen wenn mal die Akkus wirklich daran hängen
if(Volt > 11)
{


wenn ich es so schreibe kommt immer 0 raus warum ?

Gruß[/quote]

PicNick
11.02.2005, 10:07
Hi, Der Name "C" kommt von casten.
probier' mal
float Volt = (float)Value * ADRef;
oft reicht das.
mfg robert

RCO
11.02.2005, 10:12
Also rein Rechnerisch müsste es das selbe sein.


Mal gerade nen ganz anderer Punkt:


float Volt = ((Value * 5 / 1023) * 5.2941);

Könnte man doch von der Rechenzeit verkürzen. Da ja nur Punkt-Rechnung betrieben wird, könnte man das alles auf:

Value*0,0259 zusammenrechnen.

Dann muss der µC nicht soviele Rechnungen machen.

MFG moritz

NumberFive
11.02.2005, 11:05
das ist richtig aber die zhak würde man dann überhaupt nich mehr verstehen
gibt einen großen grünen block.

aber das kann ich noch mal probieren.

Gruß

PicNick
11.02.2005, 11:11
Was der RCO sicher meint, ist, daß man solche Sachen den Precompiler VORHER ausrechnen läßt und nicht die MCU bei der Laufzeit
Schreib doch
#define MEIN_FAKTOR (5 / 1023 * 5.2941)

und rechne
float Volt = Value * MEIN_FAKTOR;

dann hast du beider, Doku und Performance

RCO
11.02.2005, 11:18
das ist richtig aber die zhak würde man dann überhaupt nich mehr verstehen

???


dann hast du beider, Doku und Performance

Ja natürlich ist es so eleganter. Man könnte ja auch in einem kommentar daneben schreiben wie sich dieser Wert errchnet.

MFG Moritz

PicNick
11.02.2005, 12:02
???

"ZAHL"
Mach dir aber nix draus, ich muß bei der neuen deutschen Orthographie auch oft erst scharf nachdenken
O:)

RCO
11.02.2005, 13:00
"ZAHL"

Sorry, normalerweise bin ich nicht der Typ, der sich wegen sowas beschwert, aber ich stand da echt auf dem Schlauch :-b

MFG Moritz

Thorsten
11.02.2005, 14:14
Versuch mal anstatt 5 / 1023
5.0 / 1023.0
sonst rechnet der Compiler mit ganzzahlen und die Kommstellen fallen weg.

PicNick
11.02.2005, 14:35
EIn Tip von einem alten Frontschwein: Wenn du willst, daß der Compiler irgendwas so oder so übersetzt, dann schreib es auch hin und verlaß dich nicht auf sie suggestive Wirkung von komma-null. Der eine Compiler fällt drauf rein, der andere nicht.
(float)5 / (float)1023
mfg robert