Не ясно для чего вы выставляете "по любому логическому изменению на INT1", если есть возможность выставить по фронту или по спаду на INT1.
В power-down же не работает фронт или спад. Остается 2 варианта - либо по нулю, либо по любому изменению. По нулю не выводится, а по любому изменению сразу два выходит
Поскольку в этом режиме генератор отключается то время выхода из состояния - как при сбросе, т.е. жесткая задержка пока генератор раскачается плюс некоторое количество тактов для стабилизации. Все задается конфигурацией контроллера.
Научил вроде контроллер выводить из спящего режима, но только после выхода он работает некорректно (а именно UART, команды не доходят до приемного устройства), я так понимаю, это как раз из-за того, что контроллер не успевает выходить на рабочий режим, а я ему уже команды скармливаю? Я правильно понимаю, что задержка выставляется регистром SUT? Контроллер работает у меня от внутреннего генератора.
Нет, когда ты команды ему скармливаешь он уже в полностью боеспособном состоянии. Скорей всего, перед входом в спящий режим что-то происходит с UART-ом, может не успевает передать порцию данных, а ты его на середине процесса в спячку? А может конкретный глюк камушка. Попробуй его перевключать.или выключать перед входом и включать при выходе со спячки.
Сейчас столкнулся с совсем парадоксальной ситуацией, очень надеюсь на помощь форумчан. Итак, ситуация следующая: контроллер успешно засыпает, потребление всей платы составляет 0.1 мА, успешно просыпается, выполняет необходимые операции, среди которых есть запись в EEPROM внутреннюю. После этого он успешно засыпает, НО, потребление в спящем режиме становится около 5 мА (!). Еслив выкинуть из кода запись в EEPROM, то все становится в порядке, потребление тоже 0.1 мА. Но стоит только вернуть операцию записи, как потребление вновь поднимается. Товарищи, подскажите, в чем может быть дело? Код записи в EEPROM приведен ниже (он из даташита):
Код:
void EEPROM_write(unsigned int uiAddress, unsigned char ucData) { while(EECR & (1<<EEWE));//ждем установки бита EEWE EEAR = uiAddress;//устанавливаем адрес EEDR = ucData;//записываем байт данных EECR |= (1<<EEMWE);//устанавливаем EEMWE EECR |= (1<<EEWE);//устанавливаем EEWE }
Только теперь UART стал барахлить, это может быть связано с выходом их спящего режима, есть тут какие-то особенности? То нормально отработает, то кракозябры пришлет? В чем может быть хитрость?
Так она и не ведется когда я еще данные отправляю. Он после выхода из спящего режима, должен отправить по UART несколько команд. Опять же, без использования спящего режима все в порядке.
В общем, с UART-ом такая фигня происходит: при использовании спящего режима он к посылке добавляет такие символы: <0><0><0><0>. Из-за этого приемное устройство (GSM-модем) неправильно интерпретирует команды. Если НЕ использовать спящий режим, то он все корректно отправляет. В чем может быть дело?
Уважаемые форумчане, подскажите пожалуйста (без кода) как происходит алгоритм засыпания и просыпания из PD по внешнему(INT1) прерыванию, по частям понимаю, а в целом не доходит
_________________ Falsus in uno, falsus in omnibus
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 46
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения