Hallo,
ich habe ein Programm für einen ATmega32 geschrieben. Da wird eine
Spannung mit dem ADC gemessen.
Die eigentlich Messung funktioniert auch, ich erhalte den ADC-Wert ohne
Probleme.
Doch dieser Wert ist nun in einem int.
Nun möchte ich daraus die Spannung berechnen. Wie das eigentlich
funktioniert ist mir auch klar, mit dem Taschenrechner funktioniert auch
alles, nur im µC nicht.
Meine Referenzspannung beträgt 5V. Ich setzte einen Spannungsteiler ein,
1k nach Masse, 10k nach Plus, in der Mitte ist der ADC-Pin.
somit erhalte ich bei 12V einen Wert von ca. 223.
Ich habe bereits versucht, nun mit dem Mikrocontroller die Spannung zu
errechnen und über den UART auszugeben, doch leider bisher ohne Erfolg.
Hier Mein Versuch:
1
int wert;
2
double ua;
3
double volt;
4
char a[100];
5
6
uart_init(); //UART-initialisierung
7
8
wert=lesen(0); //Nun liegt in "wert" 223....
9
ua=(wert/1023)*5;
10
volt=(ua/1000)*(10000+1000);
11
12
sprintf(a, "%f", volt);
in "a" liegt jetzt leider nun "?" was mache ich falsch???
Mein UART funktioniert soweit ganz gut......
Ich glaube, mein größstes Problem ist die Umrechnung von double nach
char a[100]
wo liegt der Fehler?
mfg
utezr
> in "a" liegt jetzt leider nun "?" was mache ich falsch???
ich übe mal etwas C (muß ich sowieso immernoch...
> ua=(wert/1023)*5;
Was amcht der Compiler?
223/1023 = 0 (ist ja alles Integer)
0 * 5 ist immernoch 0 (eigentlich nuß man nicht weitermachen...)
Oder irre ich da?
Gruß aus Berlin
Michael
>Wenn ich jetzt aber "a" über den UART ausgeben, dann kommt immernoch nur>"?".....
Du hast ein sprintf() ohne Floating Point Support gelinkt.
Wie ging denn das noch im makefile?
Warum steht in dem von dir verlinkten Artikel
..."Beim WinAVR/AVR-Studio wird standardmässig eine Version der
printf-Bibliothek verwendet, die keine Floating Point Verarbeitung
unterstützt. Die meisten Programme benötigen keine Floating Point
Unterstützung, sodass hier wertvoller Programmspeicherplatz gespart
werden kann.
Benutzt man dann allerdings eine printf Variante für die Ausgabe von
Floating Point Zahlen, so erscheint an Stelle der korrekt formatierten
Zahl lediglich ein '?'. Dies ist ein Indiz, dass die Floating Point
Verarbeitung im Projekt aktiviert werden muss."...
Hallo,
danke an Gast, für den Hinweis :-)
Allerdings fällt mir jetzt auf, dass meine Spannungsmessung nur ca.
stimmt, und 11,98 anzeigt, statt 12,2(Multimeter).....
Liegt das an der Referenzspannung, ich verwende AVR-Studio und da kann
man die noch mit so einem "Regler" einstellen(hab ich auf 5V
gestellt)..... ich habe aber natürlich auch
REFS0 auf '1' gesetzt und REFS1 auf '0'..... also auch 5V(da der AVR ja
mit 5V betrieben wird).....
Wie muss ich eigentlich die Fuses programmieren???
Was macht eigentlich der Statur "reserviert"(bei der Referenzspannung)?
mfg
utzer
Doran S. schrieb:
> Hallo,>> danke an Gast, für den Hinweis :-)> Allerdings fällt mir jetzt auf, dass meine Spannungsmessung nur ca.> stimmt, und 11,98 anzeigt, statt 12,2(Multimeter).....
Dein 1k Widerstand wird nicht genau 1k haben.
Dein 10k Widerstand wird nicht genau 10k haben.
> Wie muss ich eigentlich die Fuses programmieren???
Kommt drauf an, was du erreichen willst.
> Was macht eigentlich der Statur "reserviert"(bei der Referenzspannung)?
Nichts. Das Bitmuster hat sich Atmel für zukünftige Erweiterungen (bei
anderen Prozessoren) reserviert. Auf deinem µC macht diese Einstellung
nichts, auf einem anderen µC könnte sie irgendetwas sinnvolles machen.
Hi
>Liegt das an der Referenzspannung, ich verwende AVR-Studio und da kann>man die noch mit so einem "Regler" einstellen(hab ich auf 5V>gestellt)..... ich habe aber natürlich auch>REFS0 auf '1' gesetzt und REFS1 auf '0'..... also auch 5V(da der AVR ja>mit 5V betrieben wird).....
Das sind zwei paar Schuhe. Wenn du die Einstellung vom AVR-Studio nutzen
willst müssen REFS0/1 beide 0 sein (und Jumper richtig setzen). Bei
deiner Einstellung wird VCC als Referenz benutzt. Allerdings solltest du
dich nicht unbedingt auf beide Werte verlassen.
Wenn du genauer messen willst, passe deinen Spannungsteiler an und
benutze die interne Referenz.
>Was macht eigentlich der Statur "reserviert"(bei der Referenzspannung)?
Nimm es mal als: NICHT BENUTZEN!
MfG Spess