Witam szanownych użytkowników,
Programuję mikrokontroler ATmega32, mam problem z przerwaniem INT2, które po starcie urządzenia się odpala mimo, że nie puszczam sygnału wyzwalającego przerwanie.
Ponieważ projekt jest za duży, żeby zamieścić go w całości zamieszczam tylko najważniejsze fragmenty, a dodatkowo dodam plik .ZIP ze spakowanym projektem, który można odpalić w AVR Studio.
OPIS PROBLEMU:
Program startuje inicjalizuje różne moduły (USART, PWM, PORTY) - wszystko działa doskonale i było testowane.
Program sam w sobie pracuje w pustej pętli, z której tylko wyskakuje do obsługi przerwań. Kiedy dodałem obsługę przerwań INT0,1,2 nadal wszystkie moduły działają doskonale, przerwania reagują w czasie pracy właściwie, jednak zaraz po wystartowaniu mikrokontrolera odpala mi się przerwanie INT2 - nie rozumiem dla czego. Jak widać w obsługach przerwań zewnętrznych zrobiłem ustawienie stanu wysokiego na pewnych pinach do których mam podłączone diody. Przerwanie INT0 i INT1 działają zgodnie z moim zamiarem, a przerwanie INT2 - prawie. Kiedy już mikrokontroler pracuje po starcie, mogę to przerwanie wywoływać tak jak zamierzałem. Chciałbym pozbyć się tego efektu, że przerwanie jest odpalane zaraz po starcie.
Dodam jeszcze moje spostrzeżenie. W dokumentacji mikrokontrolera ATmega32 było, że należy ustawić piny INT0, INT1, INT2 jako wyjścia. Kiedy zakomentowałem te linie kodu:
problem nadal występował, jednak samoczynne wyzwolenie przerwania INT2 po resecie odbywa się nieco później.
Najbardziej mnie denerwuje, że INT0 i INT1 działają dobrze tylko INT2 nawala, bo skoro umiałem skonfigurować INT0 i INT1 dlaczego z INT2 się nie udało?
Proszę o rady.
Programuję mikrokontroler ATmega32, mam problem z przerwaniem INT2, które po starcie urządzenia się odpala mimo, że nie puszczam sygnału wyzwalającego przerwanie.
Ponieważ projekt jest za duży, żeby zamieścić go w całości zamieszczam tylko najważniejsze fragmenty, a dodatkowo dodam plik .ZIP ze spakowanym projektem, który można odpalić w AVR Studio.
Kod: text
OPIS PROBLEMU:
Program startuje inicjalizuje różne moduły (USART, PWM, PORTY) - wszystko działa doskonale i było testowane.
Program sam w sobie pracuje w pustej pętli, z której tylko wyskakuje do obsługi przerwań. Kiedy dodałem obsługę przerwań INT0,1,2 nadal wszystkie moduły działają doskonale, przerwania reagują w czasie pracy właściwie, jednak zaraz po wystartowaniu mikrokontrolera odpala mi się przerwanie INT2 - nie rozumiem dla czego. Jak widać w obsługach przerwań zewnętrznych zrobiłem ustawienie stanu wysokiego na pewnych pinach do których mam podłączone diody. Przerwanie INT0 i INT1 działają zgodnie z moim zamiarem, a przerwanie INT2 - prawie. Kiedy już mikrokontroler pracuje po starcie, mogę to przerwanie wywoływać tak jak zamierzałem. Chciałbym pozbyć się tego efektu, że przerwanie jest odpalane zaraz po starcie.
Dodam jeszcze moje spostrzeżenie. W dokumentacji mikrokontrolera ATmega32 było, że należy ustawić piny INT0, INT1, INT2 jako wyjścia. Kiedy zakomentowałem te linie kodu:
sbi DDRD, 2 ; noga INT0 jako wyjście
sbi PORTD, 2 ; noga PD2 w stanie wysokim
sbi DDRD, 3 ; noga INT1 jako wyjście
sbi PORTD, 3 ; noga PD3 w stanie wysokim
sbi DDRB, 2 ; noga INT2 jako wyjście
sbi PORTB, 2 ; noga PB2 w stanie wysokimproblem nadal występował, jednak samoczynne wyzwolenie przerwania INT2 po resecie odbywa się nieco później.
Najbardziej mnie denerwuje, że INT0 i INT1 działają dobrze tylko INT2 nawala, bo skoro umiałem skonfigurować INT0 i INT1 dlaczego z INT2 się nie udało?
Proszę o rady.