Программный ШИМ:
- Код: Выделить всё • Развернуть
int i;
for(i=0;i!=10000;i++)
{
PORTC.6^=1;
if(i<3000)
{
PORTx.x^=1;
delay_us(1300);
}
if(i>3000 && i<6000)
{
PORTx.x^=1;
delay_us(1500);
}
}
while(1);
Аппаратный ШИМ:
- Код: Выделить всё • Развернуть
#include <mega32.h>
void main(void)
{
PORTD=0x00;
DDRD=0x30;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0xA3;
TCCR1B=0x09;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
while (1)
{
// вывести ШИМ около 25% на PD4
OCR1BH = 0x00;
OCR1BL = 0xFF; // PWM(PD4) 255/10.23 = 24.9(%)
OCR1AH = 0x00;
OCR1AL = 0x00;
};
}
я вчера вроде как вкурил то, например это OCR1AH и OCR1AL (L-младший, H-старший), и то, что в них записывается цифра от 0 до 1023. в шестнадцетеричной системе. Вобщем я запустил шим на обоих ножках PD4/5. Все крутится. Причем оба в одну сторону. Непонятно вот что, судя по формуле: число от 0...1023/10.23= W ШИМА в %. Когда я "изменял" мощьность (W) этого шима, например, записывая цифру 500(01ff) то разницы в скорости я них не заметил. Что я не так сделал ? И как заставить серву в другую сторону крутиться ?