Почему регистры таймера Arduino не равны 0?
Я пытаюсь использовать регистры таймера для измерения времени на моей Arduino Mega 2560.
Вывод следующего кода сбивает меня с толку:
void setup ()
{
// Настройка последовательного соединения
Serial.begin(9600);
while (!Serial) {}
// Печать регистров управления таймера 1
Serial.println(TCCR1A); // Выводит 1
Serial.println(TCCR1B); // Выводит 3
}
void loop () {}
Почему TCCR1A
равен 1
, а TCCR1B
равен 3
? В документации к чипу сказано, что начальные значения регистров равны нулю. Конечно, я мог бы установить их в ноль, но я хочу понять, почему это так работает. Значения для других 16-битных таймеров (3, 4 и 5) одинаковы.
@Paul, 👍5
1 ответ
Лучший ответ:
▲ 9
Ядро Arduino выполняет некоторые действия при запуске. Одной из таких задач является настройка таймеров для работы ШИМ.
Вот соответствующие фрагменты из init()
в wiring.c
:
// установить коэффициент предварительного масштабирования таймера 1 на 64
sbi(TCCR1B, CS11);
#if F_CPU >= 8000000L
sbi(TCCR1B, CS10);
#endif
#if defined(TCCR1A) && defined(WGM10)
sbi(TCCR1A, WGM10);
#endif
,
@Majenko
Смотрите также:
- Запустить Timer1 в ATmega2560 со сборкой
- Таймер 1 «Установить на сравнение совпадений» в обычном режиме — не работает
- Проблема с программированием платы digispark ATtiny85 с помощью Arduino IDE
- Заставить TCNT оставаться ниже OCRxA на ATmega328P
- Контейнерная программа Arduino Timer0
- Использование millis() и micros() внутри процедуры прерывания
- Как сделать очень долгую функцию delay(), несколько часов
- Разница между «time_t» и «DateTime»