Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATmega 128 - Wykorzystanie przerwań

bartek31071 16 Sty 2013 15:23 1134 4
  • #1 16 Sty 2013 15:23
    bartek31071
    Poziom 9  

    Witam
    Mój problem polega na równoczesnym wykorzystywaniu przerwań int7-5 wraz z przerwaniami int3-0.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Gdy korzystam tylko z przerwań int7-5 wszystko działa natomiast po włączeniu dodatkowo przerwań int3-0, przerwania zaczynają działać priorytetowo tzn. aby uruchomić przerwanie int3 muszą być najpierw uruchomione przerwania int0-2( najpierw int0 następnie int1 potem int2 i dopiero zadziała mi przerwanie int3). Ze względu iż jestem początkujący chciałbym się dowiedzieć czy jest możliwość ustawienia przerwań int 3-0 by działały w ten sam sposób co przerwania int7-4, czyli aby po wciśnięciu przycisku, który jest podpięty pod int3 od razu nastąpiło przerwanie jak to jest przy przerwaniach int7-5. Z góry dziękuje za pomoc.

    0 4
  • #2 16 Sty 2013 15:36
    piotrva
    Moderator na urlopie...

    Na podstawie Twojego programu nie można nic powiedzieć co się dzieje z przerwaniami, bo:
    1. Nie włączasz podciągania na pinach przerwań - to znaczy, że może na nich przy braku zwarcia do masy występować zarówno 0 jak i 1 - przerwania mogą szaleć
    2. Zważ na to, że Ty w przerwaniu przełączasz stan diody, a zjawisko drgań styków moze powodować kilka-kilkanaście przerwań na jedno wciśnięcie
    3. takie działanie nie nazywa się tak czy inaczej priorytetowaniem. Priorytetowanie przerwań byłoby wtedy, gdyby jedno mogło przerwać wykonywanie innego.

    0
  • #3 16 Sty 2013 16:29
    bartek31071
    Poziom 9  

    piotrva napisał:
    1. Nie włączasz podciągania na pinach przerwań - to znaczy, że może na nich przy braku zwarcia do masy występować zarówno 0 jak i 1 - przerwania mogą szaleć

    Nie jestem pewny czy o to Ci chodzi ale przyciski gdy są rozwarte połączone są z zasilaniem 5 V przez rezystor 1k natomiast po przyciśnięciu go jest połączony z masą, więc wydaje mi się że może występować albo 1 gdy przycisk jest rozwarty albo 0 gdy zwarty, jednakże mogę się mylić.
    piotrva napisał:
    2. Zważ na to, że Ty w przerwaniu przełączasz stan diody, a zjawisko drgań styków moze powodować kilka-kilkanaście przerwań na jedno wciśnięcie

    Wiem że zjawisko drgań styków może powodować kilka przerwań na jedno wciśnięcie, jednakże gdy używam tylko przerwań int7-5 po wciśnięciu przycisku odpowiednia dioda zmienia swój stan(czasami nie następuje przy każdym wciśnięciu co jest spowodowane właśnie zjawiskiem drgań styków).
    piotrva napisał:
    3. takie działanie nie nazywa się tak czy inaczej priorytetowaniem. Priorytetowanie przerwań byłoby wtedy, gdyby jedno mogło przerwać wykonywanie innego.

    Chodziło mi o to że gdy chce wykorzystać przerwania int7-5 i int3-0 to aby włączyć przerwanie int7-5 muszę mieć wciśnięte wszystkie przyciski od przerwań int3-0 a dopiero potem mogę wcisnąć przycisk od któregoś z przerwań int7-5 by ono zadziałało. Moje pytanie więc brzmi czy jest możliwość przy wykorzystywaniu wszystkich przerwań, o których jest mowa bym nie musiał wciskać innych przycisków oprócz tego, który jest podpięty pod przerwanie, które chcę wykonać.

    0
  • Pomocny post
    #4 16 Sty 2013 16:48
    piotrva
    Moderator na urlopie...

    1. ok, z 1 się wycofuję bo masz zrobione zewnętrzne pull-upy ale niepotrzebnie mnożysz rezystory, gdyż takowe są wewnątrz procesora - wystarczy tylko włączyć je z poziomu programu.
    2. to teoretycznie może powodować problem - najlepiej sprawdzaj przerwania w jakiś inny sposób - np. w każdym tylko zapalać lub gasić diodę
    3. Rozumiem istotę Twojego problemu, ale z punktu widzenia nazewnictwa nie można nazwać tego priorytetowaniem
    --
    4. A jak ustawione fusebity? Wyłączyłeś kompatybilność z atmega103?

    0
  • #5 16 Sty 2013 17:04
    bartek31071
    Poziom 9  

    piotrva napisał:
    4. A jak ustawione fusebity? Wyłączyłeś kompatybilność z atmega103?

    Miałem włączoną kompatybilność, po jej wyłączeniu wszystko działa jak sobie zaplanowałem :D Wielkie dzięki za pomoc :) Problem uważam za rozwiązany.

    Dodano po 1 [minuty]:

    Oczywiście w podzięce kliknąłem "pomógł"

    0