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.
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.
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?
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.