Confusion on Servo and PWM (AVR)
Pulse Cycle: 20 ms (I assume this means the "period")


Yes, that's correct. You need to send 1 pulse every 20ms.


  Pulse Width: 600-2400 µs


This is more or less also correct although I would note that most RC parts are designed to operate between 1000 and 2000 uS.

What you'll want to do is create a timer that overflows every 20ms. This can be a software or hardware timer.

Then, every time the timer overflows turn the output ON.

Map the timer ticks into uS, and turn the output OFF once the correct number of uS have elapsed. For example, if your timer ticks 2000 times per 20ms, and you want a pulse of 1500uS, then you turn the output off after 150 ticks.

The resulting signal looks like this (note that the angles will vary depending on the servo):



Most micros will have a PWM timer mode that can do all of this automatically. Take a look at the atmega 328p datasheet, section 16.9.3 "Fast PWM Mode":


  The counter counts from BOTTOM to TOP then restarts from BOTTOM. In non-inverting Compare Output mode, the Output Compare (OC1x) is cleared on the compare match between TCNT1 and OCR1x, and set at BOTTOM. In inverting Compare Output mode out put is set on compare match and cleared at BOTTOM. 


BOTTOM according to the datasheet just means 0. ..I don't know why they don't just say that. So anyway, what you need to do is set TOP and the timer pre-scaler so that the period is 20ms. Then you need to set OCR1x, to an appropriate fraction of that to get your desired output pulse length. You'll want to use non-inverting compare mode.

Edit: Changed "OC1x" to "OCR1x" in this paragraph. That was a typo, sorry.

There are online calculators that can help you figure out the values for TOP, and the timer pre-scaler.