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

 
 
> Как правильно выйти из "спящего режима"
Jagupop
сообщение Jul 2 2007, 21:17
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 28
Регистрация: 15-05-07
Пользователь №: 27 727



Махаюсь со своим первым проектом - возникает уйма вопросов, большинство из которых решается не без помощи настоящего форума.
Есть задача. ATTINY2313 "спит". По приходу лог. "0" (хотя, схемотехнически несложно поменять и на "1") на INT0 проц должен проснуться и выполнять определенные функции. В дальнейшем, этот же вывод процессора должен уже будет для этого же сигнала использоваться как вход порта. Вот кусок программы:

sei();
set_sleep_mode (SLEEP_MODE_IDLE);
cli ();
....

Процессор, вроде как не просыпается... хотя не уверен. А как определить? Подскажите, что неправильно в исходнике?

Спасибо!!!

Сообщение отредактировал Jagupop - Jul 2 2007, 21:18
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
defunct
сообщение Jul 3 2007, 22:01
Сообщение #2


кекс
******

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



Цитата
А можно "разжевать" построчно - что для чего?

можно.

Код
начало программы

    настроить периферию (порты, ацп, uart и т.п. все с чем собираетесь работать)
    разрешить режим сна (bit SE в MCUCR)
    разрешить прерывания (sei)
    
    Далее бесконечный цикл
10:
         Выполнить какие-то поточные действия
         Уснуть до следующего прерывания
goto 10


При старте программы настраивается периферия, разрешается режим сна и прерывания, выполняются какие-то рутинные действия и проц засыпает на команде sleep.
При возникновении любого прерывания (в режиме Idle) проц проснется, первой инструкцией которую он выполнит будет GOTO 10, потом он войдет в обработчик прерывания которое его пробудило, выполнит обработку прерывания, потом вернется к строчке 10: - выполнит какие-то поточные действия и на команде sleep() снова уснет... и так по кругу.
Go to the top of the page
 
+Quote Post
MSprut
сообщение Jul 5 2007, 13:38
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 225
Регистрация: 25-04-06
Из: Украина, Луганск
Пользователь №: 16 476



Вообще даташиты рекомендуют выбирать и разрешать режим сна непосредственно перед командой SLEEP.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 5 2007, 22:38
Сообщение #4


кекс
******

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



Цитата(MSprut @ Jul 5 2007, 16:38) *
Вообще даташиты рекомендуют выбирать и разрешать режим сна непосредственно перед командой SLEEP.

Давайте еще и уарт будем инициализировать перед отправкой каждого байта.
Вообще нет таких рекомендаций в даташитах и быть не может.


Цитата(Jagupop @ Jul 5 2007, 21:34) *
На INT0 появляестя лог. "1" . Не пойму то ли не "засыпает" то ли не "просыпается". Контролирую подключенным к порту B светодиодом. В чем ошибка?

Обработчик INT0 у вас есть?
Полный код приведите.

sleep_disable() - делать не нужно.
сам по себе mcu не уснет.
Go to the top of the page
 
+Quote Post
acex2
сообщение Jul 6 2007, 12:13
Сообщение #5


Адепт
****

Группа: Свой
Сообщений: 520
Регистрация: 15-02-05
Пользователь №: 2 656



Цитата(defunct @ Jul 6 2007, 02:38) *
Вообще нет таких рекомендаций в даташитах и быть не может.


Datasheet ATMega88, стр.43:
"To avoid the MCU entering the sleep mode unless it is the programmer’s purpose, it is recommended to write the Sleep Enable (SE) bit to one just before the execution of the SLEEP instruction and to clear it immediately after waking up"
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jagupop   Как правильно выйти из "спящего режима"   Jul 2 2007, 21:17
- - Snaky   Цитата(Jagupop @ Jul 3 2007, 04:17) sei()...   Jul 3 2007, 02:45
|- - defunct   Цитата(Snaky @ Jul 3 2007, 05:45) а лучше...   Jul 3 2007, 18:03
- - Jagupop   Цитатаmain() { set_sleep_mode(xx) sei(); ...   Jul 3 2007, 21:44
- - Jagupop   Прям не знаю... GIMSK = 0b01000000; set_...   Jul 5 2007, 18:34
- - Jagupop   Ну вот полный... #include <avr/io.h> #inclu...   Jul 6 2007, 06:38
- - defunct   Jagupop Проэмулировал вашу программу в железе. Чип...   Jul 8 2007, 12:59
- - Jagupop   ЛЮДИ!!! ЧЕЛОВЕКИ!!! Помоги...   Jul 9 2007, 23:50
|- - defunct   Цитата(Jagupop @ Jul 10 2007, 02:50) Ну н...   Jul 10 2007, 10:03
- - Jagupop   defunct, я Вас пыталсявыловить в ICQ - все безрезу...   Jul 12 2007, 17:03
|- - defunct   Цитата(Jagupop @ Jul 12 2007, 20:03) defu...   Jul 12 2007, 20:22
- - Jagupop   С прерываниями разобрался - проц. по приходу сигна...   Jul 17 2007, 11:09
- - Pyku_He_oTTyda   ЦитатаПри появлении лог. 0 проц должен проснуться ...   Jul 17 2007, 11:34
- - Jagupop   Чуток не так... По falling edge проц выходит из сп...   Jul 19 2007, 12:26
- - Pyku_He_oTTyda   если так?ЦитатаПо falling edge проц выходит из спя...   Jul 19 2007, 12:43
- - Jagupop   ЦитатаЗалетаем в прерывание и анализируем наличие...   Jul 19 2007, 13:17
- - defunct   Цитата(Jagupop @ Jul 19 2007, 16:17) А ра...   Jul 19 2007, 15:08


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

 


RSS Текстовая версия Сейчас: 20th August 2025 - 15:25
Рейтинг@Mail.ru


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