www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik XMega128A1 ADC


Autor: Michelin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich beschäftige mich gerade mit dem ADC des XMega128A1. Leider weiß ich 
gerade nicht mehr weiter, ich hoffe, dass sich jemand von euch damit 
auskennt. Aus dem Datenblatt werde ich auch nicht ganz schlau!

Ich versuche eine Einzelmessung des ADC anzutriggern. Das funktioniert 
prinzipiell auch, auf den ADC Kanälen 0...3. Wenn ich aber auf den 
Kanälen 4...7 Messen will weiß ich nicht welches Bit in welchem Register 
ich setzen soll. Ebenfalls weiß ich nicht, in welchem register dann der 
AD-Wert abzuholen ist.

Für die Kanäle 0...3 gibt es die Register ADCB.CH1...3.CTRL und 
ADCB.CH1...3.RES. Im CTRL-Register trigger ich die Messung an und hole 
den Wert dann im RES-Register ab.

Diese Register gibt es aber für die Kanäle 4...7 nicht, was soll ich 
tun.

So mache ich es z.B. bei Kanal 1:
ADCB.CH1.CTRL = 0x81;   // ADCB Kanal 1 starten / sigle ended positiv input
while(ADCB.INTFLAGS == 0)  // Warten bis AD-Wandlung beendet
{}
value = ADCB.CH1.RES;    // AD-Wert abholen
ADCB.INTFLAGS = 0x01;    // ADC Neustart frei schalten

Danke für eure Hilfe!

Gruß

Autor: Michelin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entschuldigung, ich hab noch vergessen zu schreiben, dass es auf den 
Kanälen 1...3 einwandfrei funktioniert!

Autor: Michelin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab mir schon gedacht, dass niemand gleich ne Antwort hat. Schade!

Autor: Reader (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

die "Kanäle 0...3" haben nichts mit den ADC-Eingangspins zu tun.
Du kannst auf einem Kanal bleiben und im MUXCTRL Register die Eingänge 
auswählen.

ADCB.CH1.MUXCTRL = 0x00 // ADC0  0x08 ADC1  0x10 ADC2  u.s.w.
ADCB.CH1.CTRL = 0x81;   // ADCB Kanal 1 starten / sigle ended positiv 
input
while(ADCB.INTFLAGS == 0)  // Warten bis AD-Wandlung beendet
{}
value = ADCB.CH1.RES;    // AD-Wert abholen
ADCB.INTFLAGS = 0x01;    // ADC Neustart frei schalten

Autor: Michelin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antwort!

Ich versteh dann aber nicht, was das mit ch0...ch3 soll?

Kann ich dann immer auf ch0 messen und nur das mux umschalten?

Gruß

Autor: Dominik M. (lauso)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf den Analogeingängen des PORT B stehen Dir vier Kanäle Ch0 bis Ch3 
zur verfügung. Du hast nun die Möglichkeit über den Multiplexer einem 
Pin einen Kanal zuzuordnen.
So kann mann mit einem Kanal, nach beendeter Messung über den Multplexer 
das Eingangssignal eines anderen Eingangs messen.
Ich kann aber auch einem Pin alle vier Kanäle zuweisen und Messen.

Autor: Michelin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaub ich habs jetzt verstanden! Jetzt funktioniert es auch bestens. 
Ich hab jetzt ch0 auf PORTA, ch1 auf PORTB und ch2 auf interner 
Temperatur. Geht einwandfrei.

Danke für eure Hilfe!

Sind die ch0...ch3 vier unabhängige AD-Wandler, oder steckt da auch ein 
Multiplexer dahinter?

Gruß

Autor: Dominik M. (lauso)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die AD Channels sind unabhängig. Die Wandlung funktioniert ja folgender 
maßen. Im ersten Step der Wandlung wird geprüft ob der angelegte Wert 
größer oder kleiner Uref/2 ist. Im zweiten Step wo er im Bereich von 
Uref/4 liegt. Das wir bei einer 12Bit AD Wandlung insgesammt 12x 
durchgeführt. Das ganze findet im Pipelined ADC Block statt. Wann jetzt 
der Wert von Channel0 im Step2 ist kann der Wert von Channel1 im Step1 
bearbeitet werden. Durch dieses verfahren besteht die Möglichkeit 2 
Millionen Wandlungen pro Sekunde durchzuführen. Anbei ein Screenshot 
damit Du das Prinzip besser erkennst.

Autor: Michelin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die tolle Erklärung, ich bin jetzt auch auf der Höhe!

Danke

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.