logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

AT90PWM - Jak skonfigurować przerwanie od Timer0? Kod nie wchodzi do przerwania

dzi_dziuś 25 Wrz 2016 22:58 807 8
REKLAMA
  • #1 15954820
    dzi_dziuś
    Specjalista AGD
    Witam wszystkich

    Piszę z bardzo dziwnym problemem, chyba pierwszy raz zdarza mi się, że nie mogę skonfigurować przerwania w AVR...
    Kod został już maksymalnie uproszczony byle dojść tylko do momentu, w którym program wchodzi do przerwania, bez skutku. Mógłbym prosić o poradę, może już z tego patrzenia nie widzę jakiegoś podstawowego błędu :) W nocie katalogowej nie widzę jakiś szczególnych zaleceń.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 15954835
    excray
    Poziom 41  
    Za sei musisz dać nieskończoną pętlę, np. while(1);. Inaczej zezwolenie na przerwanie jest kasowane.
  • REKLAMA
  • #3 15954861
    Konto nie istnieje
    Konto nie istnieje  
  • #4 15954938
    dzi_dziuś
    Specjalista AGD
    excray napisał:
    Za sei musisz dać nieskończoną pętlę, np. while(1);. Inaczej zezwolenie na przerwanie jest kasowane.

    Pętla za sei(); oczywiście jest, nie wklejałem jej tutaj, bo problem jest z konfiguracją przerwania. Myślałem, że pomijam jakiś rejestr ...

    niveasoft napisał:
    W CTC period ustala OCR0A
    Jak OCR0A jest mniejsze od OCR0B to to drugie nigdy nie wystąpi.

    Niestety żadne kombinacje nie pomagają :(
  • REKLAMA
  • #5 15954957
    excray
    Poziom 41  
    dzi_dziuś napisał:
    Pętla za sei(); oczywiście jest, nie wklejałem jej tutaj, bo problem jest z konfiguracją przerwania. Myślałem, że pomijam jakiś rejestr ...

    Słusznie. Trzeba oszczędzać czcionkę, bo jeszcze się zużyje. Już widać gdzie jest problem. W tej części kodu, której nie raczyłeś załączyć, gdyż uznałeś, że ona nie ma tutaj znaczenia.
  • #6 15954961
    dzi_dziuś
    Specjalista AGD
    Bo ta część kodu naprawdę nie ma znaczenia ...
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Jeśli napiszę na początku programu:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    To dioda załącza się od razu po wgraniu programu, więc problem jest ewidentnie z niewchodzeniem w funkcję przerwania ... :(


    To jest cały kod, który używam do przetestowania przerwania:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #7 15955015
    yokoon
    Poziom 29  
    Witam.
    Czy ten zapis jest poprawny?
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Myślę jż powinno być:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    I zmienić wektor przerwania.
  • Pomocny post
    #8 15955215
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #9 15955965
    dzi_dziuś
    Specjalista AGD
    yokoon napisał:
    Witam.
    Czy ten zapis jest poprawny?
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Myślę jż powinno być:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    I zmienić wektor przerwania.


    Kombinowałem tak kilka razy i ani rusz, a problem tak prosty, że wstyd się przyznać ... volatile int flaga i maszyna ruszyła :)
    Dzięki za rady na pewno przydadzą się na przyszłość :D
REKLAMA