подскажите с таймером
- Войдите на сайт для отправки комментариев
Пнд, 24/08/2020 - 20:39
подскажите пожалуйста. разбираюсь с работой таймера.
void setup() {
TCCR1A = 0b00000000;
TCCR1B = 0b00001101; //по совпадению, кд 1024
OCR1A = 7826; // 16 000 000 / 1024 = 15625 / 0,5 = 7826 (прерывание каждые 0,5 сек)
TIMSK1 |= (1 << OCIE1A); // включение прерываний по совпадению
sei();
}
ISR( TIMER1_COMPA_vect ) {
Serial.println("tik");
}
вот так все вроде работает как следует.
теперь мне нужно запустить таймер по внешнему прерыванию. для этого я делаю так
void setup() {
TCCR1A = 0b00000000;
TCCR1B = 0b00001101; //по совпадению, кд 1024
OCR1A = 7826; // 16 000 000 / 1024 = 15625 / 0,5 = 7826 (прерывание каждые 0,5 сек)
//TIMSK1 |= (1 << OCIE1A); // включение прерываний по совпадению
sei();
}
ISR( TIMER1_COMPA_vect ) {
Serial.println("tik");
}
ISR(INT0_vect){
TIMSK1 |= (1 << OCIE1A); // включение прерываний по совпадению
}
только с одной особенностью. он срабатывает сразу а мне нужно что бы он выждал 0,5 сек и потом сработал.
Ну наверно потому что ты включаешь не таймер, а прерывание по таймеру. А таймер всё это время работает.
Ну, зафигачьте 0 в TCNT перед включением прерываний
Тогда перед включением прерываний по таймеру надо:
- Сбросить счетчик
- Сбросить флаг прерывания таймера
все равно не работает
Флаг прерывания сбрасывается иначе, записью 1 в позицию флага.
спасибо. получилось