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) | bit(DDB6); // atmega32u OC1A and OC1B outputs
// DDRB |= bit(DDB1) | bit(DDB2); // atmega168/UNO OC1A and OC1B (Tested by OP/Luis)
TCCR1A = bit(WGM11) | bit(WGM10) | bit(COM1A0) | bit(COM1B1) ; // Toggle OC1A, Clear on OC1B
TCCR1B = bit(WGM13) | bit(WGM12) | bit(CS10); // Set /1 prescaler
OCR1A = 159 ;//79; // Set TOP count to 16000000/(2*PreScaler*Ftoggle)
// or 16000000/(PreScaler *Ftimer)
OCR1B = 10; // 10/160 duty cycle
TCNT1 = 0 ;
}
void loop() {
// put your main code here, to run repeatedly:
OCR1B = 160/4 -1 ; // 25% duty cycle.
}
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().