UR5FFR

Радиолюбительские конструкции и программы
It is currently 21 Aug 2018, 02:09

All times are UTC + 2 hours




Post new topic Reply to topic  [ 2 posts ] 
Author Message
PostPosted: 31 Mar 2018, 12:05 
Offline
Site Admin

Joined: 21 Apr 2012, 21:00
Posts: 387
Location: Odessa
Позывной: UR5FFR
Имеем Arduino ProMini 16MHz ATmega328P. Наша задача - запустить плату под напряжением 3.3в. Производитель гарантирует работу при таком напряжении с частотой не более 8MHz. Практика показывает что несмотря на это контроллер работает при 3.3в. По крайней мере при комнатной температуре. Чтобы не выходить за предельные параметры лучше все же понизить тактовую частоту.

Открываем в блокноте файл C:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt
Добавляем в него текст
Code:
## 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:
#include <avr/power.h>

В функции setup() первой строчкой устанавливаем требуемую частоту т.к. плата запускается на 16MHz
Code:
  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:
 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?


Top
 Profile  
 
PostPosted: 10 May 2018, 09:10 
Offline
Site Admin

Joined: 21 Apr 2012, 21:00
Posts: 387
Location: Odessa
Позывной: 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 начало файла. А ардуино их не понимает. Соответственно и ругается

Приатачил свой модифицированный файл boards.txt


Attachments:
boards.txt.zip [4.8 KiB]
Downloaded 47 times
Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 2 posts ] 

All times are UTC + 2 hours


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group