In der AVR AppNote120 wird die Offset, Gain Korrektur des ADC
beschrieben und der folgende Pseudocode mitgeliefert. Ich habe arge
Verständnisproblem was die App. Note angeht und mich würde interessieren
ob das schonmal jemand umgesetzt hat.
1 | signed int adc_compensate( signed int adcvalue, signed int factor, signed long correction )
|
2 |
|
3 | {
|
4 | return (((((signed long)adcvalue*factor)+correction)<<2)>>16);
|
5 | }
|
Beispiel: Wenn ich hier mal mit Zahlen rechne dann kann ich für Faktor
z.B. #define factor (16384*1) setzen. Ein Gain Fehler liegt aber um die
1, will sagen, er kann auch 1,5 sein und schon meckert der Compiler das
ein double nicht in einen int paßt.
Welcher Zahlenraum für correction ermittelt werden muß ist mir völlig
unklar.
Am besten wäre es wenn man in den defines lediglich eintragen würde...
GainError z.B. 1,5 und factor ermittelt wird. Ebenso bei der
Correction... ein define Offset Error und dann wird die Correction vom
Präprozessor berechnet.
Ich hoffe es kommt herüber was ich meine und ihr habt ne Idee wie ich
daran gehen kann.
Anbei noch der link zur AppNote.
http://www.atmel.com/dyn/resources/prod_documents/DOC2559.PDF