подскажите с таймером
- Войдите на сайт для отправки комментариев
Пнд, 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 в позицию флага.
спасибо. получилось