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.
|
Please visit: the four |
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
Gelb: Servo PWM Signal
|