@John: I'm using Timer1 to drive a simple pulse using the setup code:
TCCR1A = 0; // Clear TCCR1A/B registers
TCCR1B = 0;
TCNT1 = 0; // Initialize counter to 0
// No prescaler, period set using the following equation:
// Compare register for TIMER1: (16mHz / frequency) - 1 = 15999 = 0x3E7F
OCR1A = period;
// Timer/Counter Control Register for Interrupt 1 on register B
TCCR1B |= (1 << WGM12); // Mode 4, CTC--Clear Timer on Compare
TCCR1B |= (1 << CS10); // Clock Select Bit, no prescaling
TIMSK1 |= (1 << OCIE1A); // The value in OCR1A is used for compare
I get a great square wave out for 1000Hz. When I want to change the frequency via period at runtime and do the assignment of a new period into OCR1A, things work fine. However, if I raise the frequency to something above 2.5KHz, the frequency doesn't change. The calculation for period should work well past 2.5KHz. Anything ring a bell here?