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

Konfiguracja Timer1 w Atmega8 do przerwań co 1 sekundę - nie działa

henryxxl 16 Wrz 2017 18:40 2349 11
  • #1 16702788
    henryxxl
    Poziom 26  
    Witam.
    Po bardzo długiej przerwie z mikrokontrolerami chce uruchomić timer1 (16bit) który będzie wystawiał przerwanie od przepełnienia co 1 sekundę . Wszystkie informacje mam z noty aplikacyjnej a jednak dalej nie działa (dioda testowa jest sprawna więc można pominąć sprzęt.
    Proszę o wytłumaczenie.
    Pozdrawiam
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #2 16703006
    landy13
    Poziom 31  
    Włączasz przerwanie od porównania:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    a obsługujesz przerwanie od przepełnienia:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #3 16703026
    Konto nie istnieje
    Konto nie istnieje  
  • #4 16703215
    henryxxl
    Poziom 26  
    Dziękuję za odpowiedź koledzy;)
    Moja wtopa z złym ustawieniem przepełnienia, już poprawiłem na TIMSK |= (1<<TOIE1) ; ale kod dalej nie działa.
    Na temat if-a to porostu wcześniejszy kod który sprawdzał wartość równą 4 a tak na szybkości ustawiłem na 1 i wygląda to bez sensu.
    Może kolega powiedzieć coś więcej o ustawieniu ICR bo nie wiem do końca o co chodzi. Ogólnie na timer 1 uruchomiłem przerwanie ale bardzo mnie ciekawi co zrobiłem źle i nie działa mi to na timer 1.
    Pozdrawiam
  • #5 16703278
    Konto nie istnieje
    Konto nie istnieje  
  • #7 16703295
    landy13
    Poziom 31  
    W trybie CTC timer liczy tylko do wartości ICR (lub OCR) i się zeruje. Nie przepełni się. Skąd ma się wziąć przerwanie od przepełnienia?
  • #9 16703348
    Konto nie istnieje
    Konto nie istnieje  
  • #10 16703523
    henryxxl
    Poziom 26  
    Dziękuję za odpowiedź. Nie wiedziałem ze muszę podawać wartość OCR1A w przerwaniu bardziej wydawało mi się że trzeba zerować. Chcę użyskać przerwanie do 1 sekunde, 8000000/256=31250 jest dobrym obliczeniem? Taktowanie procka 8 Mhz.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #11 16703645
    landy13
    Poziom 31  
    henryxxl napisał:
    Nie wiedziałem ze muszę podawać wartość OCR1A w przerwaniu...
    Bo nie musisz. Piotrusiowi coś się pomieszało. Pewnie z trybem Normal, gdzie w przerwaniu podaje się wartość startową TCNT1.
  • #12 16703708
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA