реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Режим Power Save
MMP
сообщение May 25 2006, 15:44
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 43
Регистрация: 7-07-05
Из: г.Магнитогорск
Пользователь №: 6 618



Вообщем-то необходимо применить этот режим пониженного энергопотребления. Контролер при исчезновении питания по прерыванию с ноги(INT0) должен уснуть, при этом должен работать асинхронный таймер(реализованы часы). Вопрос в том как отписать на С (команда SLEEP) или еще чего надо? И особенно как выйти из него.
Go to the top of the page
 
+Quote Post
defunct
сообщение May 25 2006, 16:35
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(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 команды.
Go to the top of the page
 
+Quote Post
GxOST
сообщение May 25 2006, 17:09
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 58
Регистрация: 6-12-05
Из: Санкт-Петербург
Пользователь №: 11 878



Добавлю, что в даташите к контроллеру всё написано: и какие прерывания могут вывести из sleep-режимов; и настройки флагов. RTFM!


--------------------
cul8r!
* #ru_embedded - эмбеддерский чат
Go to the top of the page
 
+Quote Post
WHALE
сообщение May 25 2006, 17:10
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Странно,почему молчит AVR123?Типа "Краткий курс",стр 28,4 строчка снизу.А вообще такие вопросы
наводят на размышления... cranky.gif


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение May 25 2006, 17:21
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
Вопрос в том как отписать на С (команда SLEEP) или еще чего надо? И особенно как выйти из него.

Смотрите доку по компилятору, функция AVR-специфичная поэтому каждый делает по-своему.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
MMP
сообщение May 26 2006, 00:38
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 43
Регистрация: 7-07-05
Из: г.Магнитогорск
Пользователь №: 6 618



Цитата(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", как примерно он будет вести себя. Это больше адрессовано к тем, кто на практике уже применял этот режим.
Go to the top of the page
 
+Quote Post
arttab
сообщение May 26 2006, 01:24
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Перед slepp можно и запретить не нужные прерывания


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
BVU
сообщение May 26 2006, 06:40
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(MMP @ May 25 2006, 19:44) *
Вообщем-то необходимо применить этот режим пониженного энергопотребления. Контролер при исчезновении питания по прерыванию с ноги(INT0) должен уснуть, при этом должен работать асинхронный таймер(реализованы часы). Вопрос в том как отписать на С (команда SLEEP) или еще чего надо? И особенно как выйти из него.

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


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
GxOST
сообщение May 28 2006, 05:59
Сообщение #9


Участник
*

Группа: Свой
Сообщений: 58
Регистрация: 6-12-05
Из: Санкт-Петербург
Пользователь №: 11 878



BVU
Зачем внешние часы? В AVR внутренний RTC есть.

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


--------------------
cul8r!
* #ru_embedded - эмбеддерский чат
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение May 28 2006, 07:40
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
Есть ли на С ICC команда для перевода в режим или все же придется втавить асемблер.


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


Это так навскидку.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 13:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01458 секунд с 7
ELECTRONIX ©2004-2016