Вроде бы что-то получилось, но то что хотелось бы. Получается некое слишком медленное затухание.
Частота - 100 гц.
Таблицу синуса считал по Y=254*(SIN(2*3,14*X/128)) т.е. разрешение синуса 128.
Фильтр посчитал на 100 Гц.
Код: Выделить всё
#define F_CPU 8000000
#include <avr/io.h>
#include <avr/interrupt.h>
int i1sin=0, testOCR2;
int chec=0;
unsigned int sin[]={0,12,25,37,50,62,74,86,97,109,120,131,141,151,161,171,180,188,196,204,211,218,224,230,235,239,243,246,\
249,251,253,254,254,254,253,251,249,246,243,239,235,230,224,218,211,204,197,188,180,171,161,152,141,131,120,109,98,86,\
74,62,50,38,25,13,0,12,24,37,49,61,73,85,97,108,119,130,141,151,161,170,179,188,196,204,211,218,224,229,234,239,243,\
246,249,251,253,254,254,254,253,251,249,247,243,239,235,230,224,218,212,204,197,189,180,171,162,152,142,131,120,109,\
98,86,74,62,50,38,26,13,1};
int main(void)
{
//************** настройка портов*******
DDRB|=(1«0);
DDRB|=(1«1);
//*************настройка T1************
TCCR1B|=(1«CS10)|(1«WGM12);
OCR1AH=0x02;
OCR1AL=0x71;
TCNT1=0x00;
TIMSK|=(1«OCIE1A);
//**************** настройка T2***************
TCCR2|=(1«WGM21)|(1«CS20)|(1«WGM20);
TIMSK|=(1«OCIE2)|(1«TOIE2);
TCNT2=0x00;
asm("sei");
while(1)
{
}
}
ISR(TIMER1_COMPA_vect)
{
OCR2=255-sin[i1sin];
i1sin++;
if (i1sin>127) i1sin=0;
}
ISR(TIMER2_COMP_vect)
{
if (i1sin<=64)
{
PORTB|=(1«0);
}
if (i1sin>64)
{
PORTB|=(1«1);
}
}
ISR(TIMER2_OVF_vect)
{
if (i1sin<=64)
{
PORTB&=~(1«0);
}
if (i1sin>64)
{
PORTB&=~(1«1);
}
}
Как добиться такого как на первом скрине?


