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

[at90][c]Problem z częstotliwością w trybie Fast PWM

dawzuch 12 Lis 2011 10:47 1314 2
REKLAMA
  • #1 10129196
    dawzuch
    Poziom 9  
    Witam,
    Od jakiegoś czasu bawię się uC at90usb646. Do pinów portu B mam podłączony wyświetlacz LED. Zabrałem się za zrobienie programowego PWM. Wykorzystałem do tego dwa przerwania w trybie Fast PWM: przerwanie od przepełnienia licznika timer0 oraz przerwana od porównania wartości rejestru OCR z wartością rejestru TCNT0.
    Rozumiem że przerwania występują w momentach tak jak na wykresie poniżej(z DS).
    Problem polega na tym, że przy włączonym przerwaniu od przepełnienia, a wyłączonym od Compare wyświetlacz 'miga' jak obliczyłem z f=61[Hz]. Widać minimalnie to miganie. Natomiast, gdy włączam obsługę obu przerwań, wyświetlacz owszem przygasa przy zmianie wypełnienia, lecz przestaje 'migać'. Tak jakby zmianie uległa częstotliwość PWM. Zamieszczam schemat, wykres, kod. Proszę o wytłumaczenie, czy jest tak jak myślę.

    [at90][c]Problem z częstotliwością w trybie Fast PWM

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


    [at90][c]Problem z częstotliwością w trybie Fast PWM
  • REKLAMA
  • #2 10130311
    kriss68
    Poziom 20  
    Nie bardzo wiem, czemu przy włączonym przerwaniu od przepełnienia wyświetlacz miał by migać skoro włączany jest w przerwaniu ale nigdzie nie jest wyłączany. Dopiero jak odpalisz przerwanie od porównania to jest wyłączany. Czym to zasilasz? Bo może zasilanie Ci nie wyrabia? Jak wyliczyłeś to 61Hz?
  • #3 10130355
    dawzuch
    Poziom 9  
    Wkleiłem nie ten kod o który mi chodziło. Pominąłem zawartość pętli while. Podczas wystapienia przerwana od przepełnienia zmieniałem wartośc flagi na 0 lub 1 i raz zaswiecalem a raz gasiłem wyswietlacz. Dopiero teraz zauwazylem ze tym sposobem zwiększałem okres dwukrotnie i częstotliwość wynosiła 30,5 Hz stąd miganie.

    czestotliwosc liczyłem f_cpu/prescaler/256, tj. 16000000/256/1024= 61 Hz.

    W każdym bądź razie dziękuje za chęć pomocy
    Temat zamknięty
REKLAMA