Технология программирования микроконтроллеров семейства Arduino с использованием ПО SimInTech
Аннотация
ПО SimInTech включает в себя модуль «Генерация кода СИ», с помощью которого можно конвертировать проект, созданный в SimInTech в графическом виде с помощью блоков, в СИ-код. Генератор СИ-кода SimInTech использует шаблон сборки, в результате работы которого создается проект в выбранном пользователем IDE, благодаря чему есть возможность получить исполняемый образ программы и перенести его на микроконтроллер (МК) Arduino. Шаблон сборки является алгоритмом, позволяющим упростить использование СИ-кода для выбранной целевой системы. В результате работы шаблона, полученный СИ-код может быть включен в проект в IDE для дальнейшей сборки и загрузки в память микроконтроллера. Кроме того, пользователь может сам создавать шаблоны сборки на базе существующих. Разработанные в ПО SimInTech библиотечные блоки обмена данными реализовывают обмен данными с периферией МК. Используя библиотечные блоки пользователь может создавать свои уникальные решения (блоки) по обмену данными с устройствами ввода-вывода.
Необходимое программное обеспечение
- Arduino IDE – это среда разработки, созданная для программирования плат Arduino, она предоставляет пользователям все необходимые инструменты для написания, компиляции и загрузки программ на плату (ссылка для скачивания: https://www.arduino.cc/en/software).
Разработка модели мигания светодиодом для демонстрации работы с МК Arduino
Для демонстрации технологии программирования МК Arduino с использованием шаблона сборки «Arduino» рассматривается пример с миганием светодиода на плате Arduino.
- В главном окне SimInTech нажать кнопку «Файл» и выбрать пункт «Новый проект»
- В выпадающем меню выбрать пункт «Схема модели общего вида»
- Сохранить проект с названием «Светодиод Arduino.prt»
- 1 блок «Меандр» из вкладки «Источники». С помощью данного блока будет формироваться периодический прямоугольный импульсный сигнал, поступающий на пин МК
- 1 блок «Установка состояния пина» из подменю «PIN» библиотеки «Arduino». С помощью данного блока будут устанавливаться состояние заданного пина МК

Задание свойств блоков и параметров расчета проекта

В свойстве «Пин» задается номер «13», так как именно к этому пину подключен светодиод на плате МК Arduino. Если светодиод на используемой пользователем плате подключен к другому пину, следует указать его номер.
Для блока «Меандр» свойства остаются заданными по умолчанию. Таким образом, данный блок сформирует периодический прямоугольный импульсный сигнал с амплитудой 1 и полупериодом, равным 1 секунде.

Технология программирования МК Arduino с помощью шаблона Arduino
- В главном окне SimInTech требуется выбрать пункт «Кодогенератор» подпункт
«Кодогенератор Си». В открывшемся окне «Кодогенератор Си» во вкладке
«Загрузка» нажать кнопку «Добавить файлы», в открывшемся окне
проводника перейти в директорию с текущим проектом и выбрать файл «Светодиод
Arduino.prt». В результате окно будет выглядеть согласно рисунку (Рисунок
4).

Рис. 4. Окно настройки «Кодогенератор Си», вкладка «Загрузка», с добавленным проектом. - В окне «Кодогенератор Си» во вкладке «Настройки» в пункте
«Директория исходников» указать «.\src» для сохранения исходных файлов
программы, получаемых в результате работы кодогенератора, в указанную директорию, в
строке «Директория шаблона кода» выбрать из выпадающего списка
«%codetemplates%Arduino\» (Рисунок 5).
Также возможно создание пользовательских шаблонов кода на базе существующих и
использование их для кодогенерации.

Рис. 5. Окно настройки «Кодогенератор Си», вкладка «Настройки», с выделенными свойствами, которые необходимо изменить. - Сохранить файл настройки параметров, на вкладке «Загрузка» нажав на кнопку «Сохранить конфигурацию», в открывшемся окне проводника операционной системы сохранить файл под именем «led.alt» или задать желаемое имя файла.

- default.conf
- default.list
- <Имя алгоритма>.h
- <Имя алгоритма>.inc
- <Имя алгоритма>.ino
- <Имя алгоритма>.inputs
- <Имя алгоритма>.outputs
- <Имя алгоритма_confurs>.inc
- <Имя алгоритма_init>.inc
- <Имя алгоритма_state>.inc


После этого в директории «.\src» создастся папка «led», в которую автоматически будет перенесен файл «led.ino», это необходимо для корректной работы IDE с текущим проектом.
Необходимо подключить МК Arduino к персональному компьютеру с помощью USB.



При успешной загрузке алгоритма на плату МК Arduino в окне Arduino IDE появится уведомление с надписью «Done uploading».
После загрузки диод на плате МК Arduino начнет мигать в соответствии с сигналом, формируемым меандром (на 1 секунду включаться и на 1 секунду отключаться).
Технология программирования МК Arduino с помощью шаблона Arduino на примере шагового двигателя

Данный пример иллюстрирует управление шаговым двигателем с использованием драйвера UNL2003 на МК Arduino. Проект позволяет запустить шаговый двигатель, который повернет вал на 5 градусов по часовой стрелке.
Для данного примера также следует изменить название генерируемого алгоритма. Для этого в окне «Параметры проекта» в группе «Генерация кода» для параметра «Имя (имена) алгоритма» задать значение «step_motor».
Подключение шагового двигателя к плате МК Arduino

- Цифровые выводы (0-13):
- Пины от 0 до 13 могут использоваться как цифровые входы или выходы
- Пины 0 и 1 также используются для последовательной передачи данных (TX и RX)
- Пины 3, 5, 6, 9, 10 и 11 поддерживают ШИМ (широтно-импульсную модуляцию)
- Аналоговые входы (A0-A5):
- Пины A0 до A5 могут использоваться для считывания аналоговых сигналов (от 0 до 5 В)
- Эти пины могут также использоваться как цифровые входы/выходы
- Питание:
- Vin: Входное напряжение для питания платы
- 5V: Выходное напряжение 5 В, используемое для питания внешних компонентов
- 3.3V: Выходное напряжение 3.3 В для внешних компонентов
- GND: Общий (земля) для подключения к другим компонентам. страница 15 из 30
- Другие пины:
- RESET: Пин для перезагрузки платы
- AREF: Пин для задания опорного напряжения для аналоговых входов
- «Номер порта IN1» - «8»
- «Номер порта IN2» - «9»
- «Номер порта IN3» - «10»
- «Номер порта IN4» - «11»
- «Тип управления» - «Градусы»
На первый входной порт «direction» блока «Драйвер ШДВ ULN2003» из блока «Константа» подается значение «0», которое указывает на направление вращения вала; на второй входной порт «qty» из блока «Константа» подается значение «5», которое указывает угол поворота вала (так как выбранный тип управления двигателем - «Градусы»); на третий входной порт «start» блока двигателя с помощью блока «Ступенька» подается сигнал, указывающий на момент начала работы двигателя (2 секунда после запуска проекта).
- пин «IN1» к дискретному пину «8»
- пин «IN2» к дискретному пину «9»
- пин «IN3» к дискретному пину «10»
- пин «IN4» к дискретному пину «11»
Также следует подключить пин «GND» модуля к пину «GND» МК; пин «VCC» модуля к пину «5V» МК; разъем двигателя подключить к модулю ULN2003.
После подключения двигателя и модуля ULN2003 требуется подключить МК Arduino к персональному компьютеру.
Технология программирования МК Arduino с помощью шаблона Arduino
Для запуска демо-примера необходимо сгенерировать представленный алгоритм работы (проект «Step_motor.prt») в код на языке Си и загрузить его на МК Arduino.
Для этого в главном окне SimInTech требуется выбрать пункт «Кодогенератор» подпункт «Кодогенератор Си». В открывшемся окне «Кодогенератор Си» во вкладке «Загрузка» нажать кнопку «Удалить файлы», чтобы удалить файл «Светодиод Arduino.prt» из списка файлов для кодогенерации. После этого во вкладке «Загрузка» необходимо нажать на кнопку «Добавить файлы», в открывшемся окне проводника перейти в директорию с текущим проектом и выбрать файл «Step_motor.prt». Остальные настройки кодогенератора остаются неизменными и соответствуют рисунку (Рисунок 5).
Необходимо сохранить новую конфигурацию под именем «step_motor.alt» или желаемым именем и нажать на кнопку «Пересобрать модули и конфигурацию» для получения исходных кодов Си рассматриваемого проекта.
В текущей директории требуется перейти в папку «.\src» и открыть проект «step_motor.ino» в Arduino IDE, согласившись с созданием новой директории «step_motor».

В открывшемся окне проводника перейти в директорию установки SimInTech в папку "\SimInTech\bin\CodeTemplates\Arduino\ext_libraries" и выбрать файл «CustomStepper.zip». После этого библиотека «CustomStepper.h» будет загружена в Arduino IDE. Если МК Arduino не подключен к компьютеру, его следует подключить и выбрать плату согласно типу МК (Рисунок 9).
Далее необходимо нажать на кнопку «Verify» и дождаться окончания компиляции, после чего нажать на кнопку «Upload» и получить уведомление об успешной загрузки алгоритма на МК.
После запуска проекта на МК шаговый двигатель повернет вал по часовой стрелке на 5 градусов.
Использование эмулятора Arduino для совместной работы с SimInTech на примере чтения дискретного сигнала
В качестве онлайн-эмулятора Arduino будет использоваться «PICSimLab». «PICSimLab» — это эмулятор плат для разработки в реальном времени, интегрированный с отладчиками MPLAB X и AVR-GDB. Он обеспечивает поддержку некоторых микроконтроллеров семейств PICSim и Simawr, а также интеграцию с MPLAB X и Arduino IDE.
«PICSimLab» позволяет проектировать собственные схемы, загружать HEX-файлы напрямую или импортировать их из Arduino IDE. Кроме того, он обеспечивает моделирование интерфейсов ввода-вывода Arduino и их взаимодействие с внешними программами.
Получить доступ к «PICSimLab» возможно по ссылке https://lcgamboa.github.io/.
Подготовка HEX-файла для работы с «PICSimLab»

При запуске данного проекта на МК значения дискретного источника сигнала, подключенного к дискретному порту «04», будут считываться МК и передаваться на дискретный порт «13».
Для данного примера также следует изменить название генерируемого алгоритма. Для этого в окне «Параметры проекта» в группе «Генерация кода» для параметра «Имя (имена) алгоритма» задать значение «digital_read».
Далее необходимо сгенерировать проект «DigitalRead.prt» в код на языке Си. Для этого в главном окне SimInTech требуется выбрать пункт «Кодогенератор» подпункт «Кодогенератор Си». В открывшемся окне «Кодогенератор Си» во вкладке «Загрузка» нажать кнопку «Удалить файлы», чтобы удалить файл «Step_motor.prt» из списка файлов для кодогенерации. После этого во вкладке «Загрузка» необходимо нажать на кнопку «Добавить файлы», в открывшемся окне проводника перейти в директорию с текущим проектом и выбрать файл «DigitalRead.prt». Остальные настройки кодогенератора остаются неизменными и соответствуют рисунку (Рисунок 5).
Необходимо сохранить новую конфигурацию под именем «digital_read.alt» или желаемым именем и нажать на кнопку «Пересобрать модули и конфигурацию» для получения исходных кодов Си рассматриваемого проекта.
В текущей директории требуется перейти в папку «.\src» и открыть проект «digital_read.ino» в Arduino IDE, согласившись с созданием новой директории «digital_read».



- digital_read.ino.eep
- digital_read.ino.elf
- digital_read.ino.hex
- digital_read.ino.with_bootloader.bin
- digital_read.ino.with_bootloader.hex
Подключение компонент к плате Arduino в эмуляторе «PICSimLab»


В качестве источника дискретного сигнала будет использоваться кнопка.

После этого за курсором начнет следовать блок из 8 кнопок, следует установить его в свободной области окна нажатием левой кнопки мыши.

Задание свойств блока

- «Size» - «1»
- «2 - Out 1» - «P6 PD4/4» (что соответствует «04» порту на МК)

Необходимо сохранить изменения нажатием на кнопку «OK». После сохранения изменений блок из 8 кнопок станет блоком с одной кнопкой.
Настройка осциллографа для отображения считанного микроконтроллером сигнала от дискретного источника



Для выполнения дальнейшей работы следует не закрывать окно «ICSimLab - Oscilloscope» и переместить его в свободное пространство на экране компьютера.
Запуск алгоритма на эмуляторе микроконтроллера Arduino
Перед запуском собранной модели требуется в окне «PICSimLab - ArduinoUno - atmega328p» загрузить в проект HEX-файл, сформированный Arduino IDE

В открывшемся окне проводника перейти в директорию «\SimInTech\Demo\Microprocessors\Arduino\DigitalRead\src\digital_read\build\arduino.avr.uno» и выбрать файл «digital_read.ino.hex».

- Осциллограф показывает значение 0 В, кнопка на блоке «Push Buttons» черного цвета, диод «L» на плате Arduino не горит (Рисунок 30)
- Осциллограф показывает значение 5 В, кнопка на блоке «Push Buttons» серого цвета, диод «L» на плате Arduino горит (Рисунок 31)

