Witam.
Mam problem z kodem programu. Do pinu F5 XMegi128A3U mam podpięty przycisk wywołujący przerwanie INT0. O tak:
Kod włączający i konfigurujący przerwanie:
I kod po wywołaniu przerwania:
Problem polega na tym, że gdy przyciskam przycisk to wszystko jest ok. Wywołuje się raz przerwanie i na terminualu wyświetla się napis "on".
Natomiast, gdy puszczam przycisk coś jest nie tak ponieważ przerwanie wywołuje się 2 razy. 2 razy wyświetla się napis "off".
I nie chodzi tu raczej o drgania styków ponieważ nawet jak dam opóźnienie _delay_ms(1000) to i tak "off" wyświetli się zawsze 2 razy.
PORT_ISC_LEVEL_gc używam ze względu na to, że domyślnym stanem przycisku jest "wciśnięty" a domyślnym stanem uC uśpiony. Po zwolnieniu przycisku uC będzie się budził. A z tego co wiem budzenie możliwe jest to tylko stanem niskim. Zmiana PORT_ISC_LEVEL_gc na PORT_ISC_FALLING_gc pomaga. Ale nie mogę jej
użyć bo chcę budzić uC.
Poniżej screen po użyciu PORT_ISC_FALLING_gc.
Pytania:
- dlaczego z PORT_ISC_FALLING_gc działa a z PORT_ISC_LEVEL_gc nie działa poprawnie,
- jak zrobić aby z PORT_ISC_LEVEL_gc działało poprawnie ?
pozdrawiam
Mam problem z kodem programu. Do pinu F5 XMegi128A3U mam podpięty przycisk wywołujący przerwanie INT0. O tak:
Kod włączający i konfigurujący przerwanie:
Kod: C / C++
I kod po wywołaniu przerwania:
Kod: C / C++
Problem polega na tym, że gdy przyciskam przycisk to wszystko jest ok. Wywołuje się raz przerwanie i na terminualu wyświetla się napis "on".
Natomiast, gdy puszczam przycisk coś jest nie tak ponieważ przerwanie wywołuje się 2 razy. 2 razy wyświetla się napis "off".
I nie chodzi tu raczej o drgania styków ponieważ nawet jak dam opóźnienie _delay_ms(1000) to i tak "off" wyświetli się zawsze 2 razy.
PORT_ISC_LEVEL_gc używam ze względu na to, że domyślnym stanem przycisku jest "wciśnięty" a domyślnym stanem uC uśpiony. Po zwolnieniu przycisku uC będzie się budził. A z tego co wiem budzenie możliwe jest to tylko stanem niskim. Zmiana PORT_ISC_LEVEL_gc na PORT_ISC_FALLING_gc pomaga. Ale nie mogę jej
użyć bo chcę budzić uC.
Poniżej screen po użyciu PORT_ISC_FALLING_gc.
Pytania:
- dlaczego z PORT_ISC_FALLING_gc działa a z PORT_ISC_LEVEL_gc nie działa poprawnie,
- jak zrobić aby z PORT_ISC_LEVEL_gc działało poprawnie ?
pozdrawiam