Forum: Compiler & IDEs ADC ATXmega16d4


von gutzia (Gast)



Lesenswert?

Hallo,

zur Erklärung: Ich nutze einen atxmega16d4 und messe einen Eingang, ich 
habe 30 Geräte. die  Messkurve entspricht bei etwa der hälfte einer 
Geraden. Aber bei der anderen kommen Ausschläge zu stande.

Die Ausprägungen sind sehr unterschiedlich. Ich vermute es liegt an der 
Kalibration, die scheint nicht zu funktionieren. in der Headerdatei habe 
ich bisher nur den ADC ergänzt (bug). Gibt es auch zum Thema Kalibration 
beim atx16d4 einen bug ?

Mit dem avrisp mkII kann ich die Kalibrationsbytes auslesen, leider 
stehen diese immer bei 0x0444, darum nehme ich an, dass diese nicht 
übernommen werden,

Zum COde:



ADCA.CALL=read_calibration_byte(PROD_SIGNATURES_START+ADCACAL0_offset);
ADCA.CALH=read_calibration_byte(PROD_SIGNATURES_START+ADCACAL1_offset);


....

uint8_t read_calibration_byte( uint8_t index )
{
uint8_t result;

/* Load the NVM Command register to read the calibration row. */
NVM_CMD = NVM_CMD_READ_CALIB_ROW_gc;
result = pgm_read_byte(index);

/* Clean up NVM Command register. */
NVM_CMD = NVM_CMD_NO_OPERATION_gc;

return( result );
}


Leider bringt auch der direkte Eintrag nicht viel: Keine Verbesserung 
oder Verschlechterung, auch das auslesen mit avrstudio4 + mkII bringt 
immernoch 0x0444

Kurz vor dem aktivieren des adc´s nutze ich die calibration.

Kann mir jemand hierbei helfen, vielleicht korrekte io Headerdatei zum 
atxmega1d4 ? danke.

von xmega (Gast)


Lesenswert?

Hallo,

gutzia schrieb:
> Kann mir jemand hierbei helfen

dein Code zur Kalibrierung ist soweit in Ordnung.

#define ADCACAL0_offset 0x20 // zum Auslesen ADC Offset aus Flash
#define ADCACAL1_offset 0x21 // dsgl

Du liest aus dem Flash 0x0444 und schreibst es automatisch in die 
Register ADCA.CALL/ADCA.CALH.

Hier wird es verarbeitet.

Im Flash bleibt der Wert 0x0444 immer gleich!!

Jetzt eine  Frage zur Messung: ADC -> Diff- oder Unsigned-Mode (gegen 
GND)?

Nur im Unsigned-Mode kommt der Offset zum Tragen!

Näheres zur Ungenauigkeit und Kalibrierung des ADC hier:

http://bascom-forum.de/showthread.php?2198-ATXMEGA-kleines-einmaleins-Erste-Schritte-mit-ATxmega/page3


Gruß XMEGA

von gutzia (Gast)


Lesenswert?

Hallo Xmega und danke für die Antwort.

Ich nutze Unsigned-Mode. Der Offfset ist klar, mich wunderts halt nur 
wenn ich mit der Spannung am ADC eingang hochfahre, dass dann dort ein 
Sprung oder sogar mehrere drinnen ist. Im Code nehme ich keinen Fehler 
an, da je nach Gerät unterschiedliche Ausprägungen der Sprünge 
vorkommen. Ich nutze auch drei Eingänge und bei allen passiert das 
gleiche, obwohl andere shunts genutzt werden. Daher ging ich davon aus, 
dass es mit dem ADC zusammenhängt, da bei allen Eingängen der selbe 
genutzt wird.

Kalibration ist da meine letzte Hoffnung. Mich wunderts eben das ich im 
avrstudio immer nur 0x0444 auslesen kann. Was ist das für eine 
Kalibration wenn immer der selbe WErt da steht, dann kann ichs ja gleich 
lassen.

In dem Link, den du mir genannt hast, ist die rede davon, dass das 
reinschreiben in seiner Version noch nicht möglich ist, zu der D-Reihe 
konnte ich nichts finden.

Hat jemand noch eine Idee oder den D4 mit gleichem Problem ?

von Coder (Gast)


Lesenswert?

Schau dir die Errata an. Die XMegas haben noch einige Probleme

von gutzia (Gast)


Lesenswert?

Schon getan, aber nichts trifft auf das Phänomen oben hin !

von xmega (Gast)


Angehängte Dateien:

Lesenswert?

Hallo gutzia,

gutzia schrieb:
> Kalibration ist da meine letzte Hoffnung

an der Kalibrierung kann es nicht liegen, die Änderungen liegen im 1..2 
mV Bereich.

Wenn du die Kalibrationsdaten mit dem AVRISP mk2 auslesen kannst, kann 
auch dein Xmega die Funktion ausführen!

Was das Ganze aber soll, habe ich an meinen neueren Xmegas auch noch 
nicht zwingend erforschen können. Änderungen im Messergebnis waren nicht 
erkennbar. Kann bei allen Atxmegas.. 0x0444 auslesen. Was das am 
Ergebnis ändern soll habe ich bereits erwähnt.

Das "Zappeln" der Werte kann natürlich auch an Hardware und Software 
liegen! Eine Qualitäts-Referenzspannung am externen Eingang(AREF) 
bewirkt Wunder.

Ich habe auch 20 bis 30 Versuche unternommen, um diese Schwankungen zu 
erforschen. Bin von komplexen Projekten wieder auf kleinste Versuche mit 
dem ADC zurückgefallen. Mit dem Erfolg, dass ich jetzt in der Lage bin, 
mit sauberer Leiterbahnführung, Abblock-Kondensatoren, guten 
Referenzquellen ein einigermaßen zufriedenes Ergebnis zuhaben.Fast 
vergessen:  Auch der Wert des Taktes  (ADC_PRESCALER_DIV128_gc) sollte 
nicht zu nieder sein.

Das "Zappeln" beginnt bei mir erst ab der 4. bis 5. Kommastelle.

Einen Demo-Code liegt zum studieren bei.

Viel Spß beim basteln

Gruß Xmega

von xmega (Gast)


Lesenswert?

Hallo,

habe noch einen Vermerk über die Kalibration gefunden:


early revisions (xmega board) were not calibrated, thus 0xff
later revisions have a "best guess" middle value (=0x444), this is the 
middle calibration value for each of the first three adc stages.
0x444 will already improve adc performance
further test improvement with indiviuall chip calibration will then 
improve again 1-2LSBs


Gruß Xmega

von gutzia (Gast)


Lesenswert?

Wir konnten jetzt eine Fehlereingrenzung machen und die Aussage treffen, 
dass diese Stufen nur bei der internen 1 V zu stande kommt. Mit der 
VCC/1,6 funktioniert alles einwandfrei.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.