Witam
Na wstępie przedstawiam schemat zagadnienia :
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.
Na wstępie przedstawiam schemat zagadnienia :
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.