Cześć,
Pozwól, że przejdę do konkretów.
1. Możesz napisać program tak, żeby aktywować timer tylko wtedy, kiedy masz aktywny klawisz.
2. Dlaczego chcesz mieć klawisz na tym samym pinie co wyjście timera?
3. Jeśli chcesz liczyć, ile razy klawisz został aktywowany (naciśnięty), potrzebujesz zdefiniować zmienną, którą będziesz zwiększać o 1 przy każdym wciśnięciu klawisza. Wykrywanie jego wciśnięcia możesz realizować w pętli programu lub z wykorzystaniem przerwań. PWM do tego nie służy.
4. Częstotliwość pracy timera (sygnału PWM) to częstotliwość taktowania procesora, podzielona przez preskaler użyty do skonfigurowania timera, to do potęgi -1 i razy wartość MAX zliczania timera i znowu do -1. Czyli, na przykład:
f_taktowania = 8MHz, preskaler = 8, timer 16 bitowy co daje MAX = 65535 ((2^16) - 1). Oczywiście MAX można ustawić na mniejszą wartość, jeśli się nie mylę (Atmegi serii 88 do 328 miały taką możliwość) oraz zależy od tego, jak skonfigurujesz timer. Na ten moment przyjmijmy jednak prostą konfigurację.
Zatem:
Okres zliczania = T = 65535*(8000000/8)^(-1) ; Częstotliwość = 1/T. Wychodzi około 15,26Hz. Dla timera 8-bitowego byłoby to odpowiednio MAX = 255, zatem f = 3921,57Hz.
Częstotliwość nie oznacza jednak długości trwania impulsu. Jeśli chciałbyś mniej więcej oszacować czas trwania impulsu dla danej wartości wpisywanej do timera, by uzyskać pewne wypełnienie (PWM), to zamiast MAX podstawiasz wartość, którą wpisujesz do rejestru.
Nie chcę wszystkiego dawać na tacy, ale myślę, że to powinno Ci wystarczyć, by zrozumieć temat i skonstruować własne przekształcenia wzorów do uzyskania różnych parametrów timera i PWM.