I need a function which send one pulse of a specific lenght.
I have an arduino mega.
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?