Witam,
Przy wykonywaniu ćwiczenia z panelem dotykowym natkąłem na dziwny problem. Otóż przy prostym programiku który zmienia kolor tła przy dotknięciu działa prawidłowo (w programie nie jest wykorzystany odczyt współrzędnych); problem pojawia się dopiero gdy przechodzę do odczytu współrzędnych z STMPE811, mianowicie współrzędne udaję się odczytać raz, dwa, rzadziej trzy. Po tym nic się nie dzieje - brak reakcji na dotyk.
Początkowo myslałem, że błąd leży w moim programie (w ramach nauki napisał go samodzielnie), jednak po załadowaniu programu z płytki jest dokładnie tak samo.
Dodam, że pracuję na Atmega644PU - akurat taki miałem. Żeby odpalić bibliotekę mk_stmpe811.c musiałem dokanać jej modyfikacji (w Atmega644PU są inne rejetry w porównaniu do użytej przez Mirka Atmega32).
Oryginalny fragment:
Kod:
#if USE_IRQ_NR == 0
// inicjalizacja przerwania synchronicznego INT0
// IRQ_DIR &= ~IRQ_PIN;
IRQ_PORT |= IRQ_PIN;
GICR |= (1<<INT0);
MCUCR &= (1<<ISC01); // zbocze opadające
#endif
#if USE_IRQ_NR == 1
// inicjalizacja przerwania synchronicznego INT1
// IRQ_DIR &= ~IRQ_PIN;
IRQ_PORT |= IRQ_PIN;
GICR |= (1<<INT1);
MCUCR &= (1<<ISC11); // zbocze opadające
#endif
#if USE_IRQ_NR == 2
// inicjalizacja przerwania asynchronicznego INT2
// IRQ_DIR &= ~IRQ_PIN;
IRQ_PORT |= IRQ_PIN;
GICR |= (1<<INT2);
MCUCSR &= (1<<ISC2); // zbocze opadające
#endif
Zmiany które wprowadziłem:
Kod:
#if USE_IRQ_NR == 0
// inicjalizacja przerwania synchronicznego INT0
// IRQ_DIR &= ~IRQ_PIN;
IRQ_PORT |= IRQ_PIN;
EIMSK |= (1<<INT0);
EICRA &= (1<<ISC01); // zbocze opadające
#endif
#if USE_IRQ_NR == 1
// inicjalizacja przerwania synchronicznego INT1
// IRQ_DIR &= ~IRQ_PIN;
IRQ_PORT |= IRQ_PIN;
EIMSK |= (1<<INT1);
EICRA &= (1<<ISC11); // zbocze opadające
#endif
#if USE_IRQ_NR == 2
// inicjalizacja przerwania asynchronicznego INT2
// IRQ_DIR &= ~IRQ_PIN;
IRQ_PORT |= IRQ_PIN;
EIMSK |= (1<<INT2);
EICRA &= (1<<ISC2); // zbocze opadające
#endif