AD-Wandler werte zufällig bei Analog-Touch-Panel

OP Persönliche Seite #1256899
Lesenswert?
• ▲
▼
Hallo,

ich habe ein analoges Touchpanel an einen Analogen Port eines PIC18F452 
angeschlossen.
Solange ich auf das Touchpanel keinen Druck ausübe bekomme ich zufällige 
Werte zwischen 0 und 1023.

Ich habe die Vermutung, dass ich die PINs der Ports nicht sauber setze 
o.ä.

Kann mir da jemand auf die Sprünge helfen das Problem zu beheben?

Folgende-Anschlussbelegung:
1
#define BOTTOM    PIN_B3
2
#define LEFT    PIN_A0
3
#define TOP    PIN_A1
4
#define RIGHT    PIN_B4

Zum Lesen der Werte (X/Y) habe ich zwei Routinen
1
int16 read_x_val(void) {
2
   // Left(A0) / Right(B4) output - Top(A1) / Bottom(B3) - input
3
  set_tris_a(0x02);
4
  set_tris_b(0x08);
5
  //delay_ms(10);
6
  output_bit(RIGHT,1);
7
  output_bit(LEFT,0);
8
  //delay_ms(10);
9
  setup_adc(ADC_CLOCK_DIV_4);
10
  setup_adc_ports(AN0_AN1_AN3); // Messen an Top
11
  set_adc_channel(1);
12
  delay_ms(10);
13
  return(read_adc());
14
}
15

16
int16 read_y_val(void) {
17
  // TOP(A1) / BOTTOM(B3) output  -  LEFT(B4) / RIGHT(A0) Input!
18
  set_tris_a(0x01);
19
  set_tris_b(0x10);
20
  //delay_ms(10);
21
  output_bit(TOP,0);
22
  output_bit(BOTTOM,1);
23
  //delay_ms(10);
24
  setup_adc(ADC_CLOCK_DIV_4);
25
  setup_adc_ports(AN0); // Messen an Right(0)
26
  set_adc_channel(0);
27
  delay_ms(10);
28
  return(read_adc());
29
}

Und aufrufen benutze ich die Funktionen im Main()-Programm und lasse mir 
jeweils das passende Pixel auf einem GLCD setzen.
1
while(true) {
2
  xval = read_x_val();
3
  yval = read_y_val();
4
  if(xval > 100 || yval > 100) {
5
    display_setpixel((int8)((int32)((xval-320)*128)/(670-320)),(int8)((int32)((yval-450)*64)/(540-450)),1);
6
  }
7
}

Ich bin über jeden Hinweis dankbar!

Gruß,
 Tobias

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