void setup()
{
Serial.begin(9600);
Serial.println("Interrupt timer2 calculator");
Serial.println("--------------------");
}
void loop()
{
while (Serial.available() == 0) {}
int value = Serial.parseInt();
float Freq;
int Puls10Mtr=6522;
float CompareReg;
if(value > 0)
{
Freq=value/3600.0*(Puls10Mtr/10);
Serial.print("Fequency: ");
Serial.print(Freq,5);
Serial.println(" Hz");
CompareReg=(16000000/(1*Freq))-1;
if (CompareReg<65536){
Serial.println("CS12 - CS10 = 001 : divide by 1");
goto Found;
}
CompareReg=(16000000/(8*Freq))-1;
if (CompareReg<65536){
Serial.println("CS12 - CS10 = 010 : divide by 8");
goto Found;
}
CompareReg=(16000000/(64*Freq))-1;
if (CompareReg<65536){
Serial.println("CS12 - CS10 = 011 : divide by 64");
goto Found;
}
CompareReg=(16000000/(256*Freq))-1;
if (CompareReg<65536){
Serial.println("CS12 - CS10 = 100 : divide by 256");
goto Found;
}
CompareReg=(16000000/(1024*Freq))-1;
if (CompareReg<65536){
Serial.println("CS12 - CS10 = 101 : divide by 1024");
goto Found;
}
Found:
Serial.print("compare match register: ");
Serial.println(CompareReg);
OCR2A=word(CompareReg);
TCCR1A = 0;// set entire TCCR1A register to 0
TCCR1B = 0;// same for TCCR1B
TCNT1 = 0;//initialize counter value to 0
// set compare match register
OCR2A=word(CompareReg);//(must be <65536)
// turn on CTC mode
TCCR1B |= (1 << WGM12);
// Set CS12 and CS10 bits for 1024 prescaler
TCCR1B |= (1 << CS12) | (1 << CS10);
// enable timer compare interrupt
TIMSK1 |= (1 << OCIE1A);
}
}