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

Atmega8, przerwania od dwóch timerów.

jarecki1989 07 Cze 2012 01:27 1184 3
  • #1 07 Cze 2012 01:27
    jarecki1989
    Poziom 24  

    Witam, mam problem z napisanym przez mnie kodem. Założenie jest takie, że przy puszczonym przycisku Timer1 skonfigurowany jako Fast PWM ma mi powoli rozjaśniać listwę RGB. W momencie przyciśnięcia swicha Timer0 ma odliczyć 5 sekund i PWM ma mi ściemnić listwę. Ma to działać dla 4-ech niezależnych od siebie kanałów. Póki co zacząłem zrobić Fast PWM i ten działa jak należy. Następnie chciałem zrobić żeby działał sobie PWM a Timer0 ma cyklicznie co sekunde mrugać inną diodą. I tu zaczęły się schody. Bo w momencie kiedy mam włączone przerwania od Timera1 to nie działa mruganie diodą. Ale jak usunę przerwanie od Timera1 to wtedy dioda mruga. Nie mam pojęcia dlaczego tak się dzieje. Wiem, że te PWM`y będę musiał zrobić programowe ale póki co zastanawia mnie ten problem. Proszę o pomoc w wyjaśnieniu. Z góry dziękuję.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Poradziłem sobie w ten sposob:
    Kod: c
    Zaloguj się, aby zobaczyć kod



    oraz
    Kod: c
    Zaloguj się, aby zobaczyć kod



    Ale dlaczego tak jest ?

    0 3
  • Pomocny post
    #2 07 Cze 2012 08:51
    Krauser
    Poziom 26  

    A co jeśli do pierwotnego kodu dodasz:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #3 07 Cze 2012 12:12
    dondu
    Moderator Mikrokontrolery Projektowanie

    To co napisał kol. Krauser jest bardzo istotne, ponieważ włączasz przerwanie od porównania (1<<OCIE1B), a nie masz funkcji jego obsługi, co de facto powoduje skok do adresu 0000h, czyli rozpoczęcie działania programu od początku..

    Drobna uwaga do komentarza:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    W Atmega8 nie ma preskalera 512 - ustawiasz 256.

    0
  • #4 07 Cze 2012 12:59
    jarecki1989
    Poziom 24  

    I właśnie walę się w głowę ... Spróbuję zwalić ten błąd na późną godzinę, w której pisałem. Dokładnie tak jak piszecie, nie było obsługi od 2-go porównania. Teraz wszystko jasne. Co do prescalera to oczywiście wiem, nie wiem czemu tak zakomentowałem. Dziękuje !!

    0