Atmega 8. Выход из режима power-down.

Обсуждаем контроллеры компании Atmel.
Ответить
Нашел транзистор. Понюхал.
Сообщения: 194
Зарегистрирован: Сб ноя 07, 2009 15:27:59

Сообщение kushman »

codenamehawk писал(а):Не ясно для чего вы выставляете "по любому логическому изменению на INT1", если есть возможность выставить по фронту или по спаду на INT1.
В power-down же не работает фронт или спад. Остается 2 варианта - либо по нулю, либо по любому изменению.
По нулю не выводится, а по любому изменению сразу два выходит :))
Реклама
Вымогатель припоя
Сообщения: 541
Зарегистрирован: Вт фев 09, 2010 17:52:26

Сообщение codenamehawk »

kushman писал(а): В power-down же не работает фронт или спад. Остается 2 варианта - либо по нулю, либо по любому изменению.
ИМНО только лов левел выводит из повер довн.
Реклама
Нашел транзистор. Понюхал.
Сообщения: 194
Зарегистрирован: Сб ноя 07, 2009 15:27:59

Сообщение kushman »

Вот повсюду пишут, что из power-down МК выходит долго. В связи с этим вопрос - долго это сколько? Как узнать, что он действительно проснулся?
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

Поскольку в этом режиме генератор отключается то время выхода из состояния - как при сбросе, т.е. жесткая задержка пока генератор раскачается плюс некоторое количество тактов для стабилизации. Все задается конфигурацией контроллера.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Нашел транзистор. Понюхал.
Сообщения: 194
Зарегистрирован: Сб ноя 07, 2009 15:27:59

Сообщение kushman »

Научил вроде контроллер выводить из спящего режима, но только после выхода он работает некорректно (а именно UART, команды не доходят до приемного устройства), я так понимаю, это как раз из-за того, что контроллер не успевает выходить на рабочий режим, а я ему уже команды скармливаю? Я правильно понимаю, что задержка выставляется регистром SUT? Контроллер работает у меня от внутреннего генератора.
Реклама
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

Нет, когда ты команды ему скармливаешь он уже в полностью боеспособном состоянии. Скорей всего, перед входом в спящий режим что-то происходит с UART-ом, может не успевает передать порцию данных, а ты его на середине процесса в спячку? А может конкретный глюк камушка. Попробуй его перевключать.или выключать перед входом и включать при выходе со спячки.
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Сообщения: 194
Зарегистрирован: Сб ноя 07, 2009 15:27:59

Сообщение kushman »

Сейчас столкнулся с совсем парадоксальной ситуацией, очень надеюсь на помощь форумчан.
Итак, ситуация следующая: контроллер успешно засыпает, потребление всей платы составляет 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
}
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

EEPROM не отключается, надо дождаться пока запись завершится + еще несколько тактов и только потом можно глушить все и спать.
Контактная информация:
Мудрый кот
Аватара пользователя
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Сообщение Flasher »

скопируй в конец строчку ожидания флага конца записи
Нашел транзистор. Понюхал.
Сообщения: 194
Зарегистрирован: Сб ноя 07, 2009 15:27:59

Сообщение kushman »

Да, все заработало, огромное всем спасибо! :)

Только теперь UART стал барахлить, это может быть связано с выходом их спящего режима, есть тут какие-то особенности?
То нормально отработает, то кракозябры пришлет? В чем может быть хитрость?
Мудрый кот
Аватара пользователя
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Сообщение Flasher »

Может дождаться завершения передачи?
Нашел транзистор. Понюхал.
Сообщения: 194
Зарегистрирован: Сб ноя 07, 2009 15:27:59

Сообщение kushman »

Так она и не ведется когда я еще данные отправляю. Он после выхода из спящего режима, должен отправить по UART несколько команд. Опять же, без использования спящего режима все в порядке.
Нашел транзистор. Понюхал.
Сообщения: 194
Зарегистрирован: Сб ноя 07, 2009 15:27:59

Сообщение kushman »

В общем, с UART-ом такая фигня происходит: при использовании спящего режима он к посылке добавляет такие символы: <0><0><0><0>. Из-за этого приемное устройство (GSM-модем) неправильно интерпретирует команды. Если НЕ использовать спящий режим, то он все корректно отправляет. В чем может быть дело?
Родился
Аватара пользователя
Сообщения: 4
Зарегистрирован: Ср окт 24, 2012 13:37:48

Сообщение gammalakton »

Уважаемые форумчане, подскажите пожалуйста (без кода) как происходит алгоритм засыпания и просыпания из PD по внешнему(INT1) прерыванию, по частям понимаю, а в целом не доходит :cry:
Falsus in uno, falsus in omnibus
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Засыпаешь ты просто. Без всяких прерываний. (послал соответствующую команду) По прерыванию ты только пробуждаешься и продолжаешь с места "усыпления"
Ответить

Вернуться в «AVR»