Использование Timer1

Иванов1959
Offline
Зарегистрирован: 13.01.2019

Здравствуйте! Изучаю работу таймеров. Но прошу помощи разобраться с работой Timer1. Написал простенькую программу, от которой ожидаю счета 16-битного таймера от 0 до FFFF, сброс в 0 и счет до FFFF. И так дальше.

void setup() {

  TCCR1B = (1 << CS12) | (1 << CS10); //Делитель 1024 таймера 1
  TCNT1 = 0; // Обнуление счетчика таймера 1
  Serial.begin(38400); // Инициализируем вывод данных на монитор серийного порта
}
void loop() {
  Serial.println(TCNT1); // Вывод счетчика таймера 1 
}

Однако и симулирование в Протеусе, и на Arduino Uno имею одинаковый результат: регистр TCNT1 увеличивается от нуля до 255, потом уменьшается поединично до нуля, формируя пилу и не заходя в верхний регистр совсем. Использую Arduino IDE. Подскажите, пожалуйста, в чем моя ошибка, и как заставить этом таймер считать на весь диапазон 16 разрядов. Спасибо.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Этобыло бы правильно, если бы Вы работали на голом микроконтроллере, без среды ардуино. А так, она (среда) уже настроила таймер по-своему. Поэтому, если Вы хотите перенастроить его, то делайте это полностью, а не только то, что Вам непосредственно нужно. В частности, Вам нужно выставить таймер в нормальный режим.

Вставьте в строку 2 такой текст: 

TCCR1A = 0;
 
и жизнь сразу наладится.
Иванов1959
Offline
Зарегистрирован: 13.01.2019

Спасибо большое, ЕвгенийП! Так и случилось. У меня было ощушение, что это работа среды Ардуино, но без "Звонка другу" я решения не нашел. Спасибо и со Старым Новым Годом всех!