https://www.roboternetz.de/wissen/in...._in_Konstante
Druckbare Version
Hallo
@jschilli
Ich glaube, du hattest Recht mit deiner Vermutung, dass dies ein klassisches C-Problem sei. Trotzdem funzte es nicht einwandfrei. Problem:
Wenn ich diese Zeile schreibe:
result = readADC(0)/400;
Dann bekomme ich auf dem Display immer nur eine 0, 1 oder 2 angezeigt. Diese steht für 0V, 1V und 2V, allerdings nicht die Nachkommastellen. Außer dieser Zeile habe ich nichts geändert.
result = (unsigned int) ((unsigned long)readADC(0) * 256/102400);
Bei dieser Zeile genau das selbe.
Bei beiden Versionen kommt der Sprung von 0 auf 1 bzw. 2 im richtigen Moment. Also es scheint nicht mehr so große Abweichungen zu geben.
Durch Zufall bin ich dann auf diese Seite gestoßen (ich suchte Funktion die float in char konvertiert, wusste nicht ob itoa() dies auch kann):
https://www.roboternetz.de/phpBB2/pr...=20211&start=0
Mit dieser Zeile funzt das ganze jetzt mit der internen Referenzspannung einwandfrei:
result = (readADC(0)*320313/2)/65536;
Normalerweise hätte ich anstatt der 320313/2 diesen Wert nehmen müssen 164000,1564 (ich gehe davon aus, dass die interne Referenzspannung 2,56V beträgt). Jedoch sind meine Werte dann ungenauer. Deshalb nehme ich jetzt 320313/2. Dies Differenz zwischen meinem Multimeter und dem Mikrocontroller liegt bei 2-4 mV. Dies ist ein akzeptabler Wert, denke ich. Würde ich die 164000 nehmen, ist die Differenz zwischen 5-25mV.
Ich bedanke mich bei allen die mir geholfen haben
Gruß micro5
Tschuldigung - Deine Frage ist zwar schon etwas älter, aber ich hatte so ein ähnliches Problem (beim Mega8)
Hast Du schonmal ins Datenblatt auf Seite 55/324/347 geschaut?
Guck Dir mal die Toleranzen der internen Bandgap und Referenz an!
(VINT Internal Voltage Reference)
Die ist mit 2,3V bis 2,7V angegeben und alles andere als genau!
Bastel Dir eine externe Referenz und schalt die interne ab und dann geht dat
...
Ich hab mal am AREF Pin die interne Referenzspannung gemessen. Statt der erwarteten 2,56 V waren das 2,77V. War schon eine Überraschung - Messung war bei Raumtemperatur. Die Angabe von 2 Stellen nach dem Komma suggeriert einem schon eine höhere Genauigkeit. Nachdem ich es ausgemessen hatte und den Meßwert für VREF für die internen Berechungen verwendet habe, war die Genauigkeit o.k.
Und das ist nicht alles:
Bei jedem Prozessor ist das eine andere bzw. von gleichem Typ ist keine Ref. wie die andere.
Wenn auch sonst die Atmel klasse sind, DAS hat mich schon entäuscht.
...