ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
22 июля
1276911 Топик полностью
Nikolay_Po (18.01.2023 14:55, просмотров: 170) ответил Nikolay_Po на Не используйте Arduino IDE! Всё замечательно, пока не нужно ничего особенного. Всё работает, сразу, очень удобно, библиотеки готовы. Но только шаг в сторону - микропотребление, например, - всё! Жопа!
Может, кому пригодится. Оказалось, что относительно неплохо можно работать с AVR из Arduino, используя все функции и библиотеки Arduino, но без бутлоадера, который мешает энергосбережению и со своей конфигурацией блокировок для защиты кода. При этом, конфигурацию загрузки (фьюзы) можно поместить прямо в код главного файла проекта Arduino. И компилятор avr-gcc поймёт его так же, как при создании проекта и настройке конфигурации чипа в MPLAB X IDE. 

Для настройки конфигурации чипов в MPLAB X IDE, создаю пустой проект, выбрав чип atMega328P и настраиваю через GUI "Target Memory Views/Configuration bits" нужную конфигурацию загрузки, с нужным источником синхронизации, без запуска загрузчика и с нужными блокировками памяти. Потом, нажатием кнопки в окошке конфигурации, получаю исходный код для фьюзов, например:


#include <avr/io.h>

FUSES = {

.low = 0x42, // LOW {SUT_CKSEL=INTRCOSC_8MHZ_6CK_14CK_0MS, CKOUT=CLEAR, CKDIV8=SET}

.high = 0xDF, // HIGH {BOOTRST=CLEAR, BOOTSZ=256W_3F00, EESAVE=CLEAR, WDTON=CLEAR, SPIEN=SET, DWEN=CLEAR, RSTDISBL=CLEAR}

.extended = 0xFE, // EXTENDED {BODLEVEL=1V8}

};

LOCKBITS = 0xFC; // {LB=PROG_VER_DISABLED, BLB0=NO_LOCK, BLB1=NO_LOCK}


И вставляю этот код прямо в исходный код файла проекта .ino Arduino. AVR-GCC успешно использует эту конфигурацию, включая её в свой HEX-файл на выходе.

Затем, для прошивки кода, в выводе Arduino IDE смотрю, в какую временную папку помещён HEX и импортирую этот HEX в программатор MPLAB IPE. Программирую программатором MPLAB Snap, используя ПО MPLAB IPE.

Кроме этого, чтобы Arduino правильно учитывала тактовую частоту вашего проекта, нужно добавить свои варианты "Processor" в конфигуарционный файл среды Boards.txt (пришлось удалить папки кэшей Arduino, чтобы новый вариант появился в интерфейсе среды разработки). Тогда временные задержки, счётчик micros() и задание скорости UART работают как положено, по крайней мере, для изменений частоты кратных двум.