Шесть ШИМ каналов. Atmega48/168.
Добавлено: Пн окт 16, 2017 08:52:24
Дня всем доброго , в очередной раз столкнулся с проблемой настройки таймеров. Прошу вашей помощи.
Пытался выставить настройки по
http://www.atmel.com/images/Atmel-7530- ... asheet.pdf
Где все таки косяк ?
ШИМы должны работать на одинаковой частоте. но с возможность изменения скважности.
Пытался выставить настройки по
http://www.atmel.com/images/Atmel-7530- ... asheet.pdf
Где все таки косяк ?
ШИМы должны работать на одинаковой частоте. но с возможность изменения скважности.
Код: Выделить всё
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
void init_pwm()
{
/**ШИМ 1-2**/
TCCR0A=(1<<COM0A1)|(0<<COM0A0)|(1<<COM0B1)|(1<<COM0B0)|(1<<WGM01)|(1<<WGM00);
TCCR0B=(1<<WGM02)|(0<<CS02)|(1<<CS01)|(0<<CS00);
OCR0A=0x00;
OCR0B=0x00;
/**ШИМ 3-4**/
TCCR1A=(1<<COM1A1)|(0<<COM1A0)|(1<<COM1B1)|(0<<COM1B0)|(0<<WGM11)|(1<<WGM10);
TCCR1B=(0<<WGM13)|(1<<WGM12)|(0<<CS12)|(1<<CS11)|(0<<CS10);
OCR1A=0x00;
OCR1B=0x00;
/**ШИМ 5-6**/
TCCR2A=(1<<COM2A1)|(0<<COM2A0)|(1<<COM2B1)|(0<<COM2B0)|(1<<WGM21)|(0<<WGM20);
TCCR2B=(1<<WGM22)|(0<<CS22)|(1<<CS21)|(0<<CS20);
OCR2A=0x00;
OCR2B=0x00;
}
int main(void)
{
int i=0;
DDRB =0xFF;
PORTB=0x00;
DDRC=0xFF;
PORTC=0x00;
DDRD=0xFF;
PORTD=0x00;
init_pwm();
while(1)
{
for (i=0;i<255;i++) //Плавно повышаем
{
_delay_ms(50);
OCR0A++;
OCR0B++;
OCR1A++;
OCR1B++;
OCR2A++;
OCR2B++;
}
for (i=0;i<255;i++) //Плавно понижаем
{
_delay_ms(50);
OCR0A--;
OCR0B--;
OCR1A--;
OCR1B--;
OCR2A--;
OCR2B--;
}
}
return 0;
}