реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> USART и режим сна "Power-save", как настроить USART перед сном?
James D.
сообщение Jan 4 2011, 13:19
Сообщение #1


Местный
***

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



Подскажите, пожалуйста, как правильно сконфигурировать USART (ATmega16) перед переводом МК в режим сна "Power-save"?
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Jan 4 2011, 14:28
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(James D. @ Jan 4 2011, 19:19) *
Подскажите, пожалуйста, как правильно сконфигурировать USART (ATmega16) перед переводом МК в режим сна "Power-save"?

Поскольку USART в power-save не работает, ничего конфигурировать не нужно. Но перед sleep необходимо дождаться окончания передачи, если таковая выполнялась. Иначе последний байт-два никуда не уйдут или уйдут не полностью.
Go to the top of the page
 
+Quote Post
James D.
сообщение Jan 4 2011, 15:35
Сообщение #3


Местный
***

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



Вообще ничего делать не надо? Может, хотя бы так:
Код
ldi     temp, (0<<RXEN)|(0<<TXEN)|(0<<RXCIE)
out     UCSRB,temp
sleep

Или это ничего не дает?

А порты В/В как конфигурировать правильно для "Power-save"?
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Jan 4 2011, 16:55
Сообщение #4


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(James D. @ Jan 4 2011, 21:35) *
Вообще ничего делать не надо? Может, хотя бы так:
Код
ldi     temp, (0<<RXEN)|(0<<TXEN)|(0<<RXCIE)
out     UCSRB,temp
sleep

Или это ничего не дает?

Практического смысла в этом нет.
Цитата
А порты В/В как конфигурировать правильно для "Power-save"?

Не оставлять висящими CMOSовские входы.
Go to the top of the page
 
+Quote Post
James D.
сообщение Jan 5 2011, 01:47
Сообщение #5


Местный
***

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



Спасибо, буду разбираться дальше.
Go to the top of the page
 
+Quote Post
James D.
сообщение Jan 5 2011, 10:57
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Jan 5 2011, 11:55
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 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 там, где не надо, не болтаются ли неподключенные входы в третьем состоянии...

Go to the top of the page
 
+Quote Post
James D.
сообщение Jan 5 2011, 13:04
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 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 сам по себе на потребление фактически не влияет.

sad.gif

Цитата
Потому и не помогает - не 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" - будет тот же результат. Хороший результат sm.gif
А вот если его сконфигурить на вход с подтягивающим резистором или на выход, но выводы установить в "1", то потребление увеличивается до десятков миллиампер. Я выбрал третье состояние.
К выводам порта D подключен еще один МК - ATmega32, но тот отключается полностью, но, видимо, что-то все равно перетекает через него.

Если задействован USART, то как ни настраивай порт D, потребление не уменьшается.

Сообщение отредактировал James D. - Jan 5 2011, 13:17
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Jan 5 2011, 14:01
Сообщение #9


Гуру
******

Группа: Участник
Сообщений: 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" - будет тот же результат. Хороший результат sm.gif
А вот если его сконфигурить на вход с подтягивающим резистором или на выход, но выводы установить в "1", то потребление увеличивается до десятков миллиампер. Я выбрал третье состояние.
К выводам порта D подключен еще один МК - ATmega32, но тот отключается полностью, но, видимо, что-то все равно перетекает через него.

Если задействован USART, то как ни настраивай порт D, потребление не уменьшается.

Если на линиях порта висит отключаемый (по питанию, да ?) микроконтроллер, то паразитная запитка через выход в "1"-состоянии - неизбежна. Я уже забыл, включение USART приоритетно перед установкой DDRD или нет (всегда настраиваю направление отдельно), если да, то это вполне объяснение факта (на TxD будет "1"), но величина (90 mA) все равно неправдоподобна велика (это уже начинает смахивать на "тиристорный эффект"). Хотя нет, если и принудительная запись нулей в регистр управления ничего не меняет, значит, не то. Но объяснение все равно надо искать в неправильной настройке портов. И не в коем случае не отключать по питанию CMOSовскую внешнюю периферию, ели не предприняты меры по исключению паразитной запитки.
Go to the top of the page
 
