- LiTime Speicher und Akkus         
Ergebnis 1 bis 10 von 10

Thema: Rechnet der AVR falsch oder bin in ich nur zu dumm ?

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    49
    Beiträge
    1.562

    Rechnet der AVR falsch oder bin in ich nur zu dumm ?

    Anzeige

    Powerstation Test
    Hallo Leute,

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

    Code:
    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

    Code:
    
    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]
    P: Meine Tochter (06.11.07) und https://www.carnine.de
    M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Hi, Der Name "C" kommt von casten.
    probier' mal
    float Volt = (float)Value * ADRef;
    oft reicht das.
    mfg robert

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    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

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    49
    Beiträge
    1.562
    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ß
    P: Meine Tochter (06.11.07) und https://www.carnine.de
    M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    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
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    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

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Zitat Zitat von RCO
    ???
    "ZAHL"
    Mach dir aber nix draus, ich muß bei der neuen deutschen Orthographie auch oft erst scharf nachdenken
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    "ZAHL"
    Sorry, normalerweise bin ich nicht der Typ, der sich wegen sowas beschwert, aber ich stand da echt auf dem Schlauch

    MFG Moritz

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.11.2003
    Ort
    Alfeld (50km südl. Hannover)
    Alter
    40
    Beiträge
    237
    Versuch mal anstatt 5 / 1023
    5.0 / 1023.0
    sonst rechnet der Compiler mit ganzzahlen und die Kommstellen fallen weg.
    Open Minds. Open Sources. Open Future

  10. #10
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test