|
USART и режим сна "Power-save", как настроить USART перед сном? |
|
|
|
 |
Ответов
|
Jan 5 2011, 10:57
|

Местный
  
Группа: Участник
Сообщений: 315
Регистрация: 10-10-05
Пользователь №: 9 466

|
Проверил - USART мешает уходить в сон. Если делаю в программе, в начале ее работы, инициализацию USART, контроллер не засыпает, и потребляет от батареи ток ~90 мА. Если USART в программе не задействовать, контроллер нормально засыпает, и потребляет 10-15 мкА. Ну как же его отключить перед уходом в сон? Код ;Инициализация USART:
;Установить скорость передачи данных ldi temp,$00 ;9600 бит/с out UBRRH, temp ldi temp,$40 out UBRRL, temp
;Включить приемник и передатчик ldi temp, (1<<RXEN)|(1<<TXEN)|(1<<RXCIE) out UCSRB,temp
;Установить формат кадра: 8 битов данных, 1 стоп-бит ldi temp, (1<<URSEL)|(0<<USBS)|(3<<UCSZ0) out UCSRC,temp Вот этот код перед засыпанием не помогает: Код ldi temp, (0<<RXEN)|(0<<TXEN)|(0<<RXCIE) out UCSRB,temp sleep Порты перевожу в третье состояние, тогда потребляемый ток уменьшается до 10-15 мкА (если USART отключен), а то через них тоже как-то ток утекает: Код ldi temp,$00 out PORTD,temp ;инициализация PORTD ldi temp,$00 out DDRD,temp ;установка направления PORTD
Сообщение отредактировал James D. - Jan 5 2011, 11:00
|
|
|
|
|
Jan 5 2011, 11:55
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(James D. @ Jan 5 2011, 16:57)  Проверил - USART мешает уходить в сон. Если делаю в программе, в начале ее работы, инициализацию USART, контроллер не засыпает, и потребляет от батареи ток ~90 мА. mA или uA ? Если именно миллиампер - это что-то совершенно дикое, даже активный микроконтроллер не может столько потреблять. Если микроампер - скорее, какое-то потребление через выход или pull-up резистор. Цитата Если USART в программе не задействовать, контроллер нормально засыпает, и потребляет 10-15 мкА. Если активно что-то типа таймера в асинхронном режиме или WDT - похоже. Если нет - то неприлично много. Цитата Ну как же его отключить перед уходом в сон? Еще раз: включенный USART сам по себе на потребление фактически не влияет. Цитата Вот этот код перед засыпанием не помогает: Код ldi temp, (0<<RXEN)|(0<<TXEN)|(0<<RXCIE) out UCSRB,temp sleep Потому и не помогает - не USART виноват. Цитата Порты перевожу в третье состояние, тогда потребляемый ток уменьшается до 10-15 мкА (если USART отключен), а то через них тоже как-то ток утекает: Вот и надо разбираться, что куда утекает. А заодно и на остальную периферию посмотреть - не остался ли включенным аналоговый компаратор, нет ли включенных pull-up там, где не надо, не болтаются ли неподключенные входы в третьем состоянии...
|
|
|
|
|
Jan 5 2011, 13:04
|

Местный
  
Группа: Участник
Сообщений: 315
Регистрация: 10-10-05
Пользователь №: 9 466

