Gast
#1930213
Hallo, bin noch blutiger Anfänger im Bereich Mikrocontroller Technik, will nun aber für ein kleines Schulprojekt einen Touch Taster einbauen. Bin auf die Projektseite von Martin Junghans gestoßen http://www.jtronics.de/elektronik-avr/kapazitives-touch-pad.html und das hat mir dann recht gut gefallen, hab den Code von seiner seite jetzt einmal in AVR studio kopiert, bekomme aber ziehmlich viele Fehlermeldungen :( Bräuchte theoretisch auch nur ein Touch Schalter welcher einfach einen Ausgang anschalten soll. Bei dem Programm seh ich leider gar nicht durch weil keine Ports sondern x und y verwendet werden, kann mir einer von euch helfen das zu verstehen? Gerade so ewtas wie ATOMIC_BLOCK und so weiter übersteigt halt meinen Horizont. Hier mal der Code: #include <avr/io.h> #define SK_A0 (1<<5) #define SK_B0 (1<<4) #define SK_A1 (1<<2) #define SK_B1 (1<<3) #define SK_A2 (1<<0) #define SK_B2 (1<<1) #define SK_A012 (SK_A0 | SK_A1 | SK_A2) #define SK_B012 (SK_B0 | SK_B1 | SK_B2) #define MAX_CYCLE 2000 uint16_t keys[3]; void read_senskey( void ) { uint16_t i = MAX_CYCLE; uint8_t a, b, x, y; ATOMIC_BLOCK(ATOMIC_FORCEON){ a = DDRA & ~(SK_A012 | SK_B012); b = PORTA & ~(SK_A012 | SK_B012); y = SK_B012; // input mask do{ DDRA = a; // tristate PORTA = b | SK_B012; DDRA = a | SK_B012; // Bx = strong high DDRA = a; // tristate PORTA = b; DDRA = a | SK_A012; // Ax = strong low if( --i == 0 ) // timeout break; x = y & PINA; // not immediately after DDRA if( x ){ if( x & SK_B0 ) keys[0] = i; if( x & SK_B1 ) keys[1] = i; if( x & SK_B2 ) keys[2] = i; } y ^= x; // clear processed input }while( y ); // all inputs done DDRA = a | SK_A012 | SK_B012; // discharge } } int main (void) { return 0; } Danke schon mal im vorraus.