Я на таком варианте пробовал
и получилась примерная частота при tcnt2PHP код:#define D13_High PORTB |=B10000000
#define D13_LOW PORTB &= B01111111
volatile unsigned int tcnt2 = 251; //32 такта делителя * (256-251)=160 тактов. То есть каждые 10 мкс.
volatile byte pwm_time;
void setup()
{ pinMode(13, OUTPUT);
TIMSK2 &= ~(1<<TOIE2); //разрешения прерывания по переполнению таймера/счетчика Т2
TCCR2A &= ~((1<<WGM21) | (1<<WGM20));// Режим работы таймера/счетчика
TCCR2B &= ~(1<<WGM22);// Режим работы таймера/счетчика
ASSR &= ~(1<<AS2); //Выбор источника синхронизации таймера если AS2=0 от системного генератора
TIMSK2 |= (1<<TOIE2);//Разрешение прерывания по переполнению Т2.
TCCR2B &= ~(1<<CS22); // эта и следующая строка задает таймер увеличение TCNT2 каждые 32 такта.
TCCR2B |= ((1<<CS21) | (1<<CS20));
}
void loop()
{
}
ISR(TIMER2_OVF_vect)
{
TCNT2 = tcnt2;
pwm_time++;
if(pwm_time < 128) D13_High; else D13_LOW;
}
250 = 340 гц
251 = 390 гц
252 = 490 гц
253 = 660 гц
254 = 980 гц
и не понятно почему при 255 тоже 980 гц.




Ответить с цитированием