Все мои детальки: переход на отечественные микроконтроллеры

5e7edd1d6e5d7b6835e5103b834ec271.jpg

 Привет, читатель!

Идея использовать отечественные микроконтроллеры для разработки у меня была давно, но изобилие и доступность зарубежных решений давали возможность ленится в этом направлении. Сейчас происходит активно импортозамещение во многих областях, поэтому, считаю, стоит разобраться, что может предоставить отечественная элементная база в интересующих сферах.

Программирование микроконтроллеров сейчас для меня больше как хобби и научный интерес, которому уделяю свободное от работы время. Со школы привык работать с микросхемами 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

При автоопределении микроконтроллер в AVRFuses подтверждается — ATMega8535

Первое подключение осуществляется с применением внешнего генератора в 1МГЦ. Я для этого использую Hantek 2D72, но если есть отдельный прибор, то лучше взять именно его. 

Выдержка из инструкции по первому запуску

Исходное состояние конфигурационных битов:

  • HIGH — 0×00

  • LOW — 0×00

  • LOCK — 0xFF

По умолчанию микроконтроллер сконфигурирован на работу от внешнего тактового сигнала. Для программирования МК необходимо подать внешний тактовый сигнал частотой 1 МГц или выше (максимальное значение 16МГц) на вывод 8 (XTAL1). Запрограммировать конфигурационные биты в соответствии с необходимой конфигурацией.

Я использую старенький usbasp, который был куплен на али еще в школьное время и с тех пор отлично служит. На этом программаторе стоит прошивка 2011 года от Томаса Фишела.

Подключаем программатор, генератор и прописываем фьюзы:

  1. Внутренний генератор на 8МГц (на первое время для экспериментов хватит)

  2. Отключение сторожевого таймера

 следующей командой:

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

И наблюдаем «мигание светодиода». Для визуализации — поставил осциллограф. 

d5e69a17548347506c0f035b8aee1472.jpg

Заключение

Эксперимент по переходу на К1946ВМ014 считаю удачным. Мне действительно приятно, что есть отечественные контроллеры, даже если это копия зарубежных. Очевидно, что есть куда расти как и производству (где же крошечные аналоги attiny48 и других?), так и мне как разработчику (пора попробовать и отечественные аналоги 32-битных микросхем). Из минусов отметил следующие моменты:

  1. Сложность закупки контроллера. Мне повезло, что коллеги смогли купить через ООО несколько штук в рамках стартапа;

  2. Малое сообщество. Полностью вытекает из предыдущего пункта;

  3. Отсутствие информации в открытом доступе. Частично попытался восполнить этой статьей.

 В будущем планирую, помимо целевого применения в стартапе, сделать с этим чипом аналог отладочной платы arduino для удобства в разработке и отладке. Также планирую протестировать АЦП, 32-битные контроллеры от НИИЭТ и аналогичные решения других производителей. 

Для популяризации, распространения информации и погружения специалистов в работу с отечественными микросхемами, создал репозиторий в github. Он содержит как библиотеку с контроллером К1946ВМ014, так и пример схемы с ним, а также проект с исходным кодом (для VSCode). По мере работы с отечественными решениям из этого НИИ и других производителей буду обновлять репозиторий элементами, ПО и заметками. Если у вас есть предложения или замечания по репозиторию, то пишите в личные сообщения или создавайте merge request в репозитории.

© Habrahabr.ru