ATmega8 Servo

Dieses ATmega8 code example steuert einen Servo an


Beschreibung

Timer 1 zählt mit dem Clock von 4MHz auf 40000. Das er gibt eine Frequenz von 100Hz. Im Phase Correct Mode dauert eine PWM Periode so lange wie zwei Timerperioden. So ergibtsich ein PWM Signal von einer Frequenz von 50Hz. Der PWM Puls wid mit dem OCR1AWert eingestellt. Bei 2000 geht der Servo in den linken Anschlag. Bei 3000 zentrierter sich und bei 4000 geht er in den rechten Anschlag. Derr OCR1A Wert kann jederzeit im Programmablauf gesetzt werden. Das Servo PWM Signal ist am Ausgang BP1.

Buchtippp:


AVR Mikrocontroller
In C programmieren

electronicsplanet.ch

Fragen zur Atmega8 Servo Ansteuerung?

Schreib ins Elektronik Forum

(Keine Anmeldung nötig)

C Sourcecode

#include <avr/io.h>

int main(void)
{

    DDRB = 0x02;                          // Setup PB1 as output
    

    ICR1 = 40000;                         // Set TOP to 40000 Frequency =
                                          // 4MHZ / 40000 / 2 = 100Hz
                                          // Phas e correct mode Periode is
                                          // 2 * Timer Periode
    OCR1A = 3000;                         // Set Dutycycle
                                          // 2000 => Pulse= 1ms +90 deg
                                          // 3000 => Pulse= 1.5ms 0 deg
                                          // 4000 => Pulse= 2ms -90 deg

    
    
    TCCR1A = (1<<WGM11)|(1<<COM1A1);     // Set Timer1 in Phase Correct Mode
                                         // with ICR1 as TOP value. Set OC1A
    TCCR1B = (1<<WGM13)|(1<<CS10);       // on compare match and clear OC1A
                                         // on BOTTOM. Clock Prescaler is 1
              
              
    

    for(;;);                             // Endless loop
                                         // main() will never be left
                                         // Write Values to OCR1A ot turn
                                         // The Servo

    return 0;                            // This line will never be executed
}


Download C-Sourcefile mit ASCII-Schema: C-Sourcefile mit ACII-Schema

Signalplots

ATmega8 Servo

Gelb: Servo PWM Signal