Вот пример, выдает на 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_time) D13_High; else D13_LOW;
}