Запускаем Arduino при пониженном питании

Post Reply
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Запускаем Arduino при пониженном питании

Post by UR5FFR »

Имеем Arduino ProMini 16MHz ATmega328P. Наша задача - запустить плату под напряжением 3.3в. Производитель гарантирует работу при таком напряжении с частотой не более 8MHz. Практика показывает что несмотря на это контроллер работает при 3.3в. По крайней мере при комнатной температуре. Чтобы не выходить за предельные параметры лучше все же понизить тактовую частоту.

Открываем в блокноте файл C:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt
Добавляем в него текст

Code: Select all

## Arduino Pro or Pro Mini (3.3V, 16/8 MHz) w/ ATmega328P
## --------------------------------------------------
pro.menu.cpu.168MHzatmega328=ATmega328P (3.3V, 16/8 MHz)

pro.menu.cpu.168MHzatmega328.upload.maximum_size=30720
pro.menu.cpu.168MHzatmega328.upload.maximum_data_size=2048
pro.menu.cpu.168MHzatmega328.upload.speed=57600

pro.menu.cpu.168MHzatmega328.bootloader.low_fuses=0xFF
pro.menu.cpu.168MHzatmega328.bootloader.high_fuses=0xDA
pro.menu.cpu.168MHzatmega328.bootloader.extended_fuses=0xFD
pro.menu.cpu.168MHzatmega328.bootloader.file=atmega/ATmegaBOOT_168_atmega328.hex

pro.menu.cpu.168MHzatmega328.build.mcu=atmega328p
pro.menu.cpu.168MHzatmega328.build.f_cpu=8000000L
Для другой частоты надо изменить значение f_cpu ну и как-то отобразить частоту в названии чтобы не путаться при выборе платы.
Обращаю внимание на имя пункта меню - pro.menu.cpu.168MHzatmega328. Оно должно быть уникальным для каждого варианта платы/частоты. Если надо добавить несколько вариантов для разных частот то это имя у них должно различаться.

Запускаем Arduino IDE. Выбираем плату "Arduino Pro or Pro Mini". Добавленные процессоры должны появиться в выпадающем меню "Инструменты"->"Процессор"

В скетче в самом начале добавляем

Code: Select all

#include <avr/power.h>
В функции setup() первой строчкой устанавливаем требуемую частоту т.к. плата запускается на 16MHz

Code: Select all

  8MHz      clock_prescale_set(clock_div_2);
  4MHz      clock_prescale_set(clock_div_4);
  2MHz      clock_prescale_set(clock_div_8);
  1MHz      clock_prescale_set(clock_div_16);
500kHz      clock_prescale_set(clock_div_32);
250kHz      clock_prescale_set(clock_div_64);
125kHz      clock_prescale_set(clock_div_128);
После этих манипуляций процессор работает с пониженной частотой, USB работает корректно, тайминги (delay,millis,micros и т.п.) работают так же корректно. В коде всегда можно узнать текущую частоту процессора с помощью макроса F_CPU и прескалер для тактовой частоты clock_prescale_get()

Даташитное потребление ATmega329P при разном питании тактовой частоте

Image

На плате кроме смого процессора есть еще светодиоды, которые тоже "кушают". При необходимости их можно демонтировать феном. Со светодиодами потребление платы при 3,3в и разной тактовой частоте

Code: Select all

 16MHz      10mA
  8MHz      7.7mA
  4MHz      6.4mA
  2MHz      5.5mA
  1MHz      5mA
500kHz      4.75mA
Так что если цель - микропотребление то светодиоды надо демонтировать и кроме это во время простоя вводить процессор в power down mode.

Reference
1. Is there a simple way to reduce clock speed on an UNO?
2. Arduino’s ATMega328 Power Consumption
3. What is the best way to estimate the power consumption of an Atmega328p microcontroller?
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Запускаем Arduino при пониженном питании

Post by UR5FFR »

Выяснился один нюанс с правкой boards.txt. Он имеет кодировку UTF-8. Но переводы строки линуксовые - код x0A. А в windows принято что перевод строки - два символа x0Dx0A. Я редактировал во встроенном редакторе Far Manager - он эти нюансы учитывает и сохраняет переводы строки так как они были в исходном файле. А стандартный блокнот windows похоже этого делать не умеет, поэтому при попытке редактировать в нем будет получен нерабочий файл. Поэтому надо использовать редактор который умеет работать с линоксоообразными текстовыми файлами (например Far, Notepad++).

И еще один момент выяснился. board.txt несмотря на то, что он в кодировке UTF-8 не содержит т.н. BOM - заголовка указывающего на кодировку. Для UTF-8 это последовательность EF BB BF. Стандартный блокнот при сохранении UTF-8 файлов ВСЕГДА добавляет BOM начало файла. А ардуино их не понимает. Соответственно и ругается
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Запускаем Arduino при пониженном питании

Post by UR5FFR »

В версии Arduino 1.8.9 изменился список плат. В атаче модифицированный файл boards.txt для этой версии
Attachments
boards.txt.zip
(4.86 KiB) Downloaded 1037 times
Post Reply