www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC channel im interrupt umschalten (AVR Xmega)


Autor: hillbilly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich möchte die Channel bei einem xmega die Channel im interrupt auf 
andere Pins muxen leider fürt das zu Falschen werten.
Geht das überhaupt so?
Muss man dabei etwas beachten oder sollte das grundsätzlich nur mit 
einem Wert im Muxregister gehen?

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sicher ist das Problem loesbar, sonst wuerde kein XMega verkaufbar. Was 
sagt dennn das Datenblatt ? Das Datenblatt von Atmel, nicht das 
Gekuerzte von einem Trittbrett Anbieter.

Autor: Knut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist kein Problem, aber meine Glaskugel sagt das in Zeile 57 ein Der 
MUX falsch gesetzt wird...


Gruß Knut

Autor: XMEGA (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus,


hillbilly schrieb:
> Muss man dabei etwas beachten oder sollte das grundsätzlich nur mit
> einem Wert im Muxregister gehen?

sicherlich funktioniert das.

Du musst nur die zeitliche Abfolge im Auge haben.

- Interrupt 1
- Channel wechseln
- AD-Wandlung abwarten
- Wert berechnen, sichern oder ausgeben usw.

- Interrupt 2
- usw.

Also während einer AD-Wandlung keinen Wechsel der Channel-Adresse 
zulassen.
Auch beachten, dass die Speicher-Variable durch den Interrupt nicht 
verbogen wird.

Gruß XMEGA

Autor: Hagen Re (hagen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls du nur max. 4 verschiedene Pins muxen möchtest dann geht das beim 
XMEGA komplett in Hardware. Jeder der max. 4 Channel eines ADCs wird 
statisch mit den Pins verbunden (mux). Des ADC Core wird so intiallisert 
das er alle Channels reihum sampelt. Das macht der ADC Core dann 
vollautom. in Hardware und du musst nur noch alles starten und abwrten 
bis die Daten gesampelt wurden. Nun noch mit DMA verknüpft und deine 
Daten werden sogar autom. in den SRAM Buffer geschrieben.

Ich gehe mal davon aus das die Reihenfolge der Channels immer gleich 
ist, also reihum und nicht wahlfrei.

Gruß Hagen

Autor: hillbilly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, Danke.

Ich möchte 8 Pins Muxen komme also mit 4 Channals nicht aus bzw muss 
Umschalten.
Ich hab mienen  Quellcode leider grade nicht hier, aber der Ablauf ist 
Folgender:

AD Wandlung Starten CH0-3 für pin 0-3

Interrupt wenn letzte Wandlung (CH3) abgeschlossen ist
In der Interruptroutine:
gewandelten wert speichern.
auf Pin4-7 muxen
Wandlung starten


Und beim nächsten Interrupt vise versa.

Ausgabe unter Interruptsperre.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Umschalten der MUXe erfordert einige µs Zeit, das war auch schon bei 
den normalen Megas so. Direkt nach dem Umschalten zu messen, führt dazu, 
dass man entweder noch den vorher geschalteten Kanal misst oder halt 
irgendwas zwischen diesem und dem aktuellen Kanal. Im Manual bzw. der 
AppNote zum ADC steht, wann man die MUXe umschalten darf und wann man es 
lieber lässt. Mit dem Interrupt hat das nichts zu tun.

Autor: hillbilly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah Ja! Dass ist eine Erkärung.

dann muss ich den Neustart der Messung wohl aus dem Interrupt rausholen.


Danke !!

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hillbilly schrieb:
> dann muss ich den Neustart der Messung wohl aus dem Interrupt rausholen.

Nicht unbedingt. Da immer nur ein Kanal zu einer Zeit arbeitet, kannst 
Du den MUX für einen gerade abgearbeiten Kanal problemlos umschalten. Da 
Du 4 Kanäle hast, brauchst Du jeden Kanal nur 1x umzuschalten. Beim 
nächsten Sweep werden dann die neuen Werte eingelesen.

Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

die von Hagen erwähnte Funktion "Input Source Scan" habe ich bei den 
Xmegas noch gar nicht gefunden. Aber das klingt sehr interessant.

Leider habe ich noch nicht ganz verstanden, wie ich diese automatische 
Umschaltung initialisieren, bzw. nutzen kann.
Kann mir hier jemand weiter helfen, bzw. ein Beispiel für die 
Initialisierung posten.

folgende Vorgang zum schnellen Auslesen des ADC stell ich mir vor.
- alle 8 ADC Eingänge werden zu 4 Differentiellen ADC Kanälen 
initialisiert
- Der Channel 0 liest nacheinander das Ergebnis der 4 Kanäle
- Das Ergebnis wird vom DMA ausgelesen und in ein Array gespeichert.

Vorteil, ich muss nur ein DMA Channel zum lesen der ADC Kanäle 
verwenden.
Wenn das so nicht realisiert werden kann, wi

Das Thema wurde auch hier kurz aufgegriffen...
Beitrag "Kann DMA beim XMega ADC den Muxer steuern?"

Grüße Martin

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.