AVR LCD i przerwanie

Jul 02, 2007 9 Replies

Mam AVRa AT90S2313 do którego podłączyłem LCD. Wszystko jest OK dopóki nie zaczynam obsługiwać przerwania z INT1. Wszystko programuje w CodeVisionAVR C Compiler



Czy ktoś może spotkał się podobnym problemem i wie jaka może być przyczyna problemu.



uC PC pisze:

Tzn. jakiego problemu?

Problem polega na tym że jak nie uaktywniam przerwania na INT1 // External Interrupt(s) initialization // INT0: Off // INT1: Off GIMSK=0x00; MCUCR=0x00;

to na wyświetlaczu LCD 2x20 widać napis który che wyświetlić. A jak włączam przerwanie na INT1: // External Interrupt(s) initialization // INT0: Off // INT1: On // INT1 Mode: Low level GIMSK=0x80; MCUCR=0x00; GIFR=0x80; to napis znika, na wyświetlaczu nic się nie wyświetla.

Problem jest powtarzalny.

Myslisz, ze bez pokazania istotnych czesci programu i sposobu w jaki jest podlaczony LCD ktos wpadnie co jest nie tak? Napisz moze na jakas grupe typu paranauki - bedzie wieksza szansa na znalezienie wrozki :) Poszukalbym problemu w handlerze przerwania INT1.

uC PC pisze:

Po wódce zbiera mi się na pomoc ludziom, i nawet włącza mi się tryb wróżbity - jesteś pewien, że INT1 powinno być aktywne poziomem? Bo zdajesz sobie konsekwencje z tego faktu, prawda?

A mo¿e pora skorzystaæ z debugera (avr studio). Mo¿e on prawde powie.

Moja rada: jak chcesz zobaczyæ, gdzie w danej chwili wykonuje siê program to umieszczaj po drodze funkcje (znaczniki) np. pod³±cz buzzer i napisz funkcje beep(int ilosc) i korzystaj z tego. Bo jak program "pójdzie w maliny" to wtedy o tym wiesz, a w innym przypadku drxapiesz siê po g³owie i myslisz czemu Twój idealny kod nie chce dzia³aæ.

A może problem jest w tym ze nie można korzystać równocześnie z przerwań za pomocą przycisków i interfejsu wire 1 po którym mam podłączony wyświetlacz LCD? A być może wybrałem zły tryb przerwania (poziom niski) były jeszcze do wyboru opadające i rosnące zbocze, choć te też sprawdzałem i nic nie pomaga. Bez przerwań, tak jak pisałem jest wszystko OK, więc musi być coś nie tak z konfiguracją przerwań. Może ktoś zna namiary na stronę gdzie byłby użyty równocześnie LCD i przerwania.

W wiêkszo¶ci aplikacji tak jest. We¼ poka¿ resztê programu.

JJJK

a co za roznica jakie peryferia, czy konkretnie LCD czy np mrygajaca diodka? przerwaniu nie robi to roznicy, a ilosc roznych wariancji obslugi LCD i przerwan jest ogromnai mysle ze tylko ci namiesza. dodaj jakies debuggowanie do procka, wyrzucanie na UART komunikatow w krytycznych punktach programu i sam znajdziesz szybko

Samo wykorzystanie przerwania i 1wire jednocze¶nie (je¶li nie chodz± na tej samej "nó¿ce" :P) nie jest b³êdem, ale pytanie, jak to jest obs³ugiwane :)... 1wire u¿ywasz w trybie sprzêtowym czy programowym?? Jak w programowym, to mo¿e po wej¶ciu w przerwanie program tak d³ugo w nim wisi, ¿e opó¼nia siê komunikacja na tyle, ¿e siê sypie wszystko??

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required