Mega8+Sleep(RealTime)+TWI=HALT

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
wzn
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Пн июн 26, 2006 15:31:13
Откуда: Samara
Контактная информация:

Mega8+Sleep(RealTime)+TWI=HALT

Сообщение wzn »

Сражаюсь уже месяц. Бесполезно. В отладчике всё пашет. В реалиях - висим на команде Sleep.
Работает либо RTime от внешнего часового (Timer2) либо TWI. Никак не подружу.
Изображение
До этой процедуры команда Sleep выполняется успешно и процессор после длительного простоя продолжает работать от прерывания с Timer2 как и задумано. Но после активизации TWI и очередного вызова Sleep тут на нём и виснет. Есть идеи?

Если этот Sleep заремить, то всё работает на ура, но вот и ток потребления при этом совсем другой. :(
Обычно работающее прерывание по INT1 от клавиатуры тут также не спасает. Висит насмерть!
Реклама
stas00n
Вымогатель припоя
Сообщения: 557
Зарегистрирован: Пн мар 23, 2009 04:03:45

Re: Mega8+Sleep(RealTime)+TWI=HALT

Сообщение stas00n »

А контроллер какой? Надеюсь, TWI в режиме слейва? Иначе как Вы себе представляете пробуждение? При включении TWI "случайно" не модифицируется управляющий регистр энерносбережения (SMCR или MCUCR)? Например в режимах Power down или Standby прерывание от Timer2 будить контроллер не будет. WDT отключен?
Реклама
stas00n
Вымогатель припоя
Сообщения: 557
Зарегистрирован: Пн мар 23, 2009 04:03:45

Re: Mega8+Sleep(RealTime)+TWI=HALT

Сообщение stas00n »

wzn писал(а):Обычно работающее прерывание по INT1 от клавиатуры тут также не спасает. Висит насмерть!
Ах, да, случайно не забыли ли сделать "SEI" перед "SLEEP"?
Аватара пользователя
wzn
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Пн июн 26, 2006 15:31:13
Откуда: Samara
Контактная информация:

Re: Mega8+Sleep(RealTime)+TWI=HALT

Сообщение wzn »

Мега8. Я же его перед сном инициализировал и заставил данные слать. (например передача адреса к LCD) и когда выставлен бит прерваться тогда уже и ожидание этого прерывания. Обидно то, что года три назад всё работало. Что-то улучшил в функции ожидания... :(
Sleep = ADC Noise Reduction. Раньше как-то работало.

SEI я сделал еще до теста работы RTime. дабы убедиться, что RT пашет. Может ему нужно больше работать после пробуждения?

WDT не пользую и не активировал.
МСUCR меняются биты включающие INT1 и сбрасывается флаг INT1 для перезапуска клавиатуры в момент срабатывания T2.
MCUCR на момент Sleep в отладчике #B10010000 что соответствует задуманному.
Инициализация приведенная ниже идет при блокированном I=0.
Последний раз редактировалось wzn Чт янв 27, 2011 16:33:08, всего редактировалось 2 раза.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
wzn
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Пн июн 26, 2006 15:31:13
Откуда: Samara
Контактная информация:

Re: Mega8+Sleep(RealTime)+TWI=HALT

Сообщение wzn »

Инициализация:
Изображение

Первые три команды жестко очищают рабочие переменные.
Далее запуск RT (как в даташите написано). Успешно. Проверка после показанного фрагмента даёт положительный результат.
Далее I=0. На всякий случай и инициализация клавиатуры. Тоже успешная (вставлял коды мигания диодом зацикленный временный кусок).
Дальше - запуск NWI с зависоном на Sleep-e.

Я в ступоре.
Реклама
Аватара пользователя
wzn
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Пн июн 26, 2006 15:31:13
Откуда: Samara
Контактная информация:

Re: Mega8+Sleep(RealTime)+TWI=HALT

Сообщение wzn »

Вчера поставил светодиодные ловушки в программе во всех местах. Выяснил, что на Sleep не виснет, RT и Keyb пррерывание по INT1 обслуживаются, а вот TWI в свой вектор не заходит ни разу! так и крутится вокруг вышеоговоренного Sleep при установленном TWIE=1 и I=1. Какого х...? И почему раньше работало? Вектор (адрес на TWI) тоже прописан. Чего ему еще нужно? И в отладчике всё проходит на ура. А в реалии смертельный цикл ожидания когда TWIE будет "0". Конечно никогда, если он туда не заглядывает! А вот почему?
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»