Hello,
I am trying to generate a 30 KHz pulse using the following code...
/* Code to pulse pin 3 with a modulated signal
* Can be used to drive an IR LED to keep a TSOP IR reciever happy
* This allows you to use a modulated reciever and a continious beam detector
* By Mike Cook Nov 2011 - Released under the Open Source licence
*/
volatile byte pulse = 0;
ISR(TIMER2_COMPB_vect){ // Interrupt Service Routine to pulse the modulated pin 3
pulse++;
if(pulse >= 8) { // change number for number of modulation cycles in a pulse
pulse = 0; // Re-set Pulse value to zero
TCCR2A ^= _BV(COM2B1); // toggle pin 3 enable, turning the pin on and off. TCCR2A register ^= Bitwise-shift (Compare Output Mode B, (Bit 5))
}
}
void setIrModOutput(){ // sets pin 3 going at the IR modulation rate
//pinMode(3, OUTPUT); // Just enable output on Pin 3 and disable it on Pin 11
TCCR2A = _BV(COM2A1) | _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(WGM22) | _BV(CS22);
OCR2A = 66; // defines the frequency 51 = 38.4 KHz, 54 = 36.2 KHz, 58 = 34 KHz, 62 = 32 KHz, 66 = 30KHz
OCR2B = 33; // deines the duty cycle - Half the OCR2A value for 50%
TCCR2B = TCCR2B & 0b00111000 | 0x2; // select a prescale value of 8:1 of the system clock
}
void setup(){
setIrModOutput();
TIMSK2 = _BV(OCIE2B); // Output Compare Match B Interrupt Enable
}
void loop()
{
pinMode(03, OUTPUT); // Just enable output on Pin 3 and disable it on Pin 11
}
But when I check the frequency with a scope I get 15000 Hz (see attached photo).
By my count there are three complete cycles ever .2 ms and this works out to 15 KHz. Can anyone explain what I am missing?
-Zeus
