Ne,ne,
also die Genauigkeit bei dieser Rechnung beträgt etwa 0,008%.
Ich hab mir das nicht selber so ausgedacht, es kommt davon, daß ich gerne mit Assembler programmiere, und da muß man sich solcher Tricks behelfen 
Also, Kaffe ist da ich kann beginnen:
Du hast als Referenz 5 V richtig ?
Die Zahl 320313 kommt so zustande
Da es blöd ist mit Komma zu rechnen (5V/1023) multipliziert man das ganze mit 65536(0xFFFF) und da wir jetzt milivolt haben möchten nehmen wir nicht 5V sondern 5000
(5000*65536)/1023 = 320312,8055
Wir runden auf auf 320313 und hier ist unsere minimale Ungenauigkeit.
Wenn Du jetzt den ADC Wert damit Multiplizierst und anschließend noch durch 65536 teilst, was dann nur heißt die 2 unteren Bytes wegzulassen erhälst Du Deine Spannung in milivolt.
Beispiel
(512 * 320313)/65536 -> 2502 der Rest wird abgeschnitten
GCC ist so klever,daß er in der tat die zwei untere Bytes einfach wegläßt, und nicht anfängt wild durch 65536 zu teilen 
so, das ganze ist hier
nochmal nachzulesen, es gibt da Leute die schlauer sind als ich und sich das ganze so schön ausgedacht haben.....
Wie kriegt man jetzt ein Komma dahin?
indem man itoa im Eigenbau benutzt 
Kommt wieder aus dem Assembler:
Von der Ausgangszahl wird solange 1000 abgezogen, bis die Zahl kleiner als 1000 ist. man muß sich nur merken, wie oft mal 1000 abgezogen hat.
Code:
uint8_t zaehler = 0;
while (deinadcergebnis >= 1000) {
zaehler++;
deinadcergebnis -=1000;
}
jetzt zaehler mit 0x30 verodern und in ein chararray rein.
als nächstes ein komma in dein chararray.
Jetzt das gleiche mit 100 und 10 und den Rest, der dann übrigbleibt ergibt die einer Stelle, die ohne Schleife mit 0x30 verodert werden kann.
zum Schluß noch ein '\0' in chararray, und die Zahl ist fertig zum absenden,anzeigen.
So Kaffee leer 
Gruß Sebastian
Lesezeichen