Here's code for timer 1 on a atmega32u tested in a Teensy 2.0:
void setup() {
// put your setup code here, to run once:
// Timer 1 Fast PWM mode *toggling* OC1A at 50kHz with *two* OCR1A counts
// And 7.32 bits 0-159 PWM on OC1B at 100kHz
// Output on OC1B
// Set at TOP, Clear at OCR1B
// WGM =15 0b1111
DDRB |= bit(DDB5);
DDRB |= bit(DDB6);
OCR1A = 159 ;//79; // Set TOP count to 16000000/(2*PreScaler*Ftoggle)
// or 16000000/(PreScaler *Ftimer)
OCR1B = 10; // 10/160 duty cycle
TCCR1A = bit(WGM11) | bit(WGM10) | bit(COM1A0) | bit(COM1B1) ; // Toggle OC1A, Clear on OC1B
TCCR1B = bit(WGM13) | bit(WGM12) | bit(CS10); // Set /1 prescaler
TCNT1 = 0 ;
}
void loop() {
// put your main code here, to run repeatedly:
}
The trick here is using OCRxA to set the TOP value/resolution/frequency of the timer, and then using OCRxB as the PWM-controlled output. The popular examples aim for a specific frequency with toggling, but often don't go into showing the PWM with the non-TOP OCRxx registers.
If you check the registers for your chip, this should also adapt to the other timers. Here, I used timer1 to avoid confusing delay() and millis().