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

Przerwania na Atmega162 - obsługa

10 Paź 2007 15:58 1387 6
  • Poziom 9  
    Heja, mam problem z obsluga przerwan na atmege. Przejrzalem wszystkie porady wpisywalem mnostwo roznych przykladow i nic.
    Ponizej kod ktory jest jak w kazdym przykladzie ale u mnie nie dziala

    Code:
    #include <avr\io.h>
    
    #include <avr\delay.h>
    #include <avr\interrupt.h>

    SIGNAL (SIG_INTERRUPT0)
    {
     
      pik();
     
    }

    GICR |=0x40;
    MCUCR = _BV(ISC01)|_BV(ISC11);

    takie rejestry. Pomijam niepotrrzebne pierodly

    pik - na portach wywoluje bzyczek ktory chodzi poprawnie poza przerwaniem.

    Do wejscia int0 jest podlaczona masa i daje przerwanie ze zboczem opadajacym

    Dodam ze uzywam avr studio 4. costam i nic mi nie wywoluje tego przerwania. Sprawdzam flagi wystawiane w rejestrze przerwan i sie zmieniaja wiec jest przerwanie wystawiane (probowalem tez z timerami) ale samo przerwanie sie wykonac nie chce. W czym problem? Bo chyba wszystkie mozliwosci wyczerpalem juz:) Z gory dzieki za porade. Bo jak sie nie uda to na semblera bede musial przejsc a juz mnie na sama mysl skreca.

    Proszę umieszczać kod w znacznikach "Code" i poprawić błędy - funkcja "Pisownia". [c_p]
  • Poziom 15  
    a włączasz globalne pozwolenie na przerwania - sei? SREG...
  • Poziom 9  
    Oczywiscie ustawiam.
  • Poziom 27  
    Rozumiem, ze nie używasz trybów oszczędzania energii...
    Wyjaśnij co znaczy:
    Cytat:
    "Do wejscia int0 jest podlaczona masa i daje przerwanie ze zboczem opadajacym"
    To, że jest ustawiona flaga zgłaszająca przerwanie, to nie znaczy, że jest włączone przerwanie od właśnie tego pinu...
    zapis 0x40 oznacza 0b10000000 czyli ustawiasz pin zezwalający na przerwanie od INT1...
    Przerwania na Atmega162 - obsługa
    Cytat:
    "Oczywiście ustawiam"
    - nie nie ustawiasz :)
    Powinno być 0b11000000, jeśli nie lubisz zapisu binarnego, to w hex powinno byc zamiast 0x40 -->C0
  • Poziom 9  
    Heja, dzieki masz racej, ale nie pomoglo.

    INT0 czyli port pd2 podlaczam do masy i generuje przerwanie. Noi w tym przerwaniu ma mi sie buzzer wlaczyc noi tego nie czytni w ten sposob wiem ze nie dziala.
  • Poziom 27  
    czepiam się bo sformułowanie "podłaczam do masy" niewiele mi mówi... a wręcz przeciwnie - wprowadza w błąd. Rozumiem, że miałeś na myśli pulldown... ale w takim przypadku, jeśli masz podciąganie do masy i ustawione przerwanie zboczem opadającym, to powiedz mi, jak chcesz osiągnąć zejście z potencjału masy na jeszcze niższy??
    Aby przerwanie zadziałało, to stan początkowy musi być wysoki (patrz datasheet ile to jest) a następnie musisz zejść do poziomu bliskiego masie.
    Pozdrawiam
  • Poziom 9  
    Heja, masz racje bląd zrobilem. Juz wszystko chodzi dzieki za pomoc.