Вот пример, выдает на D13 51Гц

Soft PWM для Carduino/Arduino
PHP код:
#define D13_High PORTB |=B00100000 
#define D13_LOW PORTB &= B11011111 
volatile unsigned int tcnt2
volatile byte pwm_time
byte bytes[] = {128};   

void setup()   
{  
    
TIMSK2 &= ~(1<<TOIE2); //разрешения прерывания по переполнению таймера/счетчика Т2  
    
TCCR2A &= ~((1<<WGM21) | (1<<WGM20));// Режим работы таймера/счетчика 
    
TCCR2B &= ~(1<<WGM22);// Режим работы таймера/счетчика 
    
ASSR &= ~(1<<AS2);  //Выбор источника синхронизации таймера если AS2=0 от системного генератора 
    
tcnt2 237;      
    
TIMSK2 |= (1<<TOIE2);//Разрешение прерывания по переполнению Т2.   
}   

void loop()  
{  

//****************обработчик прерывания******************** 
ISR(TIMER2_OVF_vect)  

    
TCNT2 tcnt2;   
 
pwm_time++;       
    if(
bytes[0] > pwm_timeD13_High; else D13_LOW