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