-         

Ergebnis 1 bis 3 von 3

Thema: RP6 Division funzt nicht.

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    05.05.2006
    Beiträge
    48

    RP6 Division funzt nicht.

    Anzeige

    Hallo,

    Ich will in meien Programm ( Für RP6 ) eine Division machen, aber es geht nicht. ich bekomme immer 0 raus.
    Das ergebnis müsste: 0.78515625 sein, bzw in meien fall 0.785.

    Code:
    uint16_t Data = 0; // Data muss int16_t sein.
    float  Ergebnis = 0; // Hab es mit double, double long, getestet.
    void Test(void)
    {
    	Data = ZYX; //  YXZ = z.b. 804
    	Ergebnis = Data / 1024.0; // Hab es auch so 1024 getestet.
    	// Test Ausgabe
    	writeString_P(" Ausgabe: ");
    	writeIntegerLength(Ergebnis, DEC, 4);
    	writeChar('\n');
    }
    MFG Oliver G

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    writeIntegerLength(Ergebnis, DEC, 4); interpretiert das Ergebnis wieder als Integer. Fließpunktzahlen kannst du so nicht ausgeben. Stichwort wäre vielleicht float2string.

    Ich versuche grundsätzlich nur ganze Zahlen zu verwenden. Wenn du nur die Ziffernfolge für z.B. eine Anzeige benötigst:
    Code:
    uint16_t Data = 0; // Data muss int16_t sein.
    uint32_t  Ergebnis = 0; // Ein longint mit 32 bit.
    void Test(void)
    {
       Data = 804; //  YXZ = z.b. 804
       Ergebnis = 1000*Data / 1024; // Hab es auch so 1024 getestet.
       // Test Ausgabe
       writeString_P(" Ausgabe: 0,");
       writeIntegerLength(Ergebnis, DEC, 4);
       writeChar('\n');
    }
    (ungetestet)

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    05.05.2006
    Beiträge
    48
    Hi radbruch,

    Werd es auch so machen[*] den ich hab die " FloatToString " funktion nicht gefunden. Wahrscheinlich muss man das sebst coden. Muss mal schaun ob der Programm speicher reicht.

    Ja so wie in deine beispiel geht es nicht denn, die rechnung sollte so aus sehn:

    10*Data / 1024 = (10*804 ) / 1024 = 7.8515625 ~ 7.85 Volt Akkuleistung
    10*Data / 1024 = (10*874) / 1024 = 8.53515625 ~ 8.53 VoltAkkuleistung

    Es sollte nur zu Optischen verschönerung bei der Displayausgabe sein.

    [*]

    (1000 * 804) / 1024 = 785.15625 ~ 785 Volt Akkuleistung.
    Komma werde ich wenn es so funzt mittels for schleife und substring eine ( wenn >= 1024 ) dann zwei stellen danach reinquetschen.

    PS: Wie kann man das Runden verhinder ich bekomm immer 8 raus wo 785 sein sollte.

    MFG Oliver G

Berechtigungen

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