timer w trybie CTC


Witam wszystkich tym razem jako zadający pytanie - ciekawe kto mi zechce pomóc ;-)

Wymyśliłem sobie nowe zadanie. A mianowicie zbudować generator, no może to za duże słowo ale niech będzie - generator przebiegu prostokątnego.
Innowacyjność ma polegać na tym, iż ma być generowany przebieg prostokątny o programowo zmienianym okresie, ALE czas trwania stanu wysokiego ma być zawsze stały/niezmienny (dla ułatwienia przyjmijmy przykładowo, że ma trwać zawsze 50ms), czyli ma się wydłużać lub skracać czas trwania stanu niskiego.
Ponieważ chciałem się nie narobić, oraz by mikrokontroler odwalał za mnie całą robotę, zacząłem przeglądać co te nasze timery potrafią (a potrafią naprawdę wiele).. Wypatrzyłem tryb CTC. No i prawie cała robota była by załatwiona, PRAWIE bo dzięki temu trybowi otrzymamy przebieg prostokątny, zmienny w banalny sposób programowo, lecz o wypełnieniu 50% !!.
Całość załatwia jedna linia kodu a właściwie konfiguracja timera, dla przykładu:

Config Timer1 = Timer, Prescale = 256, Compare B = Toggle, Compare A = Disconect, Clear Timer = 1

i tak na pinie OC1B, otrzymamy falę prostokątną zależną od częstotliwości rezonatora oraz podzielnika Prescale i wartości wpisanej do rejestru Compare1b. Czyli mamy sprzętowy generator o modyfikowanym okresie, lecz założenia było bardziej paskudne - wypełnienie nie może być równe 50% a czas trwania stanu wysokiego ma być stały.

Tak więc potrzebny jest wspaniały pomysł, a wszelkie Wasze sugestie w tym zakresie będą bezcenne.

Dziś mamy sylwestra więc przy okazji:

Setki korków od szampana,
przetańczenia aż do rana.
Fajerwerków kolorowych,
animuszy nie zimowych.
Kupę śmiechu, zero kaca
No bo wkrótce czeka praca.