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);
}
Lesezeichen