Задача следующая на ATMEGA 328P реализовать регулируемый по частоте в диапазоне 22-28кГц ШИМ сигнал на котором можно будет регулировать скважность.
реализовал минимальный вариант в таком виде:
Но такой вариант не очень устраивает, так как при изменении переменной BOTTOM на 1 единицу частота меняется примерно на 30-50Гц.
Есть ли вариант решить эту задачу хотя бы в диапазоне частот 25000Гц - 25999Гц, но с точностью задания частоты 1 Гц?
реализовал минимальный вариант в таком виде:
C:
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define BOTTOM 411
#define TOP 0x3FF
ISR(TIMER1_OVF_vect)
{
TCNT1=BOTTOM;
}
void Timer1_init()
{
TCCR1A|=(1<<COM1A1)|(1<<WGM11)|(1<<WGM10);
TCCR1B|=(1<<WGM12)|(1<<CS10);
OCR1A=BOTTOM+1;
TIMSK1|=(1<<TOIE0);
asm("sei");
}
int main(void)
{
DDRB|=(1<<PORTB1);
Timer1_init();
while (1)
{
if(OCR1A==TOP)
{
OCR1A=BOTTOM;
}
else
{
OCR1A++;
}
_delay_ms(100);
}
}
Есть ли вариант решить эту задачу хотя бы в диапазоне частот 25000Гц - 25999Гц, но с точностью задания частоты 1 Гц?