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

ATmega8a - program zawiesza się po otrzymaniu przerwania od timera0

jo_666 29 Gru 2012 21:11 1650 8
REKLAMA
  • #1 11713238
    jo_666
    Poziom 10  
    Witam,

    W programie przedstawionym poniżej nie zostaje wywołana obsługa przerwania. Próbowałem na innych timerach tez bez skutku.
    AvrStudio 6, Atmega8a, optymalizacja O2.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 11713399
    lukash90
    Poziom 16  
    przydał by się jeszcze kod funkcji Display
  • #3 11713580
    jo_666
    Poziom 10  
    w zależności od podanego numeru zapala on odpowiednią diodę, gdy podaje zero gasi wszystkie.Np.:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #4 11713707
    lukash90
    Poziom 16  
    i po czym twierdzisz, że program się zawiesza? Zauważ, że każesz mu za każdym razem wykonać to samo czyli raz zapali ci te diodki i potem już żadnej wizualnej reakcji nie będzie.
    A tak na marginesie to to ci się kompiluje? Nie znalazłem nigdzie w libAvr zdefiniowanego PORTD6, ewentualnie jest PD6.
  • #5 11713735
    jo_666
    Poziom 10  
    Problem jest w tym ze tych diodek nie zapala.

    Też się zdziwiłem, że zamienili PD6 na PORTD6. Przykład z iom8a.h:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #6 11713763
    BlueDraco
    Specjalista - Mikrokontrolery
    Nie pokazałeś całego programu, więc trudno zgadywać. Ustawiasz DDRD?
  • REKLAMA
  • #7 11713808
    jo_666
    Poziom 10  
    Tak. Zapalanie poszczególnych diod itp. działa. Problem objawia się podczas uruchomienia przerwania dla Timera
    TIMSK |= ( 1 << TOIE0 );

    Nie pokazałem całego programu aby nie zaciemniać sprawy (nie będę tu zamieszczał kilku plików) i sprowadziłem go do jak mi się wydaje najprostszego przypadku niedziałania :)

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Przy zakomentowanej linii TIMSK |= ( 1 << TOIE0 ); dioda 5 miga. Gdy ta linia jest odkomentowana dioda nie miga co świadczy o zawieszeniu wykonywania programu. Diody 6 i 7 pozostają takie jak przy inicjalizacji.
  • #9 11715205
    jo_666
    Poziom 10  
    Temat rozwiązany. Zapominalstwo się kłania. Zapomniałem, że na AVR nie wpalamy *.elf tylko *.hex. Dziękuje kolegom za pomoc.
REKLAMA