4

This is my code which I have written as a library

#include "avr/interrupt.h"  
#include "Arduino.h"
#include "AllTimer.h"

AllTimer::AllTimer()
{}

void AllTimer::dofun(void)
{
     //TIFR1 |= _BV(OCF1A);

    TCCR1B = 0X00;
    //TIFR1 = 0X01;
    digitalWrite(13,!digitalRead(13));
    Serial.print("I printed");
    TCNT1 = 0X0000;
    TCCR1B |= (1<<CS12) && (1<<CS10);
    //sei();
}

 void AllTimer::setTimer(void)
 {
    TCNT1 = 0x0000;
    TCCR1A = 0x00;
    TCCR1B = 0x00;
    TCCR1B |= (1<<CS12) && (1<<CS10);
    TIMSK1 |= (1<<TOIE1);
    sei();
 }

ISR (TIMER1_OVF_vect)
{
     AllTimer::dofun();
}  

Code in Arduino IDE:

 #include <AllTimer.h>

 AllTimer mytimer;

 void setup()
 {
     pinMode(13,OUTPUT);
     Serial.begin(9600);
 }

 void loop()
 {  
     mytimer.setTimer();
    //delay(200);   
  }

But I am not getting anything on the serial monitor. What is the error I have made?

explorer
  • 379
  • 2
  • 5
  • 17

1 Answers1

6

The Arduino main() calls loop() continuously, in a tight loop. Thus your AllTimer::setTimer() is called continuously, and each time it resets the counter (TCNT1 = 0x0000;). Thus the counter can never overflow.

Edgar Bonet
  • 45,094
  • 4
  • 42
  • 81