Ovládání serva pomocí ATmega

Příklad zdrojového kódu v C pro ovládání serva pomocí ATmega.


Určitě každý, kdo začíná s procesory Atmel, tak potřebuje množství příkladů programů. Tady jeden uvádím. Jedná se o ovládání serva pomocí ATmega8. Procesor musí běžet 8MHz a tímto kódem se generuje PWM pro servo.

void init_servo(unsigned int pulse_us)
{
TCCR1B = 0x00; //stop timer
DDRB = 0xFF; //set pins for output
TCNT1H = 0xB1; //setup
TCNT1L = 0xE1;
ICR1 = 20000; // used for TOP, makes for 50 hz
OCR1A = pulse_us; // servo at center (1.5ms pulse)
OCR1B = pulse_us; // servo at center (1.5ms pulse)
TCCR1A = 0xA2;
TCCR1B = 0x1A; //start timer
}

void stop_servo(void)
{
TCCR1B = 0x00; //stop timer
DDRB = 0x00; //set pins for input
}

void servotest(void)
{
int16_t servo;
int8_t prodleva;
int8_t smer;
int8_t krok;

krok = 5;
servo = 1500;
init_servo(servo);
smer = 0;
prodleva==0

while (1)
{
if (prodleva>350)
{
prodleva==0;

if(smer == 1) {servo+=krok;}
if(smer == 0) {servo-=krok;}

if (servo>=2200) {servo=2200;smer=0;}
if (servo<=800) {servo=800;smer=1;}
}
prodleva++;
OCR1A = servo;
OCR1B = servo;
}
}

4 komentáře u „Ovládání serva pomocí ATmega“

  1. Ahoj, chci se zeptat co je potreba prepsat/zmenit pro ATmegu8 s vnejsim krystalem o 11,05919 MHz. Jsem zacatecnik a nevim si rady. Diky za odpoved

  2. Aby to běželo tak se musí správně nastavit pwm timer.
    TCCR1B = 0x1A; //start timer je nastaven na 1 MHz je tam dělitel 8. Ty to máš výš proto musíš upravit konstantu ICR1 = 20000; Nastav vyšší, aby jsi se dostal na 50Hz. dále musíš upravit proměnnou servo servo ta nebude odpovídat např. 1500us ale budeš jí mít posunutou třeba na 1850 což bude ve výsledku právě skutečných 1500us. Vše jde vypočítat a nápovědu a vzorce máš v DS.

  3. Hledal jsem datasheet na moje servno (i na serva obecne) a nenasel jsem. Mohl bys me prosim nejak kontaktovat a poradit mi, jesli bys mel cas. (icq:365993790)

  4. Tak s tímto ti nejsem schopen pomoci. musíš se obrátit na výrobce serva.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

*