|
Полностью выглядит так (конкретные расчёты по каждой частоте опущены):
#include short b,b1; //переменные, отслеживающие изменение счётчика void init (void); void init (void){ int main (void){ void ypravl(void){ //частота опроса 15,625 кГц
E-mail:
info@telesys.ru
#include
char k;
double t_n, x_n, t_v, x_v, st_n, st_v; //шаг
short F_shim = 15625;
short F_v1 = 1209;short F_v2 = 1336;short F_v3 = 1477;
short F_n1 = 697;short F_n2 = 770;short F_n3 = 852;short F_n4 = 941;
double n;
void ypravl(void);
DDRB =0x0f; //порт B на выход
TCCR0=0x04; //установка коэффициента деления 256
x_n = 0.044608;
x_v = 0.094528;
}
init();
while (1){
b = TCNT0; //считываем текущее значение счётчика
if (b != b1) ypravl(); //если значение счётчика изменилось выполняется тело условия
b1 = b; //запоминаем значение (для сравнивания)
k++; //счётчик
if (k>n) cbi(PORTB,0); //ШИМ
else sbi(PORTB,0); //n=0 модуляция 0%, n=20 модуляция 100%
if (k==20) k=0; //число ступеней ШИМ (20)
}}
t_n = st_n + x_n;
t_v = st_v + x_v;
n = (20*sin(t_n))+(15*sin(t_v));
}
Ответы