mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Alle 16 Analogeingänge des ATxmega128A1 nutzen??


Autor: Sergej (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Ich hab gelesen dass der ATxmega128A1  16 Analogeingänge haben soll. Wie 
man 8 von denen konfigurieren kann weis ich, wie kann man aber alle 16 
konfigurieren??  Wie muss ich unten aufgeführtes Program abändern damit 
alle 16 Analogeingänge nutzen kann??




#include <avr/io.h>

int main(void)
{
PORTA.DIR = 0b00000000;
ADCA.CTRLA = 0b00000001;        // ADC aktivieren
ADCA.CTRLB = 0b00001100;        // unsigned mode 8Bit und Freilauf Modus
ADCA.REFCTRL = 0b00010000;      // Interne Referenz 1.6V
ADCA.EVCTRL = 0b11000000;       // sweepmode für Kanal 0,1,2 and 3
ADCA.PRESCALER = 0b00000000;   // Teilungsfaktor 4 von der Systemclock
ADCA.CH0.CTRL = 0b00000001;     // single-ended-positive
ADCA.CH0.MUXCTRL = 0b00000100;  // PA0 als ADCPin
ADCA.CH1.CTRL = 0b00000001;     // single-ended-positive
ADCA.CH1.MUXCTRL = 0b00001000;  // PA1 als ADCPin
ADCA.CH2.CTRL = 0b00000001;     // single-ended-positive
ADCA.CH2.MUXCTRL = 0b00010000;  // PA2 als ADCPin
ADCA.CH3.CTRL = 0b00000001;     // single-ended-positive
ADCA.CH3.MUXCTRL = 0b00011000;  // PA3 als ADCPin

PORTB.DIR = 0b00000000;
ADCB.CTRLA = 0b00000001;        // ADC aktivieren
ADCB.CTRLB = 0b00001100;        // unsigned mode 8Bit und Freilauf Modus
ADCB.REFCTRL = 0b00010000;      // Interne Referenz 1.6V
ADCB.EVCTRL = 0b11000000;       // sweepmode für Kanal 0,1,2 and 3
ADCB.PRESCALER = 0b00000000;   // Teilungsfaktor 4 von der Systemclock
ADCB.CH0.CTRL = 0b00000001;     // single-ended-positive
ADCB.CH0.MUXCTRL = 0b00000100;  // PA0 als ADCPin
ADCB.CH1.CTRL = 0b00000001;     // single-ended-positive
ADCB.CH1.MUXCTRL = 0b00001000;  // PA1 als ADCPin
ADCB.CH2.CTRL = 0b00000001;     // single-ended-positive
ADCB.CH2.MUXCTRL = 0b00010000;  // PA2 als ADCPin
ADCB.CH3.CTRL = 0b00000001;     // single-ended-positive
ADCB.CH3.MUXCTRL = 0b00011000;  // PA3 als ADCPin

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Datenblatt ?! schon mal reingeschaut ???? - alles was geht steht da 
geschrieben - alles andere geht nicht ...

Autor: Sergej (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Natürlich hab ich da reingeschaut aber mein Englisch ist nicht so gut 
dass ich es verstehen kann.

Autor: Dominik M. (lauso)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wird schwierig aber sollte gehen.
Du hast vier Kanäle zur Verfügung.
Das bedeutet nicht das dies nun auf vier Pins gelegt wird.
Du must wohl einen Kanal für zwei Pins verwenden.
Über den MuxCTRL sollte das klappen.

Autor: Sergej (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab die Register jetzt auch mehrfach benutzt aber  es funktioniert 
irgendwie nicht  so wirklich ich hab die werte mal von dem einen Pin mal 
von dem anderen. Kann jemand vielleicht einen nützlichen Tipp geben??

#include <avr/io.h>

unsigned char Analog_PortA_Pin1, Analog_PortA_Pin2, Analog_PortA_Pin3, 
Analog_PortA_Pin4, Analog_PortA_Pin5, Analog_PortA_Pin6, 
Analog_PortA_Pin7;
unsigned char Analog_PortB_Pin0, Analog_PortB_Pin1, Analog_PortB_Pin2, 
Analog_PortB_Pin3, Analog_PortB_Pin4;

int main (void) {

  ADCA.CTRLA = 0b00000001;      // ADC aktivieren
      ADCA.CTRLB = 0x00001100;      // unsigned mode 8Bit
      ADCA.REFCTRL = 0b00100000;    // Interne Referenz PortA
      ADCA.EVCTRL = 0b11000000;     // sweepmode für Kanal
      ADCA.PRESCALER = 0b00000000;  // Teilungsfaktor

  ADCB.CTRLA = 0b00000001;      // ADC aktivieren
     ADCB.CTRLB = 0b00001100;      // unsigned mode 8Bit
     ADCB.REFCTRL = 0b00100000;    // Interne Referenz PortA
     ADCB.EVCTRL = 0b11000000;     // sweepmode für Kanal
  ADCA.PRESCALER = 0b00000000;  // Teilungsfaktor

while(1){
    ADCA.CH0.CTRL = 0b00000010;   //Referenzeingang
   ADCA.CH0.MUXCTRL = 0b00000000;

     ADCA.CH1.CTRL = 0b00000001;
   ADCA.CH1.MUXCTRL = 0b00001000;
  Analog_PortA_Pin1 = ADCA_CH1RES;

     ADCA.CH2.CTRL = 0b00000001;
    ADCA.CH2.MUXCTRL = 0b00010000;
  Analog_PortA_Pin2 = ADCA_CH2RES;

    ADCA.CH3.CTRL = 0b00000001;
    ADCA.CH3.MUXCTRL = 0b00011000;
  Analog_PortA_Pin3 = ADCA_CH3RES;

  ADCA.CH0.CTRL = 0b00000001;
   ADCA.CH0.MUXCTRL = 0b00100000;
  Analog_PortA_Pin4 = ADCA_CH0RES;

     ADCA.CH1.CTRL = 0b00000001;
   ADCA.CH1.MUXCTRL = 0b00101000;
  Analog_PortA_Pin5 = ADCA_CH1RES;

     ADCA.CH2.CTRL = 0b00000001;
    ADCA.CH2.MUXCTRL = 0b00110000;
  Analog_PortA_Pin6 = ADCA_CH2RES;

    ADCA.CH3.CTRL = 0b00000001;
    ADCA.CH3.MUXCTRL = 0b00111000;
  Analog_PortA_Pin7 = ADCA_CH3RES;


     ADCB.CH0.CTRL = 0b00000001;
   ADCB.CH0.MUXCTRL = 0b00000000;
  Analog_PortB_Pin0 = ADCB_CH0RES;

     ADCB.CH1.CTRL = 0b00000001;
   ADCB.CH1.MUXCTRL = 0b00001000;
  Analog_PortB_Pin1 = ADCB_CH1RES;

     ADCB.CH2.CTRL = 0b00000001;
    ADCB.CH2.MUXCTRL = 0b00010000;
  Analog_PortB_Pin2 = ADCA_CH2RES;


    ADCB.CH3.CTRL = 0b00000001;
    ADCB.CH3.MUXCTRL = 0b00011000;
  Analog_PortB_Pin3 = ADCA_CH3RES;

  ADCB.CH0.CTRL = 0b00000001;
   ADCB.CH0.MUXCTRL = 0b00100000;
  Analog_PortB_Pin4 = ADCA_CH0RES;

}
return 0;
}

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Kann jemand vielleicht einen nützlichen Tipp geben??

Ja, normalerweise muss man auf eine AD-Wandlung warten.
Mux umschalten und dann gleich einlesen geht nicht.

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.