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

atmega328p przerwanie timera 8 bitowego

C-z-e-s-i-e-k 17 Wrz 2017 21:15 591 2
  • #1 17 Wrz 2017 21:15
    C-z-e-s-i-e-k
    Poziom 4  

    Korzystając z tego kursu Link nie moge uzyskać migania diody przy modyfikacji kodu:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    a gdy zmienie kod na taki to działa:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Dlaczego nie che działać pierszy kod ??

    0 2
  • Arrow Multisolution Day
  • #2 17 Wrz 2017 21:42
    maly_ninja
    Poziom 13  

    Dawno nie używałem AVR wiec mogę się mylić. Ale timer2_ovf_vect nie jest wywoływany po przepelnieniu TCNT2 (255 -> 0)? Jeśli tak to nie sprawdzisz tam wartości bo zawsze będzie taka sama (0?)

    0
  • Arrow Multisolution Day
  • #3 17 Wrz 2017 22:29
    dondu
    Moderator Mikrokontrolery Projektowanie

    Tak jak napisał kolega wyżej przerwanie OVF wykonuje się w momencie, gdy timer się przepełnia, co w tym przypadku oznacza jego wyzerowanie, czyli wyzerowanie rejestru TCNT2.

    W zależności od realizowanego programu moment wejścia w przerwanie może być nieco opóźniony w stosunku do momentu przepełnienia się licznika, a w tym czasie timer zlicza impulsy, bo jest niezależny od wykonania przez program funkcji przerwania. W związku z tym w funkcji przerwania, gdy sprawdzasz wartość TCNT2 może być równa zero lub większa niż zero (w zależności od ustawionego preskalera, czyli częstotliwości impulsów jaka trafia do timera).

    Sam moment wejścia w przerwanie także nieco trwa, ponieważ mikrokontroler musi wykonać np. odkładanie na stosie rejestrów, które użyje w przerwaniu oraz innych niezbędnych.

    Tutaj znajdziesz kurs AVR (i 300 innych artykułów): http://mikrokontrolery.blogspot.com/p/spis-tresci.html

    a w nim: http://mikrokontrolery.blogspot.com/2011/03/led-sterowany-przez-timer.html

    0