Технология программирования микроконтроллеров семейства Arduino с использованием ПО SimInTech

Аннотация

ПО SimInTech включает в себя модуль «Генерация кода СИ», с помощью которого можно конвертировать проект, созданный в SimInTech в графическом виде с помощью блоков, в СИ-код. Генератор СИ-кода SimInTech использует шаблон сборки, в результате работы которого создается проект в выбранном пользователем IDE, благодаря чему есть возможность получить исполняемый образ программы и перенести его на микроконтроллер (МК) Arduino. Шаблон сборки является алгоритмом, позволяющим упростить использование СИ-кода для выбранной целевой системы. В результате работы шаблона, полученный СИ-код может быть включен в проект в IDE для дальнейшей сборки и загрузки в память микроконтроллера. Кроме того, пользователь может сам создавать шаблоны сборки на базе существующих. Разработанные в ПО SimInTech библиотечные блоки обмена данными реализовывают обмен данными с периферией МК. Используя библиотечные блоки пользователь может создавать свои уникальные решения (блоки) по обмену данными с устройствами ввода-вывода.

Необходимое программное обеспечение

Для программирования микропроцессоров Arduino с использованием ПО SimInTech необходимо установить следующее программное обеспечение:
  • Arduino IDE – это среда разработки, созданная для программирования плат Arduino, она предоставляет пользователям все необходимые инструменты для написания, компиляции и загрузки программ на плату (ссылка для скачивания: https://www.arduino.cc/en/software).

Разработка модели мигания светодиодом для демонстрации работы с МК Arduino

Для демонстрации технологии программирования МК Arduino с использованием шаблона сборки «Arduino» рассматривается пример с миганием светодиода на плате Arduino.

Для создания нового проекта необходимо выполнить следующие действия:
  1. В главном окне SimInTech нажать кнопку «Файл» и выбрать пункт «Новый проект»
  2. В выпадающем меню выбрать пункт «Схема модели общего вида»
  3. Сохранить проект с названием «Светодиод Arduino.prt»
Требуется разместить в рабочей области окна проекта и соединить линиями связи следующие блоки (Рисунок 1):
  • 1 блок «Меандр» из вкладки «Источники». С помощью данного блока будет формироваться периодический прямоугольный импульсный сигнал, поступающий на пин МК
  • 1 блок «Установка состояния пина» из подменю «PIN» библиотеки «Arduino». С помощью данного блока будут устанавливаться состояние заданного пина МК


Рис. 1. Окно проекта с добавленными и соединенными линиями связи блоками.

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

Для блока «Установка состояния пина» необходимо задать свойства согласно рисунку (Рисунок 2).


Рис. 2. Окно «Свойства» блока «Установка состояния пина».

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

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

Далее следует в окне проекта на панели кнопок нажать на кнопку «Параметры расчета» и в окне «Параметры проекта» в группе «Генерация кода» для параметра «Имя (имена) алгоритма» задать значение «led» (Рисунок 3). По умолчанию алгоритм имеет название «my_diagram».


Рис. 3. Окно «Параметры проекта» с выделенным свойством «Имя (имена) алгоритма».

Технология программирования МК Arduino с помощью шаблона Arduino

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


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


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


Рис. 6. Окно настройки «Кодогенератор Си», вкладка «Настройки», с выделенными свойствами, которые необходимо изменить.
В результате в директории, определенной в настройках инструмента генерации СИ-кода («.\src»), кодогенератор создаст новые файлы, содержащие исходные коды Си, соответствующие проекту с названиями:
  • default.conf
  • default.list
  • <Имя алгоритма>.h
  • <Имя алгоритма>.inc
  • <Имя алгоритма>.ino
  • <Имя алгоритма>.inputs
  • <Имя алгоритма>.outputs
  • <Имя алгоритма_confurs>.inc
  • <Имя алгоритма_init>.inc
  • <Имя алгоритма_state>.inc
Из директории «.\src» необходимо открыть проект «led.ino» (Рисунок 7) в Arduino IDE.


Рис. 7. Окно проводника операционной системы, директория «.\src» с выделенным файлом «led.ino».
При открытии IDE появится окно с предупреждением (Рисунок 8), требуется нажать на кнопку «OK».


Рис. 8. Окно уведомления для создания папки «led» для файла «led.ino».

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

Необходимо подключить МК Arduino к персональному компьютеру с помощью USB.

В выпадающем меню «Select Board» выбрать тип подключенного МК Arduino (Рисунок 9).


Рис. 9. Окно Arduino IDE с открытым файлом «led.ino» и выделенным типом МК Arduino.
Далее необходимо нажать на кнопку «Verify» (Рисунок 10) и дождаться уведомления об окончании компиляции.


Рис. 10. Окно Arduino IDE с открытым файлом «led.ino» и выделенной кнопкой «Verify».
Для загрузки кода на МК следует нажать на кнопку «Upload» (Рисунок 11) и дождаться уведомления об окончании компиляции.


Рис. 11. Окно Arduino IDE с открытым файлом «led.ino» и выделенной кнопкой «Upload».

При успешной загрузке алгоритма на плату МК Arduino в окне Arduino IDE появится уведомление с надписью «Done uploading».

После загрузки диод на плате МК Arduino начнет мигать в соответствии с сигналом, формируемым меандром (на 1 секунду включаться и на 1 секунду отключаться).

Технология программирования МК Arduino с помощью шаблона Arduino на примере шагового двигателя

Для демонстрации технологии программирования МК Arduino для управления шаговым двигателем будет использоваться демонстрационный пример, расположенный в директории установки SimInTech в «\SimInTech\Demo\Microprocessors\Arduino\StepMotor» (Рисунок 12).


Рис. 12. Окно проекта с демо-примером «Step_motor.prt».

Данный пример иллюстрирует управление шаговым двигателем с использованием драйвера UNL2003 на МК Arduino. Проект позволяет запустить шаговый двигатель, который повернет вал на 5 градусов по часовой стрелке.

Для данного примера также следует изменить название генерируемого алгоритма. Для этого в окне «Параметры проекта» в группе «Генерация кода» для параметра «Имя (имена) алгоритма» задать значение «step_motor».

Подключение шагового двигателя к плате МК Arduino

МК Arduino UNO имеет 14 пинов для подключения внешних устройств (Рисунок 13).


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

На первый входной порт «direction» блока «Драйвер ШДВ ULN2003» из блока «Константа» подается значение «0», которое указывает на направление вращения вала; на второй входной порт «qty» из блока «Константа» подается значение «5», которое указывает угол поворота вала (так как выбранный тип управления двигателем - «Градусы»); на третий входной порт «start» блока двигателя с помощью блока «Ступенька» подается сигнал, указывающий на момент начала работы двигателя (2 секунда после запуска проекта).

Необходимо подключить модуль ULN2003 к плате согласно свойствам в блоке «Драйвер ШДВ ULN2003»:
  • пин «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».

Для успешного запуска проекта необходимо загрузить библиотеку «CustomStepper.h» в Arduino IDE. Для этого требуется выбрать пункт «Sketch» подпункт «Include library» и нажать на кнопку «Add .ZIP Library» (Рисунок 14).


Рис. 14. Окно Arduino IDE с открытым файлом «step_motor.ino» и выделенной кнопкой «Add .ZIP Library».

В открывшемся окне проводника перейти в директорию установки 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»

Для демонстрации работы эмулятора будет использоваться демонстрационный пример, расположенный в директории установки SimInTech в папке «\SimInTech\Demo\Microprocessors\Arduino\DigitalRead» (Рисунок 15).


Рис. 15. Окно проекта с демо-примером «DigitalRead.prt».

При запуске данного проекта на МК значения дискретного источника сигнала, подключенного к дискретному порту «04», будут считываться МК и передаваться на дискретный порт «13».

Для данного примера также следует изменить название генерируемого алгоритма. Для этого в окне «Параметры проекта» в группе «Генерация кода» для параметра «Имя (имена) алгоритма» задать значение «digital_read».

Далее необходимо сгенерировать проект «DigitalRead.prt» в код на языке Си. Для этого в главном окне SimInTech требуется выбрать пункт «Кодогенератор» подпункт «Кодогенератор Си». В открывшемся окне «Кодогенератор Си» во вкладке «Загрузка» нажать кнопку «Удалить файлы», чтобы удалить файл «Step_motor.prt» из списка файлов для кодогенерации. После этого во вкладке «Загрузка» необходимо нажать на кнопку «Добавить файлы», в открывшемся окне проводника перейти в директорию с текущим проектом и выбрать файл «DigitalRead.prt». Остальные настройки кодогенератора остаются неизменными и соответствуют рисунку (Рисунок 5).

Необходимо сохранить новую конфигурацию под именем «digital_read.alt» или желаемым именем и нажать на кнопку «Пересобрать модули и конфигурацию» для получения исходных кодов Си рассматриваемого проекта.

В текущей директории требуется перейти в папку «.\src» и открыть проект «digital_read.ino» в Arduino IDE, согласившись с созданием новой директории «digital_read».

В выпадающем меню «Select Board» выбрать тип МК Arduino — «Arduino UNO». Для этого следует выбрать пункт «Select other board and port...» (Рисунок 16).


Рис. 16. Окно Arduino IDE с открытым файлом «digital_read.ino» и выделенным пунктом «Select other board and port...».
В появившемся окне в строке поиска необходимо ввести «Arduino UNO», выбрать соответствующий пункт в списке (Рисунок 17) и нажать на кнопку «OK» для сохранения изменений.


Рис. 17. Окно «Select Other Board and Port» с выделенным пунктом «Arduino UNO».
Для импорта HEX-файла из Arduino IDE требуется выбрать пункт «Sketch» подпункт «Export Compiled Binary» (Рисунок 18).


Рис. 18. Окно Arduino IDE с выделенным подпунктом «Add .ZIP Library».
Следует дождаться уведомления об успешной компиляции - «Done compiling». По ее окончании в папке «digital_read» будет создана директория «build\arduino.avr.uno», содержащая следующие файлы:
  • 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»

Необходимо перейти в эмулятор Arduino «PICSimLab» (Рисунок 19).


Рис. 19. Рабочая область эмулятора «PICSimLab», состоящая из двух окон - МК и области для размещения подключаемых к МК элементов.
Если в эмуляторе выбран другой тип МК, то следует нажать на кнопку «Board» и выбрать тип МК - «Arduino UNO» (Рисунок 20). При необходимости работать с другим типом МК, требуется установить этот тип платы при компиляции кода в Arduino IDE в поле «Select Board», а после выбрать данный тип МК в «PICSimLab».


Рис. 20. Окно «PICSimLab» для выбора МК с выделенным пунктом «Arduino UNO».

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

Для добавления кнопки в окне «PICSimLab - Spare parts» необходимо нажать на кнопку «Inputs» и в выпадающем меню выбрать «Push Buttons» (Рисунок 21).


Рис. 21. Окно «PICSimLab - Spare parts» для выбора МК с выделенным пунктом «Push Buttons».

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

После добавлениях блока «Push Buttons» проект будет выглядеть согласно рисунку (Рисунок 22).


Рис. 22. Окно «PICSimLab - Spare parts» с добавленным блоком.

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

Чтобы изменить свойства блока «Push Buttons» и подключить его к МК, необходимо нажать по нему правой кнопкой мыши и в появившемся контекстном меню выбрать «Properties» (Рисунок 23).


Рис. 23. Окно «PICSimLab - Spare parts» для выбора МК с установленным блоком «Push Buttons» и выделенным пунктом «Properties».
Необходимо установить следующие свойства для блока «Push Buttons» (Рисунок 24).
  • «Size» - «1»
  • «2 - Out 1» - «P6 PD4/4» (что соответствует «04» порту на МК)


Рис. 24. Окно «Push Buttons [id=0]» с измененными свойствами.

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

Настройка осциллографа для отображения считанного микроконтроллером сигнала от дискретного источника

Необходимо открыть окно осциллографа. Для этого следует на панели кнопок окна «PICSimLab - ArduinoUno - atmega328p» нажать на кнопку «Modules» и в выпадающем меню выбрать пункт «Oscilloscope» (Рисунок 25).


Рис. 25. Окно «PICSimLab - ArduinoUno - atmega328p» с выделенным пунктом «Oscilloscope».
Окно «PICSimLab - Oscilloscope» выглядит согласно рисунку (Рисунок 26).


Рис. 26. Окно «PICSimLab - Oscilloscope».
В поле «Ch 1» в левом нижнем углу окна осциллографа необходимо изменить номер пина на «19 PB5/13» (Рисунок 27).


Рис. 27. Окно «PICSimLab - Oscilloscope» с выделенным измененным значением в поле «Ch 1».

Для выполнения дальнейшей работы следует не закрывать окно «ICSimLab - Oscilloscope» и переместить его в свободное пространство на экране компьютера.

Запуск алгоритма на эмуляторе микроконтроллера Arduino

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

Для этого в окне «PICSimLab - ArduinoUno - atmega328p» необходимо нажать на кнопку «file» и выбрать пункт «Load Hex» (Рисунок 28).


Рис. 28. Окно «PICSimLab - ArduinoUno - atmega328p» с выделенным пунктом «Load Hex».

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

После этого проект заработает автоматически. При нажатии на кнопку, расположенную на блоке «Push Buttons», осциллограф будет показывать скачок напряжение в 5 В (Рисунок 29).


Рис. 29. Окно «PICSimLab - Oscilloscope» при удержании кнопки на блоке «Push Buttons».
Таким образом, результат при отсутствии нажатия и при удержании кнопки на блоке «Push Buttons» соответствует рисункам (Рисунок 30 и Рисунок 31):
  • Осциллограф показывает значение 0 В, кнопка на блоке «Push Buttons» черного цвета, диод «L» на плате Arduino не горит (Рисунок 30)
  • Осциллограф показывает значение 5 В, кнопка на блоке «Push Buttons» серого цвета, диод «L» на плате Arduino горит (Рисунок 31)
Прим.:
Примечание: диод «L» на плате Arduino UNO подключен к 13 пину, поэтому реагирует на подаваемый сигнал.


Рис. 30. Окна «PICSimLab» при отсутствии нажатия на кнопку на блоке «Push Buttons».


Рис. 31. Окна «PICSimLab» при удержании кнопки на блоке «Push Buttons».