mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fleißkommafehler beim AVR


Autor: Karlheinz Druschel (kdruschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
ich habe hier einen Mega16 mit einem Display und möchte nun die 
Analogeingänge nutzen.
Im Prinzip geht es auch.
Also ich lege eine Spannung an den ersten Eingang (0..5V, interne 
Referenz Vcc, Kondensator an Aref). Den gewandelten Wert lasse ich mir 
auf dem Display ausgeben, sowohl als Countwert als auch umgerechnet in 
Volt.
Der Countzwert geht einwandfrei, es kommen Werte zwischen 0 und 1023. 
Aber bei der Umrechnung in Spannung geht nix, auf dem Display erscheint 
nur ein Fragezeichen. Habe ich eine Bibliothek vergessen ? Derzeit binde 
ich die "libm.a" und die "libprintf_flt.a" mit ein (ach ja: AVR Studio 
und gcc).
Ich habe versucht das Ganze im Simulator zu debuggen, aber im 
Watch-Fenster zeigt er immer 0 an für beide Variablen (was ja aber auch 
sein kann,d a habe ich ja keinen echten Analogwert).

Mein Codeauszug:
    if (adc_count >= 1000)
    {
  adc_count=0;
  AdcResult = ADC_Read_Avg(0,100);
  Volt = AdcResult*5.0/1024.0;
  sprintf(buffer,"%04d - %f V", AdcResult, Volt);
  lcd_setcursor(0,1);
  lcd_string(buffer);
    }

Greets
Karlheinz

Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Karlheinz Druschel (kdruschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, was willst Du mir damit sagen ?
Die Compiler-Optionen "-Wl,-u,vfprintf -lprintf_flt -lm" bringen leider 
keine Veränderung.
Und da Volt als Double deklariert ist stimmt das Formatkennzeichen "%f" 
ebenfalls.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Thilo M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karlheinz Druschel schrieb:
> sprintf(buffer,"%04d - %f V", AdcResult, Volt);

Hast du mal versucht, die Stellen anzugeben?
sprintf(buffer,"%04d - %4.3f V", AdcResult, Volt);
                        ^^^

Im AVRStudio kenne ich mich nicht aus, im Makefile sieht's mit den Libs 
dann so aus:

# If this is left blank, then it will use the Standard printf version.
PRINTF_LIB = $(PRINTF_LIB_FLOAT)
#PRINTF_LIB = $(PRINTF_LIB_MIN)
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)

Autor: Karlheinz Druschel (kdruschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Karl hein Buchegger: Wie ich bereits erwähnte habe ich die im Link 
angegebenen Libs eingebunden, und die Compileroptionen auch gesetzt. 
Passiert nur leider nix

@Thilo: Bringt leider auch nix, hätte mich auch gewundert.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... keinen echten Analogwert ...

Gib einen Wert per Hand ein.

Autor: Mike R. (thesealion)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das muß eine Linker-Option sein. Das Problem hatte ich auch schon mal 
:-)

Autor: Thilo M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist die Einstellung beschrieben, dürfte di Selbe sein wie deine:
http://winavr.scienceprog.com/avr-gcc-tutorial/usi...

Muss man nicht math.h mit einbinden? Irgendwas habe ich da noch im 
Hinterkopf ...

Autor: Karlheinz Druschel (kdruschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OKIDOK, ich habs .-)
Ich hatte die Optionen "-WI, -u, vfprintf" bei9 den Complier-Options, 
und nicht bei den Linker-Options eingetragen *lol

Danke für die Tips

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.