Go Down

Topic: Timer interrupt (Read 244 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy