Hallo zusammen.
Als aller erstes ein grosses Kompliment zu dieser perfekten
Knowledge-Base hier im Forum!
Erst vor kurzem habe ich begonnen mit AVR Derivaten (ASM und GCC) zu
programmieren und stehe nun vor einem Problem.
Ich verwende den ADC eines ATMega 32 (AVR Studio 4, AVR-GCC), um eine
Spannung (Genauigkeit ist für diese Art der Anwendung erstmal zu
vernachlässigen) zu messen und es am LCD mit Festkommaarithmetik
auszugeben.
Habe schon die Routinen zur Festkommaarithmetik verwendet und soweit
bekomme ich es auch hin. Also Umwandlung des ADC Wertes
in einen zuerst mit '0' führender String funktioniert. Es ist eine
unidirektionale Messung, es können also nur positive Werte auftreten.
Nur ich bekomme es nicht hin, den Dezimalpunkt (Wert vor dem
Dezimalpunkt "." Nachkommastellen) in den gleichen String zu packen,
der dann als Gesamtstring ans LCD mit dem Befehl lcd_string ausgegeben
werden soll. Das Display zeigt immer nur wirre Dinge an.
In der Routine (Artikel Festkommaarithmetik) ist das mit lcd_data
gemacht worden, ich benötige aber
erst einen kompletten Sting zur Ausgabe.
Hat jemand eine Idee, wie das gemacht wird?
Mfg
Marco
Hallo Peter.
Zuerst vielen Dank für die sehr schnelle Antwort.
Ich habe bereits deinen Artikel „Formatierte Zahlenausgabe in C“
durchgelesen und habe auch versucht deinen Programmcode in meinem
Testprogramm einzufügen. Wenn ich das richtig verstehe (bitte
korrigieren, wenn ich falsch liegen sollte), muss ich die „valout“ – Fkt
folgendermassen in mein Programm einbinden:
valout( Wert, Anzahl_der_Digits, Position_des_Dezimalpunktes,
String_Array);
Der ADC Wert kommt aus meiner unsigned int AdcSample(void) – Fkt, der
dann noch in einer Formel in main (void) weiter berechnet wird. Das muss
in Wert bei valout eingesetzt werden, richtig?
Kann ich in meinem Programm für das String_Array einen char Buffer[32]
deklarieren, den ich später mit lcd_string(Buffer); // Send text to
display an das Display ausgeben kann?
Ich erhalte leider noch folgende Fehlermeldung / Warnungen:
../Voltage_Meas.c:177: warning: pointer targets in passing argument 4 of
'valout' differ in signedness
D:\Spannungsmessung_ADC\C\FKA\default/../Voltage_Meas.c:177: undefined
reference to `valout'
Habe ich noch etwas vergessen in den Header zu schreiben?
Vielen Dank schonmal für die Unterstützung.
Mfg Marco
Hallo zusammen.
Ich habe nun die letzten Tage versucht die valout-Fkt zum Laufen zu
bringen. Es scheitert immer noch an folgender Fehlermeldung:
../Ausgabe.c:13: undefined reference to `valout'.
Bin langsam verzweifelt, was mache ich falsch?
Habe die Dateien als Anhang angehängt, wäre cool, wenn sich das jemand
mal anschauen könnte.
Vielen Dank
Mfg Marco
Stefan Frings schrieb:> Warum hast du nicht einfach printf oder sprintf benutzt?
Weil man sowas bei einem uC-Projekt nicht benutzt.
Nur Knalltüten, die da glauben, sich auf nem uC genauso benehmen zu
müssen wie auf dem PC, benutzen sowas. Das ist die Sorte, die sich auch
über das Fehlen von Dotnet auf'm 8 Bit Atmel mokiert.
W.S.
W.S. schrieb:> Stefan Frings schrieb:>> Warum hast du nicht einfach printf oder sprintf benutzt?>> Weil man sowas bei einem uC-Projekt nicht benutzt.
Was natürlich Blödsinn ist.
Wenn ich den Speicher hab und die Laufzeit nicht kritisch ist, spricht
nichts dagegen sprintf einzusetzen. Für nicht verbrauchten Flash gibts
kein Geld zurück.
Karl Heinz Buchegger schrieb:> Was natürlich Blödsinn ist.> Wenn ich den Speicher hab und die Laufzeit nicht kritisch ist, spricht> nichts dagegen sprintf einzusetzen.
Diese Argumentation ist natürlich genauso Blödsinn.
Es kommt draufan, in welcher Richtung man die Anwendung optimiert. Für
eine, bei der es auf Stromverbrauch oder Bauteilkosten ankommt, wird man
anders optimieren als bei einer, wo Ziel ist, die Sache irgendwie
schnell zum Laufen zu bringen.
HattenWirGerade schrieb:> Karl Heinz Buchegger schrieb:>> Was natürlich Blödsinn ist.>> Wenn ich den Speicher hab und die Laufzeit nicht kritisch ist, spricht>> nichts dagegen sprintf einzusetzen.>> Diese Argumentation ist natürlich genauso Blödsinn.>> Es kommt draufan, in welcher Richtung man die Anwendung optimiert.
OK. Ich hab noch den Stromverbrauch vergessen. Ich könnte allerdings
auch noch argumentieren, dass der Stromverbrauch in der Laufzeit
implizit mit drinnen ist. Je langsamer, desto länger kann der µc nicht
in den Sleep gehen, desto mehr Strom verbraucht er.
Aber wollen wir jetzt wirklich auf des Kaisers Bart rumreiten?
Karl Heinz Buchegger schrieb:> Aber wollen wir jetzt wirklich auf des Kaisers Bart rumreiten?
Nö.
Aber ich sehe hinter solchen Bemerkingen wie der vom sprintf ganz
deutlich den Willen zur Ahnungslosigkeit. Ich entsinne mich an eine
Bemerkung (vor vielen Jahren) von jemandem, der sich darüber mokierte,
daß er auf'm PIC ja nur lächerliche 8 Plätze im Stack hat, wo er doch
gewöhnt sei, mindestens 8 K an Stack zu haben. Ahnungslos, großkotzig
und eigentlich unfähig, aber mit der Attitüde des Großmeisters.
Genauso ist das hier mit sprintf und Konsorten. Immer kommt das Argument
"ja wenn ich doch auf dem uC sooo viele ungenutzte Ressourcen habe,
warum sollte ich da selber nachdenken oder gar sparsam sein?" Bei so
einem Burschen würde ich anregen, daß sein Chef ein bissel sparsamer mit
dem Salär wäre. Alternativ könnte man dem Burschen nahelegen, seine
Algorithmen zu überdenken, damit man den nächstkleineren und billigeren
uC einsetzen kann.
W.S.