|
Цитата(rx3apf @ Jan 5 2011, 17:55)  mA или uA ? Если именно миллиампер - это что-то совершенно дикое, даже активный микроконтроллер не может столько потреблять. Если микроампер - скорее, какое-то потребление через выход или pull-up резистор. Это миллиамперы (при задействованном USART), микроамперы - при отключенном USART. Делаю только инициализацию USART, данные не принимаются и не передаются. Цитата Если активно что-то типа таймера в асинхронном режиме или WDT - похоже. Если нет - то неприлично много. Да, продолжает работать таймер - МК просыпается 1 раз в секунду (часы в МК работают), и снова засыпает. Поэтому потребляемый ток колеблется от 10 до, 13-15 мкА. Микроамперметр стрелочный использую, точнее замерить не могу. 10-15 мкА, это, насколько я помню, довольно близко к току саморазряда батареи 1,5В АА или ААА. Так что приемлемо. У меня три аккумулятора ААА используются в качестве автономного питания (~4,1 В). Цитата Еще раз: включенный USART сам по себе на потребление фактически не влияет. Цитата Потому и не помогает - не USART виноват. Ничего в железе не меняю, единственно меняю в программе: в первом варианте - USART инициализируется, во втором - нет. В первом случае потребление около 90 миллиампер, во втором - 10-15 микроампер. Цитата Вот и надо разбираться, что куда утекает. А заодно и на остальную периферию посмотреть - не остался ли включенным аналоговый компаратор, нет ли включенных pull-up там, где не надо, не болтаются ли неподключенные входы в третьем состоянии... Во время настройки МК сразу после включения делаю вот так: Код ;Запретить АЦП, аналоговый компаратор и все, что не должно работать в ;режиме сна (и вообще в программе) для снижения энергопотребления:
ldi temp,(0<<ADEN);Запретить АЦП out ADCSR,temp
ldi temp,(1<<ACD)|(0<<ACIE);Запретить аналоговый компаратор out ACSR,temp
ldi temp,(1<<WDTOE)|(1<<WDE);Запретить WATCHDOG таймер out WDTCR,temp ;Выключить WDT: ldi temp,(0<<WDE) out WDTCR,temp Ну вот порт D перевел в третье сотояние - ток уменьшился до микроампер. Еще можно настроить его на выход, и установить все выводы в "0" - будет тот же результат. Хороший результат  А вот если его сконфигурить на вход с подтягивающим резистором или на выход, но выводы установить в "1", то потребление увеличивается до десятков миллиампер. Я выбрал третье состояние. К выводам порта D подключен еще один МК - ATmega32, но тот отключается полностью, но, видимо, что-то все равно перетекает через него. Если задействован USART, то как ни настраивай порт D, потребление не уменьшается.
Сообщение отредактировал James D. - Jan 5 2011, 13:17
|
|
|
|
|
Jan 5 2011, 14:01
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(James D. @ Jan 5 2011, 19:04)  Это миллиамперы (при задействованном USART), микроамперы - при отключенном USART. Делаю только инициализацию USART, данные не принимаются и не передаются. Исправный микроконтроллер (из обсуждаемой серии) сам по себе ни при каких условиях не может жрать 90 mA, это безумно много. Норма - на порядок меньше в активном режиме. Цитата Да, продолжает работать таймер - МК просыпается 1 раз в секунду (часы в МК работают), и снова засыпает. Для прерываний раз в секунду (если WDT отключен) - 10...15 uA тоже многовато, но правдоподобно. Цитата Ну вот порт D перевел в третье сотояние - ток уменьшился до микроампер. Еще можно настроить его на выход, и установить все выводы в "0" - будет тот же результат. Хороший результат  А вот если его сконфигурить на вход с подтягивающим резистором или на выход, но выводы установить в "1", то потребление увеличивается до десятков миллиампер. Я выбрал третье состояние. К выводам порта D подключен еще один МК - ATmega32, но тот отключается полностью, но, видимо, что-то все равно перетекает через него. Если задействован USART, то как ни настраивай порт D, потребление не уменьшается. Если на линиях порта висит отключаемый (по питанию, да ?) микроконтроллер, то паразитная запитка через выход в "1"-состоянии - неизбежна. Я уже забыл, включение USART приоритетно перед установкой DDRD или нет (всегда настраиваю направление отдельно), если да, то это вполне объяснение факта (на TxD будет "1"), но величина (90 mA) все равно неправдоподобна велика (это уже начинает смахивать на "тиристорный эффект"). Хотя нет, если и принудительная запись нулей в регистр управления ничего не меняет, значит, не то. Но объяснение все равно надо искать в неправильной настройке портов. И не в коем случае не отключать по питанию CMOSовскую внешнюю периферию, ели не предприняты меры по исключению паразитной запитки.
|
|
|
|
|
Jan 5 2011, 16:17
|

