Hallo Alfred,
- NVM_CMD
- pgm_read_byte()
sind für den Zugriff auf das Program Memory, das brauchst du zunächst
nicht für den ADC (bzw. weiter unten für Methode a.)
- ADCA.CALL
- ADCA.CALH
diese brauchst du, allerdings heißen die bei allen Compilern geringfügig
anders. Da musst du bei deinem Compiler im Manual nachsehen. Falls dort
nichts steht nimm lieber einen anderen der für den Xmega besser ist.
Jetzt mal zur Kalibrierung:
dieses Thema ist beim ATXmega etwas speziell und gewöhnungsbedürftig
weil es einen absichtlichen Offset gibt, den man rausrechnen muss.
Diesen Offset zu bestimmen gibt es verschiedene Wege:
a) den von Atmel programmierten Calib-Wert auslesen
b) den Offset selbst bestimmt. Dazu legt man einen ADC Eingang fest auf
GND und misst die Spannung nach dem Reset. Diese Spannung zieht man
später von den Messwerten ab. So macht es zB der CAVR Compiler.
c) den festen Offsetwert aus dem Datasheet abziehen
Ich habe das alles durchprobiert und habe gesehen dass es für 99% der
Anwendungen ausreicht wenn man den Festwert aus dem Datasheet abzieht.
Der Messwert mit Methode B) unterscheidet sich kaum davon, vielleicht um
1 oder maximal 2.
Falls du dir schwer tust den nötgen Code für den ADC zu schreiben, dann
lade dir die freie Version des CodeVision CAVR Compilers herunter. Da
ist ein Code-Wizard drin wo du mit ein paar Mausklicks den kompletten
Code für den ADC automatisch erzeugen kannst.
viel Erfolg
Harry