Таймер2

ermvad
Offline
Зарегистрирован: 25.11.2015

Всем доброго вечера.

Вопрос такой, как настроить таймер2 на выдачу прерываний через 1 сек, т.к. какой делить, какой диапазон.

Вроде такая формула INTERRUPT_FREQ=CPU_FREQ/(ДЕЛИТЕЛЬ*(1+ОТСЧЕТЫ(НЕ БОЛЕЕ 256 ДЛЯ 8 битного)). Так? А то уже неодупляю

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

ermvad, формула правильная. 16000000/1024/256 -это минимальное кол-во прерываний в секунду, которое может сделать таймер2 чисто аппаратными средствами.

ermvad
Offline
Зарегистрирован: 25.11.2015

как я понял на 8битном таймере 1 секунду получить никак

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Никак. Либо на таймер1, либо на вотчдоге.

ermvad
Offline
Зарегистрирован: 25.11.2015

На таймере 1 я столкнулся с некоторым дерьмецом. В режиме ИДЛ все работает как надо. В режиме ПВР СЕЙВ контроллер уходит в вечный сон. Как я понял отключается осциллятор на котором пашет таймер 1

Клапауций 777
Offline
Зарегистрирован: 21.11.2015

на atmega 8/16 у меня это работает - 8-ю перевести контроллер на тактирование от внутреннего RC генератора и подключить кварц 32768Гц, 16-я имеет отдельные пины для подключения часового кварца.


unsigned long RTC_TIC_M16 = 0;

ISR (TIMER2_OVF_vect) {RTC_TIC_M16++;} // обработка событий по прерыванию счётчика

void setup() {
///////////////////////////////////////////////////////////////////
cli(); // запрет прерываний глобально
TIMSK &= ~(_BV(TOIE2) | _BV(OCIE2)); // отключение прерывания Таймера 2
ASSR |= _BV(AS2); // перевод Таймера 2 в асинхронный режим тактирования от кварцевого резонатора 32768Гц
TCNT2 = 0x00; // начальная инициализация счётчика
TCCR2 = 0x05; // установка коэффициента деления 128
OCR2  = 0x00; // совпадение с частотой 1 Гц
while (ASSR & (_BV(TCN2UB) | _BV(OCR2UB) | _BV(TCR2UB))); // ждём готовности таймера
TIMSK |= _BV(TOIE2); // разрешаем прерывание от Таймера 2
sei(); // разрешаем прерывания глобально
///////////////////////////////////////////////////////////////////
}

void loop() {}

 

ermvad
Offline
Зарегистрирован: 25.11.2015

у вас атмега 8/16, у меня уно на 328р, как я понял надо припаивать кварц на 32кгц

Клапауций 777
Offline
Зарегистрирован: 21.11.2015

ermvad пишет:

у вас атмега 8/16, у меня уно на 328р, как я понял надо припаивать кварц на 32кгц

у меня этот код проверен на атмега8 и атмега16 - тебе нужно спросить у dimax , что нужно подправить для адаптации на 328р.

но общая идея делания RTC из дуино такова.

ermvad
Offline
Зарегистрирован: 25.11.2015

Всем спасибо за ответы. Пища для размышления получена. Бдем думать...