Forum: Mikrocontroller und Digitale Elektronik Noch Problem mit XMEGA ADC


von Johann (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

Ich möchte alle 8 Pins (singleended) von Port A digitalisieren. Für die 
Umsetzung möchte ich keinen Freerun-Modus verwenden sondern die 
Digitalisierung selber triggern.

Momentan benutze ich eine 4 Channel-Pipeline. Jeder Channel ist einem 
anderen Pin zugewiesen (CH0 = PORTA.0, CH1 = PORTA.1 usw.). Wenn ich die 
Digitalisierung der 4 Channel starte und solange warte bis die 
Interruptflags aller 4 Channel den Zustand 1 besitzen dann lese ich die 
Werte aus dem Ergebnisregister aus. Dies funktioniert auch bereits schon 
gut.

Jedoch wenn ich die 4 Channels nach dem Auslesen der Ergebisse umstelle 
um dann die anderen 4 Pins (PORTA.4 bis PORTA.7) zu digitalisieren, dann 
erhalte ich fehlerhafte Werte. Dies ist leider reproduzierbar. Muss ich 
eine Wartezeit einhalten wenn ich die MUX umstelle? Ich habe leider 
keine Informationen dazu im Datenblatt gefunden.

Den Quellcode habe ich beigefügt.

von Thomas F. (tomasf)


Lesenswert?

Der ADC geht durch eine Pipeline, wenn du den Channel auf einen anderen 
Pin legst, sind in der Pipeline evtl. noch die letzten Werte des 
Channels von dem vorherigen Pin.

Diese sollte im Datasheet beschrieben sein. Es gibt auch eine 
application note "using the xmega ADC" (AVR1300). Da steht sicher auch 
was zu möglichen Wartezeiten, wenn ein Channel auf einen anderen Pin 
gelegt wird.

von Johann (Gast)


Lesenswert?

Thomas F. schrieb:
> Der ADC geht durch eine Pipeline, wenn du den Channel auf einen anderen
> Pin legst, sind in der Pipeline evtl. noch die letzten Werte des
> Channels von dem vorherigen Pin.

Was meinst Du denn genau damit? Muss ich die Pipeline mit FLUSH löschen 
bevor ich die Pin änder?

von Johann (Gast)


Lesenswert?

Ich habe mir noch mal das AVR1300 durchgelesen. Dort werden 2 Channel 
konfiguriert und anschließend die Digitalisierung gestartet. Es wird nur 
1 Sample aufgenommen dann ist das Beispiel zu Ende.

von Thomas F. (tomasf)


Lesenswert?

ist es denn überhaupt nötig, nach jeder Einzelmessung den Pin 
umzuschalten? ich könnte mir vorstellen, dass das ADC-System dafür gar 
nicht ausgelegt ist. Vielleicht lieber so:

-Pin umschalten, Pipline leeren.
-einige Messungen durchführen
-und wieder von vorn

von Johann (Gast)


Lesenswert?

Ob man es kann steht leider nicht im Datenblatt.

Wenn ich nur einen Kanal aktiviere kann ich dann einfach so zwischen den 
Pins umschalten ohne ein die Pipeline zu leeren?

Ich werde das mit der Pipeline leeren mal ausbrobieren.

von Johann (Gast)


Lesenswert?

So ich habe nun ein Spülung des ADCs vorgenommen und dann erst die 
Digitalisierung gestartet. Momentan sieht es so aus als wenn es 
funktioniert
1
// Flush ADC Pipeline
2
ADCA.CTRLA |= 0x02;
3
4
// Start the AD conversion on channel 0, 1 ,2 ,3
5
ADC->CTRLA |= 0x3C;

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.