Hallo,
Habs nun endlich gefunden, hab auch das Szenario nach gestellt und den Code in GCC umgesetzt.
Hab anstatt den 100 Ohm Widerständen, 4x 470 Ohm verwendet.
Nur mir fehlt es gerade irgendwie an Verständnis.
A) Dürfen sich die Werte von X und Y nicht verändern, solang das Touchpanel nicht berührt wird?
Ich hab irgendwie die Dumpfe Vermutung das meine beschaltung nicht stimmt, weil wenn ich nun PIN1 und PIN2 mit meinem Messgerät, ändern sich die Werte.
Messe ich nun PIN1 und 3 krieg ich nur einen festen Wert der sich trotz berühren nicht verändert.
Ebenfalls verhält sich auch PIN 2&4 so...
Also mein Code sieht aktuell wie folgt aus:
Code:uint16_t ReadChannel(uint8_t mux) { uint8_t i; uint16_t result; ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0); // Frequenzvorteiler // setzen auf 8 (1) und ADC aktivieren (1) ADMUX = mux; // Kanal waehlen ADMUX |= (1<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */ ADCSRA |= (1<<ADSC); // eine ADC-Wandlung while ( ADCSRA & (1<<ADSC) ) { ; // auf Abschluss der Konvertierung warten } result = ADCW; // ADCW muss einmal gelesen werden, // sonst wird Ergebnis der nächsten Wandlung // nicht übernommen. /* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */ result = 0; for(i=0; i<3; i++) { // Eine Wandlung ADCSRA |= (1<<ADSC); // Auf Ergebnis warten... while(ADCSRA & (1<<ADSC)); result += ADCW; } ADCSRA &= ~(1<<ADEN); // ADC deaktivieren (2) result /= 3; // Summe durch vier teilen = arithm. Mittelwert return result; } void debug(void) { char string[100]; uint16_t adcval1; uint16_t adcval2; uint16_t adcval3; uint16_t adcval4; DDRA |= (1<<PA0) | (1<<PA2); // ADC0 & ADC2 = Output PORTA |= (1<<PA0); // ADC0 = High PORTA &= ~(1<<PA2); // ADC2 = low DDRA &= ~(1<< PA1) | (1<< PA3); // ADC1 & ADC3 = Input _delay_ms(20); /*adcval1 = ReadChannel(0); /* MUX-Bits auf 0b0000 -> Channel 0 */ /*adcval2 = ReadChannel(1); /* MUX-Bits auf 0b0000 -> Channel 1 */ /*adcval3 = ReadChannel(2); /* MUX-Bits auf 0b0000 -> Channel 2 */ adcval4 = ReadChannel(3); /* MUX-Bits auf 0b0000 -> Channel 3 */ adcval4 = 1024 - adcval4; DDRA |= (1<<PA1) | (1<<PA3); // ADC0 & ADC2 = Output PORTA |= (1<<PA1); // ADC0 = High PORTA &= ~(1<<PA3); // ADC2 = low DDRA &= ~(1<< PA0) | (1<< PA2); // ADC1 & ADC3 = Input adcval3 = ReadChannel(2); /* MUX-Bits auf 0b0000 -> Channel 3 */ adcval3 = 1024 - adcval3; lcd_ClearScreen(); lcd_GotoXY(1,1); lcd_SelectFont(Arial, lcd_ReadFontData, BLACK); sprintf(string, "CA0: %i\nCA1: %i\nCA2: %i\nCA3: %i ", adcval1, adcval2, adcval3, adcval4); lcd_Puts(string); _delay_ms(20); }







Zitieren

Lesezeichen