Обсуждаем контроллеры компании Atmel.
Ответить

ШИМ для avr

Сб фев 09, 2013 17:01:41

Доброго времени суток. Пробовал сделать плавную регуляцию частоты на МК mega8 таймером T1. Включил режим СТС, но почему-то меняется только длительность сигнала, частота не меняется. Читал Белова, он с помощью записи различных значений в регистр сравнения меняет частоту, также почитал тут http://www.atmega8.ru/wiki/view/doc.24.html там пишут что "Если CTC1=1, то таймер возвращается в состояние 0x0000 по импульсу, следующему после совпадения счётчика и регистра сравнения OCR1A"- следовательно чем меньше значение в OCR1A, тем больше частота, или я что то не так понимаю?
#include <mega8.h
#include <delay.h>
char pwm=0;
voi
{
PORTB=0x30;
DDRB=0x2;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0x00;

TCCR1A=0x83;
TCCR1B=0xC;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
TIMSK=0x00;

while (1)
{
if(PINB.4==0)
{
while(PINB.4==0){delay_ms(10);}
pwm=pwm+1;
if(pwm>1000){pwm=1000;};
}
if(PINB.5==0)
{
while(PINB.5==0){delay_ms(10);}
pwm=pwm-1;
if(pwm<2){pwm=1;};

}
OCR1A=pwm;
}


}

Re: ШИМ для avr

Ср мар 06, 2013 19:41:38

Частота ШИМ Фиксированная
Меняется только скважность

Re: ШИМ для avr

Ср мар 06, 2013 20:31:38

В CTC как раз частота меняется, но выбран ли этот режим не понятно, т.к. вместо имен битов тут "магические числа", а лезть в даташит за битами регистра влом...
Ответить