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
Datenblatt ?! schon mal reingeschaut ???? - alles was geht steht da geschrieben - alles andere geht nicht ...
Natürlich hab ich da reingeschaut aber mein Englisch ist nicht so gut dass ich es verstehen kann.
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.
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; }
>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.
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.