Программный ШИМ:
- Код: Выделить всё • Развернуть
- 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) то разницы в скорости я них не заметил. Что я не так сделал ? И как заставить серву в другую сторону крутиться ?

 
 


 но вроде меньше 1 % получается.
 но вроде меньше 1 % получается.
 
 
 Пишет, что не "индифицированный символ". Что делать в таком случае ? Компилятор CvAVR
  Пишет, что не "индифицированный символ". Что делать в таком случае ? Компилятор CvAVR