Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Потребление схемы до и после sleep
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Spider
Всем привет. Есть достаточно большая схема под управление AT90USB1287. Большую часть времени процессор спит. Но вот стоит его пробудить и снова усыпить в то же состояние, как схема начинает потреблять на 3 mA больше.
Ситуация следующая:
После включения процессор подготавливает порт и регистры ко сну. Отключая переферию и переводя ноги в Z или 0 по обстановке.
После подготовки переходит в sleep_cpu(); с периодическим пробуждением.
При пробуждении проверяется условие и либо просыпаемся либо нет.
Так вот если проснуться сделать всякие и снова уснуть ТЕМ же способом что и вначале (та же функция), процессор снова засыпает но плата начинает потреблять больше.

все потребители на плате кроме процессора запитаны через полевой транзистор, который отключается процессором перед сном. Что он отключается проверено.
В эмуляторе я делал дампы памяти и регистров проца до и после стренного поведения, всё почти одинаково, кроме счётчиков таймеров и почему-то PIND2, нога к которой ничего не подключено кстати.

Так вот куда рыть? Что может быть?
kovigor
Цитата(Alexey Belyaev @ Nov 18 2010, 21:30) *
Так вот куда рыть? Что может быть?


Измерьте напряжение питания на отключенной во время сна части схемы когда ток потребления в норме и когда ток ненормально завышен, и полученные напряжения сравните. Почти наверняка идет запитка отключенных полевым транзистором блоков от вашего МК, например, через невыключенный PULLUP. Если же этого нет, то, возможно, вы забываете выключать какую-то ненужную вам во сне периферию МК. Короче, амперметр и вольтметр должны помочь ...

P.S. А если это происходит, когда ваша плата подключена к машине по USB, то надо смотреть, корректно ли она засыпает вообще, с точки зрения шины ...
Spider
Ради интереса делал power_all_disable(); и говорю же сравнивал все I/O регистры, а менно они отвечают за PULLUP и периферию.
т.е. ноги процессора вроде как до и после в одном состоянии. Ну а потребление и напряжение я ещё померю.
kovigor
Цитата(Alexey Belyaev @ Nov 18 2010, 22:00) *
Ради интереса делал power_all_disable(); и говорю же сравнивал все I/O регистры, а менно они отвечают за PULLUP и периферию.
т.е. ноги процессора вроде как до и после в одном состоянии. Ну а потребление и напряжение я ещё померю.


Что бы вы ни делали, а амперметр и вольтметр еще никто не отменял. И на программном уровне можно сравнивать все, что угодно. Но толку от этого обычно мало. Нужно мерить, и начинать именно с измерений.
ArtemKAD
АЦП часом не запускаешь SLEEP-ом? Кстати, SLEEP это часом не IDLE? PUD отключен(в 1)?
rezident
Цитата(Alexey Belyaev @ Nov 18 2010, 23:30) *
переводя ноги в Z или 0 по обстановке.
Неиспользуемые пины нужно держать в режиме выдачи лог.0. Z-состояние использовать рекомендуется только, если имеется внешний pull-up или pull-down резистор. В остальных случаях висячий в Z-состоянии вход вызывает повышенное потребление.
Spider
Цитата(kovigor @ Nov 18 2010, 23:07) *
Что бы вы ни делали, а амперметр и вольтметр еще никто не отменял. И на программном уровне можно сравнивать все, что угодно. Но толку от этого обычно мало. Нужно мерить, и начинать именно с измерений.
Дык измерял же потребление, не измерял бы вопрос бы не возник.
А как кроме как программным способом я должен управлять процессором? smile.gif Кривым стартером?
Цитата(ArtemKAD @ Nov 18 2010, 23:11) *
АЦП часом не запускаешь SLEEP-ом? Кстати, SLEEP это часом не IDLE? PUD отключен(в 1)?
нет. вот что то, а АЦП и Компоратор я принудительно выключаю. А засыпаю я в Power-Save, чтобы иметь возможность просыпаться по таймеру 5 раз в секунду.
Хм, а вот про PUD я и забыл. Щас поколупаем...
Цитата(rezident @ Nov 19 2010, 00:38) *
Неиспользуемые пины нужно держать в режиме выдачи лог.0. Z-состояние использовать рекомендуется только, если имеется внешний pull-up или pull-down резистор. В остальных случаях висячий в Z-состоянии вход вызывает повышенное потребление.
Спасибо, щас переделаемс...
777777
Цитата(rezident @ Nov 18 2010, 23:38) *
Неиспользуемые пины нужно держать в режиме выдачи лог.0. Z-состояние использовать рекомендуется только, если имеется внешний pull-up или pull-down резистор. В остальных случаях висячий в Z-состоянии вход вызывает повышенное потребление.

Почему именно внешний? Внутреннюю подтяжку никто не отменял, к тому же это безопаснне ИМХО - если вывод случайно коротнешь, то ничего не случится.
rezident
Цитата(777777 @ Nov 19 2010, 14:43) *
Почему именно внешний? Внутреннюю подтяжку никто не отменял, к тому же это безопаснне ИМХО - если вывод случайно коротнешь, то ничего не случится.
Когда вы включите внутренний pull-up, то для всего, что будет подключено снаружи пин уже не будет в Z-состоянии, не так ли? К тому же мой совет был общего характера, а не конкретно про МК AVR. Внутренний (отключаемый) pull-up далеко не у всех МК имеется.
777777
Цитата(rezident @ Nov 19 2010, 19:45) *
Когда вы включите внутренний pull-up, то для всего, что будет подключено снаружи пин уже не будет в Z-состоянии, не так ли?

Речь шла о неиспользуемых пинах.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.