If you are prepared to use Timer 2 (Pin D3) this code will do it:
void setup()
{
pinMode (3, OUTPUT);
TCCR2A = bit (WGM20) | bit (WGM21) | bit (COM2B1); // fast PWM, clear OC2B on compare
TCCR2B = bit (WGM22) | bit (CS20) | bit (CS21) | bit (CS22); // prescaler of 1024
OCR2A = 77; // zero relative
OCR2B = 15; // 20% duty cycle
} // end of setup
void loop()
{
// do other stuff here
}
More information on the Atmega328P timers on my page about timers.
The figure 77 is obtained from:
16000000 / 1024 / 78 = 200.32
In other words, the prescaler of 1024 is divided into the clock of 16 MHz, and then we count up to 78, giving a result of just over 200. I actually use 77 because the timer is zero-relative (it counts from 0 to 77, giving 78 counts). This means the frequency is slightly out (it will be 200.32 Hz rather than 200 but that could be close enough).
You could also do it with Timer 1 (pin D10) to get slightly more accurate results, like this:
void setup()
{
pinMode (10, OUTPUT);
// mode 15
TCCR1A = bit (WGM10) | bit (WGM11) | bit (COM1B1); // fast PWM, clear OC1B on compare
TCCR1B = bit (WGM12) | bit (WGM13) | bit (CS11); // fast PWM, prescaler of 8
OCR1A = 10000 - 1; // what to count to
OCR1B = 2000 - 1; // duty cycle
} // end of setup
void loop()
{
// do other stuff here
}
In this case I have used a prescaler of 8 and a count-up value of 10000, as follows:
16000000 / 8 / 10000 = 200
In this case the answer is exactly 200, which will be more accurate than the 200.32 obtained from using Timer 2. That is because Timer 1 is a 16-bit timer and has higher resolution.