ATXMega 128A1 ADC Problem

Gast #1669845
Lesenswert?

Hallo,

ich versuche grade das resistive Touchpanel meines Displays mit einem 
xMega 128A1 auszulesen.
Das TP ist ein 4-wire TP.
Angeschlossen ist es an Port A wie folgt:
PA0 > Y-
PA1 > X+
PA2 > Y+
PA3 > X-

Mein Code sieht so aus:
1
int main(void){
2
  uint8_t xpos, ypos;
3
  int8_t buffer[10];
4

5
     //ADC Konfiguration
6
     ADCA.CTRLA = 0x01;      // ADC aktivieren
7
     ADCA.CTRLB = 0x0C;      // unsigned mode 8Bit und Freilauf Modus
8
     ADCA.REFCTRL = 0x20;    // Referenz VCC
9
   ADCA.EVCTRL = 0x80;     // sweepmode for channel 0,1 and 2
10
     ADCA.PRESCALER = 0x02;  // prescaler to 16 = 2MHz@32Mhz Systemclock
11

12

13
     //Konfiguration der einzelnen Kanäle
14
     ADCA.CH0.CTRL = 0x01;   //single-ended-positive
15
     ADCA.CH0.MUXCTRL = 0x08;// PA1 als ADCPin
16
      ADCA.CH1.CTRL = 0x01;   //single-ended-positive
17
     ADCA.CH1.MUXCTRL = 0x10;//PA2 als ADCPin
18

19
  while(1){
20
    PORTA.DIR = 0x05;
21
  PORTA.OUT |= (1<<PIN2);  //PA2 (Y+) High
22
  PORTA.OUT &= ~(1<<PIN0); //PA0 (Y-) Low
23

24
  _delay_ms(50);
25
  xpos = ADCA_CH0RES; // ADC_Wert von PA1 (X+) in xpos einlesen
26
  PORTA.DIR = 0x0A;
27
  PORTA.OUT |= (1<<PIN1); //PA1 (X+) High
28
  PORTA.OUT &= ~(1<<PIN3);//PA3 (X-) Low
29
  ypos = ADCA_CH1RES;// ADC_Wert von PA2  (Y+) in ypos einlesen
30

31
  sprintf( buffer, "X: %d", xpos );
32
  write_string(buffer, 10,10, BLACK, RED,0);
33
  sprintf( buffer, "Y: %d", ypos );
34
  write_string(buffer, 10,20, BLACK, RED,0);
35
  _delay_ms(50);
36
  }return 0;
37
}

Das Programm soll die ADC Werte erstmal auf dem Display anzeigen. Es 
zeigt lediglich einen X Wert von 255 und Y Wert von 55 an.
Wenn ich das TP ans Multimeter hänge verändert sich der Wert 
Positionsabhängig von ca 0.27-3.2V.

Hat einer von euch vielleicht eine Idee woran es liegen könnte?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren