Обсуждаем контроллеры компании Atmel.
Ответить

Power-Save таймер останавливается

Ср сен 13, 2017 20:32:55

Обьясните почему при входе в режим Power Save таймер останавливается? В даташите написанно что работают оба таймера atmega168.
Усыпляю
Код:
  SMCR |= ((1<<SE) | (0<<SM2) | (1<<SM1) | (1<<SM0)); 
   #asm("sleep");


Будим по внешнему прерываю
Код:
interrupt [EXT_INT0] void ext_int0_isr(void)
{
SMCR &= ~(1 << SE);
SMCR |= ((0<<SM2) | (0<<SM0) | (0<<SM0));

}

// External Interrupt(s) initialization
// INT0: On       
    DDRD &= ~(1 << DDD2);     // Clear the PD2 pin
    // PD2 (P<< POCINT0 pin) is now an input
    PORTD |= (1 << PORTD2);    // turn On the Pull-up
    // PD2 is now an input with pull-up enabled
    EICRA |= (1 << ISC10);    // set INT0 to trigger on ANY logic change
    EIMSK |= (1 << INT0);     // Turns on INT0

Re: Power-Save таймер останавливается

Чт сен 14, 2017 15:44:46

kotriks писал(а): В даташите написанно что работают оба таймера atmega168.
Оба это какие из трех :) ? Так то я увидел что работает в данном режиме только таймер 2.

Re: Power-Save таймер останавливается

Чт сен 14, 2017 16:18:47

таймер2 работает в поверсаве только в асинхронном режиме

Re: Power-Save таймер останавливается

Чт сен 14, 2017 16:41:48

Novice user писал(а):таймер2 работает в поверсаве только в асинхронном режиме
The Timer/Counter2 can be clocked both synchronously and asynchronously in Power-save mode. If
Timer/Counter2 is not using the asynchronous clock, the Timer/Counter Oscillator is stopped during sleep. If
Timer/Counter2 is not using the synchronous clock, the clock source is stopped during sleep. Note that even if
the synchronous clock is running in Power-save, this clock is only available for Timer/Counter2.
Данный текст я понял так, что если таймер работал в синхронном режиме, CLKio работать будет, но только для таймера2.

Re: Power-Save таймер останавливается

Чт сен 14, 2017 16:55:19

"

Idle – в этом режиме отключается CPU – процессор, наш обработчик команд – и, соответственно, flash-память. При этом остаются включенными последовательный интерфейс SPI, USART, аналоговый компаратор, аналого-цифровой преобразователь (ADC), интерфейс TWI – он же I2C, все таймеры, в том числе и сторжевой, ну и система прерываний. Если нам что-нибудь не нужно – компаратор, АЦП или сторжевой таймер, то до засыпания можно отключить это ручками, и сэкономим ещё больше.
Этот режим буквально создан для работы с периферией, когда нужно быстро проснуться по команде от внешних интерфейсов и не тормозить. Получается даже не сон, а так... легкая дрема
Power-Down - тут останавливается практически всё, кроме обработки внешних прерываний, интерфейса TWI и сторжевого таймера.
Вызывать в таком состоянии прерывания могут только внешний сброс-reset, сброс по сторжевому таймеру, при провале напряжения. Также возможны прерывания при работе TWI и внешние прерывания.
Большинство счётчиков и таймеров тут тоже останавливаются – таким образом, в таком режиме с микросхемой могут работать только асинхронные интерфейсы.
В общем, тут чип засыпает намертво, проснуться самому ему достаточно проблематично, а уж если разбудили - просыпаться он будет мучительно долго, пропуская мимо ножек всю информацию от прерываний, например(
Idle и Power-Down встречаются наиболее часто.
Power-save - этот режим похож на Power-down, но если таймер2 установлен в асинхронном режиме - бит ACCP.AS2 = 1 - то он будет работать; если таймер2 так не установлен, то даташит советует использовать Power-down - при пробуждении регистр этого таймера будет не определён.
Здесь микросхема погружена в глубокий сон , но где-то глубоко в подсознании чип про себя отмечает, сколько времени он проспал. Этот режим хорош для устройств, требующих знания о частоте выхода из спящего режима, например, для часов. Но, к сожалению, он не подходит для точного измерения временных отрезков между событиями.
Standby - он тоже похож на Power-down, но используется при работе от внешнего источника тактирования и оставляет включённым осциллятор, а включенный осцилятор означает меньше времени на раскачку - быстрее старт. Этот режим используется, если нужно поймать какое-либо событие - например, в клавиатуре чипу надо проснуться до того, как пользователь отпустит клавишу. Ещё один красивый пример - автоспуск пленочного фотоаппарата на молнию.
Extended Standby - похож на Power-Save, но оставляет включённым осциллятор. Вот этот режим как раз для устройств, которым нужно точно знать, сколько времени прошло после входа в режим сна - например, для измерителя скорости вращения колеса велосипеда
"

Re: Power-Save таймер останавливается

Чт сен 14, 2017 17:09:04

Цитату я приводил из ДШ на Atmega168

Re: Power-Save таймер останавливается

Пн сен 18, 2017 06:18:34

Разобрался, при обнулении таймера вставил код #asm("sei") на запуск прерываний и он затикал.
Ответить