Уменьшить потребление Arduino Mini Pro

Sumatra
Offline
Зарегистрирован: 19.02.2015

Делаю приёмник ДУ для фотокамеры Nikon на основе платы Arduino Mini Pro 5V 16 Mhz на Atmega328P-au. В программе использую библиотеку IRemote. Программу отладил с фотокамерой, всё работает, но меня  не устраивает потребление платы, тк питание производится от батарейки. Для снижения тока использую внутренний генератор, тактовая частота 1Мгц. Прошил фьюзы таким образом: Low F. x62, High F. xDE, Ext F. x05. Получаю следующие результаты: при 5В ток платы 6мА +3мА светодиод-индикатор- это много. При 3,3 В ток платы 1мА+1,5 мА светодиод -отлично , но не подходит, тк мне нужно 5В для питания фотоприёмника TSOP. Я думаю мне помогло бы отключение АЦП, читал , что используют сигнал ADEN по даташиту, но как это делается в Arduino IDE не представляю. Питание нужно 5В. Прошу подсказать , как отключить АЦП программно, тк в ДУ с фотоприемником он не используется. Лучше бы ссылку с примером, тк это у меня первая работа. Светодиод на плате отключу после отладки. На плате AVCC и VCC соединены.

 

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Выключить АЦП: ADCSRA&=~(1<<ADEN); Компаратор можно заодно выключить  ACSR|=1<<ACD;

Alex_Sk
Offline
Зарегистрирован: 06.01.2015

ДУ подавляющую часть времени находится в режиме ожидания. Можно использовать библиотеку Narcoleptic которая "усыпляет" (потребление падает до микроампер) МК на заданное время, от 15 до 8000 миллисекунд.

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Только сначала надо бутлоадер поменять на optiboot, иначе проблемы с ватчдогом будут...

Alex_Sk
Offline
Зарегистрирован: 06.01.2015

У меня Narcoleptic работает без проблем на Nano со стандартным загрузчиком.

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Alex_Sk пишет:

У меня Narcoleptic работает без проблем на Nano со стандартным загрузчиком.

Ну, что тут можно сказать... :) Счастливчик!

Но ТС-то спрашивал про ProMini, у которой эта проблема имеется и даже способы лечения известны.

Sumatra
Offline
Зарегистрирован: 19.02.2015

dimax пишет:

Выключить АЦП: ADCSRA&=~(1<<ADEN); Компаратор можно заодно выключить  ACSR|=1<<ACD;

Ув. dimax! Спасибо за помощь! Я понимаю, что Вы написали команды записи в регистр, но ...вопрос?

-это команды на языке Ардуино? Как объявить  эти переменные? Эти команды будут в части void?

Признаюсь, что команды для работы с регистрами в описании языка я не нашёл. Новичок, что поделаешь.

Sumatra
Offline
Зарегистрирован: 19.02.2015

Alex_Sk пишет:

ДУ подавляющую часть времени находится в режиме ожидания. Можно использовать библиотеку Narcoleptic которая "усыпляет" (потребление падает до микроампер) МК на заданное время, от 15 до 8000 миллисекунд.

Я считаю, что засыпание здесь не подойдёт , ведь ДУ не должно спать!

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Sumatra, "языка ардуино" не существует. Ардуино - это аппаратно-программный комплекс, базирующийся на контроллерах AVR и  специализированной версии компилятора языка СИ  .   Команды нигде объявлять не нужно, достаточно выполнить один раз. Для этого вставьте их в функцию void setup () {  }

Sumatra
Offline
Зарегистрирован: 19.02.2015

Спасибо dimax!Буду пробовать.

Alex_Sk
Offline
Зарегистрирован: 06.01.2015

Sumatra пишет:

Alex_Sk пишет:

ДУ подавляющую часть времени находится в режиме ожидания. Можно использовать библиотеку Narcoleptic которая "усыпляет" (потребление падает до микроампер) МК на заданное время, от 15 до 8000 миллисекунд.

Я считаю, что засыпание здесь не подойдёт , ведь ДУ не должно спать!

 

Для ДУ достаточно раз 10 в секунду проверять есть ли управляющий сигнал, если нет - засыпать на 0,1с до следующей проверки. Кнопка на пульте ДУ меньше чем на 0,1с врядли окажется нажата, это скорее как помеха отфильтровываться должно. В результате в режиме ожидания энергопотребление можно сократить очень существенно, гораздо больше чем отключением АЦП.

Sumatra
Offline
Зарегистрирован: 19.02.2015

Извиняюсь за то, что долго не отвечал - не получалось добавить нестандартный загрузчик в  IDE для Mini Pro ( 1МГц внутр.генератор).

В результате выяснил, что :

Программа с библиотекой IRremote с внутр.генератором 1МГц и питанием 3,3В не хочет работать, работает только на 16Мгц и 5В, думаю из-за RC генератора.

Команды ADCSRA&=~(1<<ADEN); ACSR|=ACD , вставленные после void setup () { компилируются, программа работает, но потребление не снижается - 19,5 мА (включая диод питания в Mini Pro). Мне кажется , что команды не сработали, потребление уменьшить не удалось.

  Дополнительно вопрос Andrey_Y_Ostan - как строится загрузчик для использования Narcoleptic ? известным конструктором Bootloader'a можно?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Sumatra, не очень понятно что всё таки вы делаете, приёмник ДУ или пульт ДУ ? Для дисташки никона есть полно готовых проектов на тини13, вот напримери Вот  есть ещё варианты на PICах.  Там уже реализован режим сна.  А вот  приёмнику ДУ врятли получится поспать, ему же нужно всегда быть наготове.

std
Offline
Зарегистрирован: 05.01.2012

Ммм, вешаем TSOP на D2/D3 и делаем attachInterrupt(), не?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

std, TSOP хоть и производит первичную фильтрацию, но делает это совсем не идеально. Другими словами из него периодически сыпется мусор не имеющий отношения к сигналам с пультов. (основные источники световых помех -люминесцентные и светодиодные лампы) Ну и потом он сам кушает несколько миллиампер :)

Sumatra
Offline
Зарегистрирован: 19.02.2015

Я написал, что делаю приёмник ДУ для ф/камеры Никон. В моей камере нет приёмника, если бы он был, я бы купил ML-3 и не изобретал. Взялся за Ардуино из-за возможности самому сделать/отладить программу и наличия готовых плат. Большое потребление Mini Pro не связано с TSOP -такое же с любой программой (Blink)