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

ATtiny13 Programowy PWM; Timer0 oraz przerwania; [c][eclipse]

DRAZEK87 02 Cze 2019 11:38 1464 5
REKLAMA
  • #1 17992304
    DRAZEK87
    Poziom 15  
    Witam
    Na wstępie przedstawiam schemat zagadnienia :
    ATtiny13 Programowy PWM; Timer0 oraz przerwania; [c][eclipse]


    Mikrokontroler ATtiny13A
    Zasilanie Vcc +5V;
    LED1_ dioda zielona = sygnalizacja zasilania;
    LED2_ dioda żółta = sygnalizacja stanu pracy układu w tym że:

    stan spoczynku/oczekiwania = miganie diody co 1 s;
    stan aktywny = dioda "zapalona";

    LED3_ dioda czerwona = sygnalizacja stanu wyjścia układu w tym że:

    stan spoczynku = dioda wygaszona;
    stan aktywny = sygnał PWM 25kHz, wypełnienie 50%; pomiar oscyloskopem;

    Wartości elementów biernych na schemacie zostały pominięte; lecz ich obecność ma wpływ na poprawne działanie programu;
    dla przykładu można przyjść że: R1/4/5= 330R; C1= 100uF/6V; C2/3= 100nF/10V; R2/3= 10kR.

    Elementem wywołującym pracę układu jest Switch S1 który zwierając port PB1 do masy wywołuję zewnętrzne przerwanie INT0, a tym samym uruchamia stan aktywny.

    Przerwanie INT0 według mnie powinno reagować na stan niski gdzie w rejestrze MCUCR wartość ISC01 oraz ISC00 ma 0.
    Do wygenerowania sygnału PWM o częstotliwości przykładowo 25kHz celowo chciałbym wykonać to programowo nie używając sprzętowych PWM'ów.
    Zakładam że do tego celu należało by użyć przerwania sprzętowego timera0 8-bitowego który w tym układzie posłużyłby do utworzenia częstotliwości.

    Pytanie do programistów: Jaką byście metodę wybrali na realizacje tego zadania? Czy lepiej skorzystać z przepełnienia licznika w trybie Normal czy też wybrać tryb CTC jako porównanie. Mile widziana każda wypowiedz najlepiej wsparta przykładowym kodem którego dokładnie przeanalizuje.
  • REKLAMA
  • #2 17992405
    trol.six
    Poziom 31  
    Tryb 2,5,7, ze względu na regulacje częstotliwości rejestrem OCRA. Aczkolwiek zrobiłbym jednak sprzętowy jeśli nie stoi to w sprzeczności z innymi założeniami.
    .
  • REKLAMA
  • #3 17992418
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #4 17992443
    DRAZEK87
    Poziom 15  
    Nawiązując do wypowiedzi użytkownika "trol.six" sprzętowy PWM odpada ponieważ :
    1/ pin PB1 ma być zarezerwowany wyłącznie na przerwanie zewnętrzne INT0;
    2/ pin PB0 mógłby być wyjściem PWM sprzętowym ale dla uproszczenia schematu podałem jedną diodę jako wyjście, a co w przypadku jeśli chciałbym otrzymać ten sam przebieg na trzech innych pinach czyli : PB2; PB3 oraz PB4;

    zaś użytkowniku "stmx" drgania styków są mi znane i jestem świadomy jakie to ma konsekwencję na poprawność działania przerwania; ale załóżmy że sygnał podawany na INT0 jest idealny powiedzmy sterowany za pośrednictwem innego procesora gdzie mamy tylko dwa stany logiczne 0 oraz 1, żadnych drgań ....

    więc jakie pomysły na program ...
  • REKLAMA
  • #5 17992459
    trol.six
    Poziom 31  
    Ale zważ że 25Khz to oznacza obsługe co 50KHz czyli przy częstotliwości attiny 10MHz masz 200 cykli do dyspozycji. Poza tym, oznacza również, że przy zgłoszeniu przerwania innego w tym samym czasie będziesz miał zakłócenia w generowaniu przebiegu.

    Poza tym, niczego to nie zmienia w mojej wypowiedzi.
  • #6 17992524
    DRAZEK87
    Poziom 15  
    Wyliczyłem sobie to tak :
    Hz=1/s czyli s=1/Hz;
    Hz to 25kHz czyli 25000Hz;

    s= 1/25000 = 0,00004s

    jeśli przemnoże to przez 1000 otrzymam 0,04ms a kolejne 1000 da nam 40 us czyli tyle ile potrzebuję

    25kHz to okres - T
    ATtiny13 Programowy PWM; Timer0 oraz przerwania; [c][eclipse]


    rzeczą ludzką jest błądzić rzeczą głupców jest trwać w błędzie....czy popełniłem błąd wyliczeniach ...

    wstępna konfiguracja programu :

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


    zajętość procesora 18,9%...
REKLAMA