+Quote Post
James D.
сообщение Jan 5 2011, 16:17
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 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 настроить, потом порты...
Мне кажется проблема в программе, с настройками, потому что в железе абсолютно ничего не меняю, меняю только софт, а потребление изменяется.
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Jan 5 2011, 16:54
Сообщение #11


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(James D. @ Jan 5 2011, 22:17) *
Мне кажется проблема в программе, с настройками, потому что в железе абсолютно ничего не меняю, меняю только софт, а потребление изменяется.

Никакие чисто программные настройки неспособны поднять потребление микроконтроллера до 90 mA. И если нет "коротышей" в приведенной схеме, то объяснение остается лишь одно - одна или несколько линий связи с вторым процессором при переходе в режим батарейного питания остаются в режиме выходов с состоянием "1". Тогда, вполне естественно, происходит паразитная запитка оставшейся части схемы через входные защитные диоды второго процессора (и то странно, четырехвольтовое питание, минус падение на диодах и на остальных компонентах, и чтобы такое потребление - удивляет, я бы ожидал в разы меньше). По-хорошему, надо бы все линии развязать резисторами и следить за логическими уровнями. Еще из явных недостатков - схема перехода на резервное питание сделана некрасиво. И уж если диодная развязка - то диодами с переходом Шоттки. Ну и, конечно, балластный резистор в цепи подсветки LCD никак не 3.3K. Там единицы-десятки Ohm, да и токи приличные. Если хочется регулировать - то PWM, выбрав резисторы для максимального тока.
Go to the top of the page
 
+Quote Post
James D.
сообщение Jan 6 2011, 02:02
Сообщение #12


Местный
***

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



Цитата(rx3apf @ Jan 5 2011, 22:54) *
Еще из явных недостатков - схема перехода на резервное питание сделана некрасиво.

До чего додумался, так и сделал, главное работает.
Или есть что предложить покрасивее? sm.gif
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Jan 6 2011, 06:18
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(James D. @ Jan 6 2011, 08:02) *
До чего додумался, так и сделал, главное работает.
Или есть что предложить покрасивее? sm.gif

Ну, эта тема неоднократно поднималась, думаю, поиском найдется. Я делал на p-канальных полевичках.
Go to the top of the page
 
+Quote Post
James D.
сообщение Jan 6 2011, 12:46
Сообщение #14


Местный
***

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



Насчет USART - я провода, которые от ATmega16 к ST232 идут отсоединил, МК нормально засыпает с инициализированным USART.
Поставил в линии по резистору, ток уменьшился, но все равно не то.
R1, R2: 1 кОм - 2.5 мА
R1, R2: 11 кОм - 200 мкА
R1, R2: 100 кОм - 80 мкА - но USART не работает, нет связи с компьютером...
Прикрепленное изображение


Но вообще МК к ST232 напрямую же подключается.
Может порты D0 и D1 у МК надо как-то настраивать перед сном?

Или реле поставить на эти две линии - есть стационарное питание от БП, USART подключен, нет питания - линии отключаются физически. laughing.gif
Но, блин, не хочется такой механический разъединитель ставить...

Сообщение отредактировал James D. - Jan 6 2011, 14:11
Go to the top of the page
 
+Quote Post
aesok
сообщение Jan 7 2011, 08:56
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Если Вас устроит халтурное решение, то перечитайте пост 11, и ...

Цитата(James D. @ Jan 6 2011, 18:46) *
Может порты D0 и D1 у МК надо как-то настраивать перед сном?


... ответте на этот вопрос сами.

Анатолий.

Сообщение отредактировал aesok - Jan 7 2011, 08:57
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 18:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01439 секунд с 7
ELECTRONIX ©2004-2016