Возможно и эта информация будет полезна для начинающих. Лично я, в свое время, был бы благодарен за этот простой пример, он здорово сэкономил бы мне время для освоения. Прерывание по таймеру с периодом 1 сек для случая тактовой частоты МК 8МГц (запуск таймера и обработчик прерывания): Код (C++): void setup() { pinMode(13, OUTPUT);// настройка светодиода для примера работы прерывания TCCR1A = 0; // настройка таймера 1, канала А TCCR1B = 04; // предделитель CLK/256; OCR1A = 0x7A11; // прерывание раз в секунду TIMSK = 0b00010000; // запуск таймера по совпадению 1А sei(); // разрешаем прерывания (запрещаем: cli(); ) } void loop() { // в примере loop пуст } ISR(TIMER1_COMPA_vect) //обработчик прерывания по совпадению 1А { digitalWrite(13, !digitalRead(13)); // пример обработки прерывания (переключает состояние светодиода) TCNT1 = 0; //обнуляем регистр TCNT1 }
Ну это принципиальный пример, чтобы вообще сдвинуться с места в понимании как оно работает. Не знаю надо ли копировать сюда таблицу с предделителем и формулу для подсчета тиков в зависимости этого предделителя и частоты работы МК. Кстати, удобные калькуляторы есть для Андроида (и для других осей наверняка), я ими пользуюсь чтобы каждый раз вручную не пересчитывать значение OCR.
Библиотеки это не "тру". ) Тем более они, как правило, жестко привязаны к конкретному таймеру, запустить более одного уже сложновато. Да и какой смысл, если запуск через регистры занимает всего пять строчек? Не намного сложнее, разве что один раз подсчитать циферки. А еще можно считать не только время, но и внешние события, например количество оборотов колеса без отрыва от основной программы. Библиотеки такого не умеют.