Я новичок в этом деле, так что не пинайте если что!
При написании программы для GP2D120 возникла проблема!
Сервопривод остается в одном положении и не реагирует на изменения в АЦП.
Может подскажите в чем проблема?
- Код: Выделить всё • Развернуть
#include <avr/io.h>
#include <util/delay.h>
unsigned int getADC(void) //Считывание АЦП
{ unsigned int v;
ADCSRA|=(1<<ADEN)|(1<<ADSC)|(1<<ADFR); //Начать преобразование
while ((ADCSRA&_BV(ADIF))==0x00) //Дождатся окончания преобразования
;
v=(ADCL|ADCH<<8);
return v;
}
void Servo (void)
{
OCR1A=200;
return;
}
void Serv (void)
{
OCR1A=400;
return;
}
int main(void)
{
unsigned int u;
ADCSRA=(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
ADMUX=(0<<REFS1)|(1<<REFS0)|(0<<MUX0)|(0<<MUX1)|(0<<MUX2)|(0<<MUX3);
TCCR1A|=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11); //NON Inverted PWM
TCCR1B|=(1<<WGM13)|(1<<WGM12)|(1<<CS11)|(1<<CS10); //PRESCALER=64 MODE 14(FAST PWM)
TCCR1B|=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11);
ICR1=4999; //fPWM=50Hz (Period = 20ms Standard).
DDRB|=(1<<PB2)|(1<<PB1); //PWM Pins as Ou
while(1)
{
u = getADC();
if (u>400) Serv();
if (u<184) Servo();
return u;
};
return 1;
}
Заранее огромное всем спасибо!