Go Down

Topic: Timer interrupt (Read 231 times) previous topic - next topic

emielzij

Dec 08, 2012, 10:13 pm Last Edit: Dec 08, 2012, 10:22 pm by emielzij Reason: 1
I need a function which send one pulse of a specific lenght.

I have an arduino mega.

Code: [Select]

void Timer1Init(void)
{
// TCCR1B |= 0x08;          //WGM12 bitje hoog maken in TCCR1B voor CTC timer mode
// Gebruik timer1 'normal mode'
}

void Timer1Start(int wachttijd)
{
 digitalWrite(38, HIGH);     //Maak pin hoog bij het starten van de timer
 TCCR1B |= 0x02;              //CS11 bitje hoog maken in TCCR1B voor prescaler van 8, start de timer
 OCR1A = wachttijd;          //Geef de Top aan
}

void setup()
{
 pinMode(38, OUTPUT);
 sei();
 Timer1Init();          //Configureer timer 1
}

void loop()
{
 Timer1Start(2000);    //Wait 2000 x 5*10^-7 = 1 ms
 delay(1);
}


ISR (TIMER1_COMPA_vect)  //Voer ISR uit bij een Timer CTC compare match met OCR1A
{
 digitalWrite(38, LOW);
 TCCR1B &= 0xFD;        //Stop de clock source, schakel de timer uit
}




I use Timer1 in normal mode. In the function 'Timer1Start', the pin needs to go HIGH, start the timer, wait for the specific time length. If timer1 = 2000 (1 ms) the ISR should be executed in which pin 38 will go low and stop the timer.

I expected the pin to toggle every 1 ms, but nothing happened.

I hope someone could help me further.

Regards!

edit: I forgot the OCIE1A bit in TIMSK1.... but the signal isn't very stable now, anyone suggestions why this is the case?

Go Up