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

 
 
> 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
 
Start new topic
Ответов
James D.
сообщение Jan 5 2011, 10:57
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 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
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 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
Сообщение #4


Местный
***

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

Сообщений в этой теме
- 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
- - rx3apf   Цитата(James D. @ Jan 5 2011, 19:04) Это ...   Jan 5 2011, 14:01
- - James D.   Цитата(rx3apf @ Jan 5 2011, 20:01) Исправ...   Jan 5 2011, 16:17
- - rx3apf   Цитата(James D. @ Jan 5 2011, 22:17) Мне ...   Jan 5 2011, 16:54
- - 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
- - zombi   Цитата(rx3apf @ Jan 5 2011, 22:54) Никаки...   Jan 7 2011, 13:04
- - rx3apf   Цитата(zombi @ Jan 7 2011, 19:04) Я так п...   Jan 7 2011, 13:09
- - zombi   Цитата(rx3apf @ Jan 7 2011, 19:09) Болтаю...   Jan 8 2011, 07:20
- - rx3apf   Цитата(zombi @ Jan 8 2011, 13:20) Болтающ...   Jan 8 2011, 09:23
- - zombi   Цитата(rx3apf @ Jan 8 2011, 15:23) Желате...   Jan 8 2011, 09:34
- - demiurg_spb   Цитата(zombi @ Jan 8 2011, 15:34) А все п...   Jan 9 2011, 14:09


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

 


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


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