Bist du dir sicher, dass du richtig geschaut hast? Die Frage wird hier fast täglich gestellt und auf verschiedenste Art und Weise beantwortet.

Im Grunde läuft es so:
  1. PWM-Modus aussuchen (8,9,10Bit)
  2. bei z.B. 8Bit: 2 x 2^8 = 512 -> passenden Prescaler wählen, damit die 512 Ticks/Increments in 20ms abgearbeitet werden
  3. ins OCR Register Wert schreiben, so dass OCR/2 * ZeitProTick= 1 bis 2 ms


Wenn nun jemand einen Taster drückst, inkrementierst/dekrementierst du einfach den Wert in OCR und somit die "High-Zeit" deines PWM-Signals.
Code:
// initalize mega8 Timer1 with 9Bit, inverted, Prescaler 256
// this gives us a signal with 21.76ms at 12MHz
TCCR1A |= (1<<WGM11)|(1<<COM1A1)|(1<<COM1A0);
TCCR1B = (1<<CS12); 

OCR1A = 476; // pulse of 1.5ms 512- 1500*(F_CPU/256/1000000)/2
Steht eigtl. alles hier: http://www.mikrocontroller.net/artic...WM-Betriebsart