Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Режим Power Save
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
MMP
Вообщем-то необходимо применить этот режим пониженного энергопотребления. Контролер при исчезновении питания по прерыванию с ноги(INT0) должен уснуть, при этом должен работать асинхронный таймер(реализованы часы). Вопрос в том как отписать на С (команда SLEEP) или еще чего надо? И особенно как выйти из него.
defunct
Цитата(MMP @ May 25 2006, 18:44) *
Вообщем-то необходимо применить этот режим пониженного энергопотребления. Контролер при исчезновении питания по прерыванию с ноги(INT0) должен уснуть, при этом должен работать асинхронный таймер(реализованы часы). Вопрос в том как отписать на С (команда SLEEP) или еще чего надо? И особенно как выйти из него.


Все немного не так как вы себе представляете. Процессор можно перевести в режим сна командой SLEEP, а проснуться процессор может по прерыванию.

Для того чтобы перейти в режим Power save, необходимо выполнить следующий ряд действий:
1. Установить бит SE в регистре MCUCR. (разрешение режима сна)
2. Установить биты SM1 и SM0, а также сбросить бит SM2 в регистре MCUCR (установка режима сна = Power Save)
3. Разрешить прерывания
4. Выполнить команду SLEEP ( на C - sleep(); )

Процессор пробудится по приходу прерывания, и начнет выполнение программы со следующей после sleep команды.
GxOST
Добавлю, что в даташите к контроллеру всё написано: и какие прерывания могут вывести из sleep-режимов; и настройки флагов. RTFM!
WHALE
Странно,почему молчит AVR123?Типа "Краткий курс",стр 28,4 строчка снизу.А вообще такие вопросы
наводят на размышления... cranky.gif
beer_warrior
Цитата
Вопрос в том как отписать на С (команда SLEEP) или еще чего надо? И особенно как выйти из него.

Смотрите доку по компилятору, функция AVR-специфичная поэтому каждый делает по-своему.
MMP
Цитата(defunct @ May 25 2006, 22:35) *
Все немного не так как вы себе представляете. Процессор можно перевести в режим сна командой SLEEP, а проснуться процессор может по прерыванию.

Для того чтобы перейти в режим Power save, необходимо выполнить следующий ряд действий:
1. Установить бит SE в регистре MCUCR. (разрешение режима сна)
2. Установить биты SM1 и SM0, а также сбросить бит SM2 в регистре MCUCR (установка режима сна = Power Save)
3. Разрешить прерывания
4. Выполнить команду SLEEP ( на C - sleep(); )

Процессор пробудится по приходу прерывания, и начнет выполнение программы со следующей после sleep команды.


Да нет это все я читал и представляю. Просто наверно не совсем правильно выразился. Вопрос наверно звучит так: Есть ли на С ICC команда для перевода в режим или все же придется втавить асемблер. У меня на асинхронном таймере реализованы часы, т.е. каждую секунду процессор входит в режим прерывания по ассинхронному таймеру, что является выходом из режима SLEEP, но мне это не надо, пока на INT0 не появится сигнал "1", как примерно он будет вести себя. Это больше адрессовано к тем, кто на практике уже применял этот режим.
arttab
Перед slepp можно и запретить не нужные прерывания
BVU
Цитата(MMP @ May 25 2006, 19:44) *
Вообщем-то необходимо применить этот режим пониженного энергопотребления. Контролер при исчезновении питания по прерыванию с ноги(INT0) должен уснуть, при этом должен работать асинхронный таймер(реализованы часы). Вопрос в том как отписать на С (команда SLEEP) или еще чего надо? И особенно как выйти из него.

Часы в этом случае необходимо реализовывать внешние (работа по прерыванию) например на DS1307 или другой микросхеме.
GxOST
BVU
Зачем внешние часы? В AVR внутренний RTC есть.

MMP
Какой контроллер у тебя? И в чем проблема, не пойму. Можно ведь по приходу прерывания от INT0 запрещать/разрешать прерывания от RTC?
beer_warrior
Цитата
Есть ли на С ICC команда для перевода в режим или все же придется втавить асемблер.


А что мешает написать нечто похожее на:
Код
void     set_sleep_mode (uint8_t mode)    
{
MCUCR |= mode << 4;
}
void     sleep_mode (void)
{
asm("sleep")
}


Это так навскидку.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.