Добрый день! Использую в своем девайсе контроллер Atmega8 совместно с часами реального времени DS1339. По задумке, будильник часов должен выводить контроллер из спящего режима, с помощью подтяжки линии прерывания к земле. Линия также подтянута к питанию через резистор. Использую режим power-down, как самый экономичный. Согласно даташиту, из этого режима контроллер выходит с помощью внешнего прерывания или ресета. Прерывание настроено на срабатывание по перепаду из 1 в 0, однако он категорически отказывается из него выходить. Без использования спящего режима все в порядке, прерывание срабатывает. В чем может быть дело? Заранее благодарен.
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Ср мар 26, 2014 11:39:46
Друг Кота
Карма: 67
Рейтинг сообщений: 1066
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19966 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
kushman писал(а):
Прерывание настроено на срабатывание по перепаду из 1 в 0, однако он категорически отказывается из него выходить.
Естессно отказывается. Читайте в ДШ раздел вывода из сна по прерываниям внимательней (сноки и пр.).
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Да, извиняюсь за свою невнимательность, пропустил это в даташите. Но возникла другая проблема, МК вообще не хочет генерировать прерывание по уровню. Хотя часы притягивают линию к земле, это точно, тестером проверял. Может маленькая длительность?
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Ср мар 26, 2014 12:24:13
Друг Кота
Карма: 67
Рейтинг сообщений: 1066
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19966 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
kushman писал(а):
Может маленькая длительность?
Может, прерывание не настроено?
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Да нет, все вроде настроено, я только поменял пару битов в регистре MCUCR, настроил их на работу по низкому уровню (ISC11=0, ISC10=0). По перепаду без использования спящего режима срабатывает на ура, а по уровню, что со спящим, что без спящего - никакой реакции.
- при высоком уровне на входах INTx сбросить флаги GIFR=0xC0 - глобально разрешить прерывания SREG.7=1 - и только теперь #asm SLEEP #endasm то камень обязан уйти в POWER DOWN Но, вопрос корректного выхода из POWER DOWN остался.
Пробовал сгенерировать прерывание по уровню без спящего режима - не срабатывает. По перепаду - пожалуйста, по уровню - ни в какую. Вот в чем проблема. С чем это может быть связано? Линия то притягивается к земле, это точно.
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Чт мар 27, 2014 15:41:34
Друг Кота
Карма: 67
Рейтинг сообщений: 1066
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19966 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Alexeyslav писал(а):
Может попробовать не прерывание от порта, а специальный вход внешнего прерывания INT0/INT1?
В смысле? Из PD только INT0/INT1 и выводят.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Чт мар 27, 2014 16:13:16
Друг Кота
Карма: 67
Рейтинг сообщений: 1066
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19966 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
kushman писал(а):
А как от порта можно прерывание получить?
В других МК есть прерывания от портов.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Тут присутствует одна особенность, прерывания (если назначены по низкому уровню) происходят до тех пор, пока на ноге низкий уровень. Значит проц будет постоянно выходить из повер довн.
Попробовал выводить контроллер из спящего режима по любому логическому изменению на INT1 - и все в порядке, выходит и работает. Единственная загвоздка в том, что возникает два прерывания, несмотря на то, что они глобально запрещены на время обработки. Сегодня еще попробую вышеприведенный код, посмотрим что получится.
Не ясно для чего вы выставляете "по любому логическому изменению на INT1", если есть возможность выставить по фронту или по спаду на INT1.
kushman писал(а):
Единственная загвоздка в том, что возникает два прерывания, несмотря на то, что они глобально запрещены на время обработки.
Флаг прерывания устанавливается, даже если они глобально запрещены, если есть необходимость выполните ручной сброс флага прерывания, перед разрешением прерываний.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения