IRQ
09.03.2007, 13:18
Hi,
habe mit C noch nicht so viel gemacht, daher hab ich eine wohl triviale Frage:
Mit folgendem Code-Schnipsel lese ich die Spannung an einem AD-Wandler des atmega8 aus und gebe sie auf einem Display aus. Korrekter weise müsste die Umrechnung von Registerwert nach anliegender Spannung ja nach der Formel U = REGISTER / 1024 * 5 V erfolgen, wobei 5V meine Referenzspannung ist. Ich skaliere das mit dem Faktor 1000, weil ich nicht weiß, wie ich double zu string konvertiere (für erste Tests reicht das ja aus).
double d = (1000*5)/(1024);
while(1) {
a = adconvert(1); // Führt Konversation aus und gibt Registerinhalt zurück
voltage = (int) (a*d); // Berechnet die Spannung
// Hier noch Int->String und auf Display ausgeben
}
Leider liefert das falsche Ergebnisse, z.B. 360 V statt 430 V (wohlgemerkt mit Faktor 100 skaliert, also 0.43V...).
Auf Grund von allgemeiner Ahnungslosigkeit habe ich aus dem 1000/1024 einfach ne 1 gemacht und gleich mit 5V multipliziert, also:
voltage = a*5;
Und siehe da, es funktioniert! Von der Genauigkeit reicht mir das aus, allerdings wüsste ich gerne warum das mit der Multiplikation von int und float nicht so funktioniert wie es soll :-s
Dankeschön!
habe mit C noch nicht so viel gemacht, daher hab ich eine wohl triviale Frage:
Mit folgendem Code-Schnipsel lese ich die Spannung an einem AD-Wandler des atmega8 aus und gebe sie auf einem Display aus. Korrekter weise müsste die Umrechnung von Registerwert nach anliegender Spannung ja nach der Formel U = REGISTER / 1024 * 5 V erfolgen, wobei 5V meine Referenzspannung ist. Ich skaliere das mit dem Faktor 1000, weil ich nicht weiß, wie ich double zu string konvertiere (für erste Tests reicht das ja aus).
double d = (1000*5)/(1024);
while(1) {
a = adconvert(1); // Führt Konversation aus und gibt Registerinhalt zurück
voltage = (int) (a*d); // Berechnet die Spannung
// Hier noch Int->String und auf Display ausgeben
}
Leider liefert das falsche Ergebnisse, z.B. 360 V statt 430 V (wohlgemerkt mit Faktor 100 skaliert, also 0.43V...).
Auf Grund von allgemeiner Ahnungslosigkeit habe ich aus dem 1000/1024 einfach ne 1 gemacht und gleich mit 5V multipliziert, also:
voltage = a*5;
Und siehe da, es funktioniert! Von der Genauigkeit reicht mir das aus, allerdings wüsste ich gerne warum das mit der Multiplikation von int und float nicht so funktioniert wie es soll :-s
Dankeschön!