Местный
  
Группа: Участник
Сообщений: 315
Регистрация: 10-10-05
Пользователь №: 9 466

|
Цитата(rx3apf @ Jan 5 2011, 20:01)  Исправный микроконтроллер (из обсуждаемой серии) сам по себе ни при каких условиях не может жрать 90 mA, это безумно много. Норма - на порядок меньше в активном режиме.
Для прерываний раз в секунду (если WDT отключен) - 10...15 uA тоже многовато, но правдоподобно.
Если на линиях порта висит отключаемый (по питанию, да ?) микроконтроллер, то паразитная запитка через выход в "1"-состоянии - неизбежна. Я уже забыл, включение USART приоритетно перед установкой DDRD или нет (всегда настраиваю направление отдельно), если да, то это вполне объяснение факта (на TxD будет "1"), но величина (90 mA) все равно неправдоподобна велика (это уже начинает смахивать на "тиристорный эффект"). Хотя нет, если и принудительная запись нулей в регистр управления ничего не меняет, значит, не то. Но объяснение все равно надо искать в неправильной настройке портов. И не в коем случае не отключать по питанию CMOSовскую внешнюю периферию, ели не предприняты меры по исключению паразитной запитки. Вот такая у меня схемка; ATmega32 отключаются сами по себе при отключении внешнего питания, ATmega 16 начинает питаться от батареи. Ток меряю возле самой батареи. Попробую сначала USART настроить, потом порты... Мне кажется проблема в программе, с настройками, потому что в железе абсолютно ничего не меняю, меняю только софт, а потребление изменяется.
|
|
|
|
|
Jan 5 2011, 16:54
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(James D. @ Jan 5 2011, 22:17)  Мне кажется проблема в программе, с настройками, потому что в железе абсолютно ничего не меняю, меняю только софт, а потребление изменяется. Никакие чисто программные настройки неспособны поднять потребление микроконтроллера до 90 mA. И если нет "коротышей" в приведенной схеме, то объяснение остается лишь одно - одна или несколько линий связи с вторым процессором при переходе в режим батарейного питания остаются в режиме выходов с состоянием "1". Тогда, вполне естественно, происходит паразитная запитка оставшейся части схемы через входные защитные диоды второго процессора (и то странно, четырехвольтовое питание, минус падение на диодах и на остальных компонентах, и чтобы такое потребление - удивляет, я бы ожидал в разы меньше). По-хорошему, надо бы все линии развязать резисторами и следить за логическими уровнями. Еще из явных недостатков - схема перехода на резервное питание сделана некрасиво. И уж если диодная развязка - то диодами с переходом Шоттки. Ну и, конечно, балластный резистор в цепи подсветки LCD никак не 3.3K. Там единицы-десятки Ohm, да и токи приличные. Если хочется регулировать - то PWM, выбрав резисторы для максимального тока.
|
|
|
|
Сообщений в этой теме
James D. USART и режим сна "Power-save" Jan 4 2011, 13:19 rx3apf Цитата(James D. @ Jan 4 2011, 19:19) Подс... Jan 4 2011, 14:28 James D. Вообще ничего делать не надо? Может, хотя бы так:
... Jan 4 2011, 15:35 rx3apf Цитата(James D. @ Jan 4 2011, 21:35) Вооб... Jan 4 2011, 16:55 James D. Спасибо, буду разбираться дальше. Jan 5 2011, 01:47      James D. Цитата(rx3apf @ Jan 5 2011, 22:54) Еще из... Jan 6 2011, 02:02       rx3apf Цитата(James D. @ Jan 6 2011, 08:02) До ч... Jan 6 2011, 06:18        James D. Насчет USART - я провода, которые от ATmega16 к ST... Jan 6 2011, 12:46         aesok Если Вас устроит халтурное решение, то перечитайте... Jan 7 2011, 08:56           demiurg_spb Цитата(zombi @ Jan 8 2011, 15:34) А все п... Jan 9 2011, 14:09
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|