Hallo ich beschäftige mich nun schon längerer Zeit mit den Xmega128A1.
Nun lese ich im Datenblatt vom Mega dass ich die Referenzspannung vom
ADC intern auf 1V oder VCC/1,6V schalten kann. Im Datenblatt vom ADC
steht aber VCC-0,6 und im AVR-Studio wiederum VCC/1,6V.
Das VCC/1,6V hört sich für mich nicht sehr plausiebel an.
Ist das ein Fehler vom Studio?
Hallo Forum,
auch ich setzte mich gerade mit dem XMEga (128A1) ADC auseinander.
Programmierung erfolgt in GCC.
In einem ersten Schritt habe ich die Eingänge gepollt.
Ergebnis: bis auf einen Offset von konstant 54 mV in Ordung. (Ich lese
wie im Atmel Beispiel das Calibration Byte aus und korrigiere) Mein
Aufbau bekommt keinen Preis was A/D Trennung anbelangt, von daher ist
das Ergebnis naja, insofern ok, dass nach rechnerischem Abzug die ADC
Werte passen.
Was ich (noch) nicht kapiere:
Initialisierung:
1
/* Move stored calibration values to ADC A. */
2
ADC_CalibrationValues_Set(&ADCA);
3
/* Get offset value for ADC A. */
4
offset=ADC_Offset_Get(&ADCA);
5
6
/* Set up ADC A to have signed conversion mode and 12 bit resolution. */
für Kanal 4??
Oder habe ich irgendeinen Denkfehler? Gut, ich kann Eventsystem, DMA,
Ints etc benutzen; aber auch ein erster Schritt sollte eigentlich alle 8
Kanäle sequentiell gelesen ausspucken, ohne viel SW-Klimbim....
Register sehe ich aber nur 0..3, also 4 Ergebnisse und nicht deren 8?
Bin gespannt auf Antworten,
Gruß
Helmut
Hallo Forum,
ich schiebe noch eine Frage hinterher: (nicht um den Staub des Threads
abzuschütteln, sondern als echte Frage)
hat schon jemand probiert externe Referenzspannung für den ADC des
XMEga128A1 Rev H zu benutzen?
Also entweder habe ich einen Initialisierungsfehler oder der µC
spinnt....
:-) was ist wohl wahrscheinlicher? :-)
Ich nehme die Init-Routine und schreibe
1
ADC_Reference_Config(&ADCA,ADC_REFSEL_AREFA_gc);
PA0 hat bei mir 2V; Pa1..Pa7 haben Spannungsteiler (in
Orgelpfeifenmanier) die von 0,8V .. 0,3V gehen (dass ich was sehe)
Mit interner Referenz funktioniert der µC und die ADC Wandlung, extern
Ref hängt sich der komplette Controller auf.
Bin gespannt ob noch jemand darauf gestossen ist.
Gruß
Helmut
OK, gelöst.
Seltener Fall: der µC spinnt. Hatte alles richtig - mit anderem
Testboard läufts.
Ich habe nur einen riesigen Offset von 96mV. Die Teilerverhältnisse
passen aber (==> Ofs konstant)
Gruß
Helmut
Mahlzeit!
Ich habe auch mal eine Frage zu dem ADC des XMega128A1:
Wie lade ich die Kalibrierungswerte CALL und CALH (reinschreiben, das
ist klar). Da ich vorgefertigte Treiber vermeide (die schreinbe ich
lieber selbst...) muss ich wissen wie ich an die Werte im NVM komme. Da
bin ich im Moment am verzweifeln.
gruseliger Gruß
Grusel
Hallo,
Dr. Grusel schrieb:> an die Werte im NVM komme
#define ADCACAL0_offset 0x20 // zum Auslesen ADC Offset aus Flash
#define ADCACAL1_offset 0x21 // dsgl
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 );
Gruß XMEGA