Bare-Metal AVR Servo Control
DEGREE OBJECTIVE 2
Demonstrate embedded microprocessor system and circuit skills.
How it meets the objective: It configures Timer1 entirely through registers to generate an exact 50 Hz servo signal in hardware — precision timing that software delay loops can't match.
Two push buttons sweep the servo across its range, with the 50 Hz pulse train generated entirely by Timer1 hardware PWM.
Button-driven servo positioning on an ATmega328P using Timer1 hardware PWM configured entirely through registers — mode 14 Fast PWM with ICR1 as TOP for an exact 50 Hz servo signal. Built in RBT211 in bare-metal C with Microchip (Atmel) Studio.
How it works
Timer1 is set to Fast PWM mode 14 with ICR1 = 39999 and a prescaler of 8, producing a 20 ms period on the OC1A pin. Two push buttons increment or decrement the compare register in fixed steps between calibrated minimum and maximum pulse widths, sweeping the servo across its range; the loop delay sets sweep speed.
Engineering highlights
Hardware-timed pulses: pulse width never depends on software timing — the compare unit generates it, so servo position is jitter-free regardless of loop activity.
Bounds-checked motion: pulse limits are enforced before each update, so the servo can't be commanded beyond its mechanical range.