www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AppNote AVR120


Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.
signed int adc_compensate( signed int adcvalue, signed int factor, signed long correction )

{
return (((((signed long)adcvalue*factor)+correction)<<2)>>16);
}

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/...

Autor: Michael Pascher (mikepa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jupp,

wie die Application Note ausführt, wird davon ausgegangen, dass die 
Verstärkung immer < 2 sein wird. Daher wir alles mit 2^14 multipliziert.
In der Gleichung ist auch der offset (Nullpunktabweichung) mit 2^14 zu 
mutiplizieren. Im Funktionsaufruf wird ein signed long als Vertsärkung 
erwartet, kein Double. Daher vielleicht folgendes:

#define factor (signed int)(1.5*16384)

oder

signed int factor = (signed int)1.5*16384);

Michael

Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Michael,

danke, das mit dem Gain Factor klappt schon mal.

#define GainFactor (signed int) (1.0*16384)
#define Correction (signed int) (1.0*16384)

Wenn ich nun den Gain "um 1... 1,2 oder 0,8" setze dann rechnet er 
richtig. Wie der Correction Wert entsteht is mir völlig unklar. Bei der 
Definition... wie oben im define angelegt... wir aus dem Eingangswert 
1024 = 1025... würde aber gerne eine Abweichung in mVolt definieren. Ich 
komm nicht mal auf den Lösungsansatz für Correction. Bei einem signed 
int wird eine Korrektur um sagen wir mal 20 mVolt nie was oder verstehe 
ich da immer noch etwas nicht ?

Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, habs jetzt etwas anders gelöst... Gain und Offset läßt sich 
wunderbar einstellen.

Leider hat der Wandler noch nichtlineare Fehler. Ich hab die 
Korrekturwerte so eingestellt das in der Mitte bei 1,280 Volt kein 
Fehler mehr existiert. Bis zum minimalen / maximalen Wert ergibt sich 
leider noch ein Offset von 25 mVolt. Ganz brauchbar aber der Fehler im 
Bereich von 0-500 mVolt ist schon heftig.

Wie gut sind die Wandler der ATMEGA's ?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.