Все мои детальки: переход на отечественные микроконтроллеры
Привет, читатель!
Идея использовать отечественные микроконтроллеры для разработки у меня была давно, но изобилие и доступность зарубежных решений давали возможность ленится в этом направлении. Сейчас происходит активно импортозамещение во многих областях, поэтому, считаю, стоит разобраться, что может предоставить отечественная элементная база в интересующих сферах.
Программирование микроконтроллеров сейчас для меня больше как хобби и научный интерес, которому уделяю свободное от работы время. Со школы привык работать с микросхемами Atmel, сначала в CodeVision AVR и позже Atmel Studio (сейчас microchip studio for AVR). На данный момент преимущественно использую vs code + avr-gcc. Когда научный руководитель в ВУЗе (привет вам, Михаил Сергеевич!) показал, что в Arduino IDE можно работать с регистрами, как и в atmel studio, и делать вставки на ассемблере, а не на wiring, то arduino ide (под капотом тот же avr-gcc) стала достаточно удобной для проверки гипотез. На сегодняшний день 8-ми битные контроллеры использую в небольших роботах, для опроса различных датчиков или вывода информации. Поэтому выбирал для первых экспериментов простой и понятный микроконтроллер, совместимый или подобный чипам AVR.
Поиск привел к таблице сопоставления отечественных решений и зарубежных МК () и к хорошей статье с описанием контроллеров НИИЭТ от @marus-ka
Исходя из этих статей выбор пал на 1887ВЕ4У от НИИЭТ. Позвонив в НИИЭТ, получил подробную консультацию как по закупке, так и по их решениям в области микроконтроллеров, а также техническую поддержку от специалистов. Оказалось, что свои задачи могу решить более дешевым и простым К1946ВМ014, а 1887ВЕ4У является промышленным решением с приемкой.
О микроконтроллере
Посоветовавшись с коллегами по стартапу, был произведен заказ партии. Спустя 5 дней микроконтроллеры были у меня на руках. Давно так не радовался новенькой коробочке с детальками. Чипы пришли в опечатанной картонной коробке, в которой был буклет по назначению ножек. Каждая микросхема в корпусе QFT44 находится в своем картонном ложементе.
Распаковка микросхем интегральных
При ближайшем рассмотрении порядка ножек, расположение очень сильно похоже на AVRовский чип. Аналогично крайне сильно похожа структурная схема. В институте пояснили, что да, данная микросхема является аналогом ATMega8535. Аналогично atmel`овскому чипу, на микросхеме представлены:
четыре 8-разрядных порта ввода-вывода;
интерфейсы SPI, USART, TWI (I2C);
один 16-разрядный таймер/счетчик и два 8-разрядных таймера/счетчика;
8-канальный 10-разрядный АЦП и один аналоговый компаратор;
4-канальный ШИМ.
Немного дополнительных технических характеристик
Следующая информация получена из инструкции, которую институт высылает на почту по запросу. НИИ планируют опубликовать руководства на соответсвующей странице.
Схема является КМОП 8-битным микроконтроллером, построенным на расширенной AVR RISC архитектуре. Используя команды, исполняемые за один машинный такт, контроллер достигает производительности в 1 MIPS на рабочей частоте 1 МГц, что позволяет разработчику эффективно оптимизировать потребление энергии за счёт выбора оптимальной производительности. AVR ядро сочетает расширенный набор команд с 32 рабочими регистрами общего назначения. Все 32 регистра соединены с АЛУ, что обеспечивает доступ к двум независимым регистрам на время исполнения команды за один машинный такт. Благодаря выбранной архитектуре достигнута высокая производительность, в 10 раз превосходящая скорость соответствующего CISC микроконтроллера.
Технические характеристики и функциональные возможности:
максимальная тактовая частота, МГц (U#VCC = 5,0 В) 16;
максимальная тактовая частота, МГц (U#VCC = 3,3 В) 8;
разрядность АЛУ, бит 8;
объём встроенного ОЗУ, бит 512 × 8;
память программ (Flash типа), бит 8K × 8;
ЭСППЗУ, бит 1К × 8;
количество источников прерываний 20;
количество параллельных 8-разрядных портов 4;
число каналов аналого-цифрового преобразователя 8;
число разрядов аналого-цифрового преобразователя 10;
16-разрядных таймеров 1;
8-разрядных таймеров 2;
последовательный порт USART 1;
последовательный периферийный интерфейс SPI 1;
аналоговый компаратор 1;
сторожевой таймер WDT 1;
число режимов пониженного потребления мощности 6.
Микросхемы К1946ВМ014 разработаны в металлокерамическом корпусе QFP44.
Номинальные значения напряжения питания микросхем: плюс 5,0 В, или плюс 3,3 В. Допустимое отклонение напряжения питания от номинального ±10%. Амплитуда пульсаций напряжения питания не более 50 мВ. Напряжение источника опорного напряжения от 2,0 В до U∩VCC. Допустимое отклонение напряжения питания от крайних значений минус 1% для напряжения 4,5 В и плюс 1% для напряжения 5,5 В.
Допустимое отклонение напряжения питания от крайних значений минус 1% для напряжения 3,0 В и плюс 1% для напряжения 3,6 В. Система команд включает в себя полный набор арифметических, логических команд, а также операций над битами, инструкций управления и перехода с различными способами адресации. Общее число команд — 130.
Для программирования микроконтроллера производителем рекомендуется применение программатора КФДЛ.301411.247. Из найденной в открытом доступе документации видно, что программатор похож на AVRISP, но с дополнительными буферами. Вместо рекомендуемого буду применять старый добрый usbasp. Если есть другой программатор, то, думаю, проблем также не будет. В дальнейшем планирую найти совместимый bootloader для этой микросхемы и попробовать обновлять ПО по USB.
На странице с микросхемой приложен архив с файлами описаний для 1946BM014, 1887BE7T и 1887BE4Y, из которых также можно почерпнуть полезную информацию. В качестве ПО для записи бинарного файла и конфигурационных битов предлагается использовать специализированное программное обеспечение «Программатор MK8». Разработку для микросхем предлагается вести в AVR Studio/Atmel Studio.Однако, Как писал ранее, мне привычнее использовать vscode + avrgcc, так что сформирую makefile для этого.
Отладочные платы
На созвоне с институтом также узнал, что готовых отладочных плат для этой микросхемы пока, к сожалению, нет. В целом, можно также взять любую отладочную плату для atmega (например, stk500/600) и переходник tqfp44-dip или вытравить свою печатную плату. Немного поискав переходники, нашел отличное решение для прототипирования и макетирования: китайская плата MD-2. Дополнительно на эту плату припаял некоторые компоненты для отладки, а именно преобразователь питания и конвертор usb-uart.
Для тех, кто планирует использовать эту микросхему в своих проектах, подготовил элемент библиотеки для KiCAD и выложил в открытый доступ. В этом же репозитории вы найдете пример схемы электрической принципиальной.
Типовая схема подключения
Программирование микроконтроллер
Итак, контроллер К1946ВМ014 — это аналог ATMega8535. Пробуем собрать простейшую мигалку светодиодом. Создаем проект в VSCode по примеру. Некоторые переменные в make примере я изменил и сделал шаблон, который использую в проектах. Чтобы не адаптировать шаблон самостоятельно, его так же можно найти в репозитории в конце статьи.
При автоопределении микроконтроллер в AVRFuses подтверждается — ATMega8535
Первое подключение осуществляется с применением внешнего генератора в 1МГЦ. Я для этого использую Hantek 2D72, но если есть отдельный прибор, то лучше взять именно его.
Выдержка из инструкции по первому запуску
Исходное состояние конфигурационных битов:
HIGH — 0×00
LOW — 0×00
LOCK — 0xFF
По умолчанию микроконтроллер сконфигурирован на работу от внешнего тактового сигнала. Для программирования МК необходимо подать внешний тактовый сигнал частотой 1 МГц или выше (максимальное значение 16МГц) на вывод 8 (XTAL1). Запрограммировать конфигурационные биты в соответствии с необходимой конфигурацией.
Я использую старенький usbasp, который был куплен на али еще в школьное время и с тех пор отлично служит. На этом программаторе стоит прошивка 2011 года от Томаса Фишела.
Подключаем программатор, генератор и прописываем фьюзы:
Внутренний генератор на 8МГц (на первое время для экспериментов хватит)
Отключение сторожевого таймера
следующей командой:
avrdude -P usb -c usbasp -p ATmega8535 -s -B 16kHz -U lfuse:w:0x04:m -U hfuse:w:0x40:m
Для расчета фьюзов можно использовать онлайн калькулятор или указывать в визуальной среде программирования микросхем, таких как AVRFuses, AvrDude GUI и др.
При сборке первого проекта для этого микроконтроллера указываю в make файле целевой чип atmega8535 и частоту 8МГц:
DEFINES = \
-D__AVR_ATmega8535__ \
-DF_CPU=8000000UL
Аналогично правим параметры для программатора:
# параметры для AVRDUDE
DUDE_MCU = m8535
DUDE_BCLOCK = 125kHz
Далее создаем целевой файл k1946Зvm014_example.c
и вставляем исходный код с переключением порта ввода-вывода — аналог hello world:
#include
#include
int main(void)
{
DDRD = 1 << PD7;
for (;;)
{
asm("NOP");
PORTD = 1 << PD7;
_delay_ms(5);
PORTD &= ~(1 << PD7);
_delay_ms(5);
}
return 0;}
Последний этап, одной командой собираем и загружаем исходный код в микроконтроллер:
make prog
И наблюдаем «мигание светодиода». Для визуализации — поставил осциллограф.
Заключение
Эксперимент по переходу на К1946ВМ014 считаю удачным. Мне действительно приятно, что есть отечественные контроллеры, даже если это копия зарубежных. Очевидно, что есть куда расти как и производству (где же крошечные аналоги attiny48 и других?), так и мне как разработчику (пора попробовать и отечественные аналоги 32-битных микросхем). Из минусов отметил следующие моменты:
Сложность закупки контроллера. Мне повезло, что коллеги смогли купить через ООО несколько штук в рамках стартапа;
Малое сообщество. Полностью вытекает из предыдущего пункта;
Отсутствие информации в открытом доступе. Частично попытался восполнить этой статьей.
В будущем планирую, помимо целевого применения в стартапе, сделать с этим чипом аналог отладочной платы arduino для удобства в разработке и отладке. Также планирую протестировать АЦП, 32-битные контроллеры от НИИЭТ и аналогичные решения других производителей.
Для популяризации, распространения информации и погружения специалистов в работу с отечественными микросхемами, создал репозиторий в github. Он содержит как библиотеку с контроллером К1946ВМ014, так и пример схемы с ним, а также проект с исходным кодом (для VSCode). По мере работы с отечественными решениям из этого НИИ и других производителей буду обновлять репозиторий элементами, ПО и заметками. Если у вас есть предложения или замечания по репозиторию, то пишите в личные сообщения или создавайте merge request в репозитории.