Forum: Mikrocontroller und Digitale Elektronik Float berechnungen und Ausgabe auf Atmel128


von Thomas O. (tommyo)


Lesenswert?

Hallo,
ich bin seit einigen Tagen ratlos...
Ich habe einen Atmel128 und den ICC AVR Compiler.
Da ich einen PT100 an  einem ADC hängen habe, müsste ich mit floating
point Zahlen rechnen. Integer Berechnungen und Ausgabe mit fprintf und
printf klappen. Nur eben nicht float.

Der Code ist im Moment:
...
if (strncmp("te", buff, got) == 0) {
    float temp = 0;

   ADCSetup();                                //vorbereiten des ADCs
   fprintf(stream, "Read Temperature...\r\n");

  for(i = 0; i<11; i++) {
      Result = (float)ADConvert(1,1);         // Ch. 1 mit Divfaktor 1
                                              // liefert Int
      fprintf(stream, "The ADC Result: %i \r\n", Result);
    temp  = (float)temp + ((float)Result * (float)2.5600 )/(float)1024
}

temp = (float)temp/(float)10.0000;

fprintf(stream, "The voltage on ADC: %.6f [V]\r\n", temp);


.....
}



Im Compiler (ICC AVR Version 6.28) hab ich schon die Option "Printf
Version - float" gewählt und meine Return Stack Size auf 128 gesetzt.

Versuchshalber hab ich extra noch #include "float.h" gesetzt. Aber
leider ohne Erfolg. Auch wenn ich eine float Variable fest definier,
also float var = 1.23; und dann mit printf("...%f",var); ausgebe
klappts nicht.

Wäre super wenn jemand das gleiche Problem hatte und gelöst hat.

Grüße Thomas

von Profi (Gast)


Lesenswert?

versuchs mal mit
#include <math.h>

Ich würde trotzdem versuchen, ohne float auszukommen, nämlich mit
fixed-point:
temp = temp + adc*256;

fprintf(stream, "The voltage on ADC: %d.%03d [V]\r\n",
temp/100,temp%100);

von Thomas O. (tommyo)


Lesenswert?

Cool fixed-point macht er wunderbar!
Vielen Dank.
Aber im Prinzip soll es doch einfach sein mit float auf AVRs zu
rechnen?
Oder wendet man eigendlich immer fixed-point an?

Gruß
Thomas

von Thomas O. (tommyo)


Lesenswert?

http://www.mikrocontroller.net/forum/read-1-120732.html#new

hier wurde das Thema auch besprochen.

Für die, die es wissen wollen.

Gruß
Thomas

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.