Найти тему
Старый радио любитель

Симулятор SimulIDE и Arduino. Часть 1.

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

Когда, лет 10 тому назад, сын подарил мне плату Aduino Uno и рассказал о ее возможностях, я покивал с умным видом, поблагодарил и ... отложил плату в дальний ящик. А все потому, что программирование на СИ казалось мне чем-то недоступным.

Расскажу о моем взаимодействии с компьютерами :). Впервые столкнулся с ними в 1976 году, когда учился в аспирантуре ВНИИСтроМ, где и работал. Занимался я динамикой двухфазных потоков в печах кипящего слоя. Построил установку, наснимал результаты и сел их обсчитывать. Подходит ко мне мой руководитель и начальник и говорит: "А может все это общитать на ЭВМ - это будет в плюс работе.". И я пошел к компьютерщикам. ЭВМ занимала зал квадратов на 100, пообщался с ребятами и понял, что с моими знаниями высшей математики (тройка со второго захода) мне туда лучше не ходить :).

Вторая встреча произошла в 1986 году, когда мы с сыном купили на Ленинском проспекте БК-0010. Подключил я его к телевизору и начали мы рубиться в тетрис и бомбер. И в это время я купил брошюрку "БЕЙСИК - это просто". По дороге домой я успел ее просмотреть и решил попробовать, тем более, что БЕЙСИК был зашит в ПЗУ. Волшебные операторы CLS, CIRCLE () - и на экране окружность. Просто чудо! И было в БЕЙСИКе все так логично, так просто, что я просто заболел им. А 1990 у нас в школе установили класс Yamahа. 9 - с монохромными дисплеями и один, командирский, с цветным. И в ПЗУ - тоже БЕЙСИК ! И начал я писать тесты по химии и биологии. Даже пару виртуальных лабороторок изобразил.

Через три года появится класс IBM 286, все машины были с цветными дисплеями, сервер (!) имел жесткий диск емкостью аж 10 МБ :). И ведь все работало - и Ворд и Волков-командер и игрушки с 5-ти дюймовых дискет. И БЕЙСИК стал уже Q. На нем я и остановился, хотя позже и делал несколько программ с ребятами на Visual, но не больше. А тут СИ !. Но во время ковида я взялся таки за Ардуино.

Кроме подарка сына прикупил еще, в запас :)). Вот моя коллекция:

Рис. 1.
Рис. 1.

В Uno есть все, туда можно подключить USB для связи с компьютером, есть загрузчик прошивок и внешнее питание 12В. Могу похвастать тем, что Uno, подаренное мне сыном настоящее, а не китайская реплика.

Рис. 2.
Рис. 2.

Увидели "Made in Italy" и изображение Апеннинского полуострова (который почему-то слился с Сицилией)? Ведь Arduino разработали и начали изготавливать в Италии в городке Ивреа. И назвали проект в честь итальянского короля.

Рис. 3.
Рис. 3.

Всем Uno хорош, но мне больше нравится Nano. Функционал практически такой же, а размеры гораздо меньше. Для экспериментов здорово к Nano прикупить адаптер с винтовыми разъемами - очень удобный.

Еще меньше по размерам Mini, но у неё нет USB, поэтому нужно поиметь переходник USB to TTL.

Для написания, отладки и компиляции программ существует отличная среда под названием Arduino IDE. Она бесплатная и ее можно скачать здесь. Я пользуюсь версией для Win7, но там есть и для Win10, есть и для Linux. Есть в сети версии и на русском языке, и я такой пользуюсь.

Рис. 4.
Рис. 4.

С меню, думаю вопросов не будет. Если вы нажмете кнопку "новый", то у вас появится заготовка для программы с двумя блоками:

void setup() {......} - в этом блоке, который выполняется только один раз при запуске программы перечисляются переменные.

void loop() {.....} - а это бесконечный цикл, выполнение которого и дает нужный результат.

"Тела" блоков заключены в фигурные скобки - это уже от СИ, и если вы не поставите одну из скобок, то это будет ошибкой.

Внизу - черное окно - там появляются результаты проверки текста программы, ошибки или результаты компиляции.

Одна из самых полезных фишек (лично для меня) находится в пункте "Файл". Это "Примеры" - там находятся проверенные примеры программ, которые вы можете менять "под себя", скомпилировать и загрузить в процессор.

Рис. 5.
Рис. 5.

Другая фишка - большое количество библиотек - проще говоря, подпрограмм, которые написали добрые умные люди, а мы их можем использовать. При этом в своей программе нужно просто сделать ссылку на нужную библиотеку, и она автоматически встроится в программу. Библиотеки предназначены для взаимодействия процессора с внешними устройствами, например, с LCD-дисплеем, шаговым двигателем или с синтезатором si5351.

Рис. 6.
Рис. 6.

А теперь у меня вместе с Arduino IDE есть и SimulIDE, а значит можно попробовать работать с Ардуино, пока дядюшка Ху пришлет свою плату :) Две эти программы взаимно дополняющие друг друга: в Ардуино пишем программу, отлаживаем ее, компилируем в .hex файл и можем загрузить этот файл в виртуальный процессор.

В дальнейшем я буду описывать свои эксперименты с Ардуино Нано. У этих плат есть две разновидности: v.2 и v.3. Они отличаются применяемыми процессорами. Первая версия (v.2) менее мощная, у нее на борту процессор mega 168: Flash-память – 16 кб, ПППЗУ – 512кб и ОЗУ – 1 кб. Такие платы уже выходят из употребления и дядюшка Ху продает в среднем за 200 руб. v.3 у которой на борту процессор mega 328: Flash-память – 32 кб, ПППЗУ – 1024 кб и ОЗУ – 2 кб. Внешний вид плат практически один в один и тактовая частота у обеих 16 МГц. Думаю, V.2 вполне хватит для простых приложений с программой небольшого объема.

В Arduino IDE перед началом работы нужно установить тип используемой платы.

Рис. 7.
Рис. 7.

Как видите, в Nano нет отличий по версиям, т.е. программы будут работать на обоих.

В симуляторе тоже нужно выбрать тип платы при рисовании схемы.

Рис. 8.
Рис. 8.

Теперь немного о распиновке Nano:

Рис.9
Рис.9

Аналоговые (8 шт) и цифровые (14 шт) выводы могут быть как входами, так и выходами - это устанавливается программно. 6 цифровых выводов (D3,5,6,9,10,11) могут быть источниками ШИМ-сигнала. Вывод D13 связан с одним из светодиодов. Особенным является и вывод D5, а выводы D2 и D3 являются входами прерываний, но об этом позже.

Если вы установили обе программы, то переходим в симулятор и вытаскиваем в поле схем плату Нано.

Рис. 10.
Рис. 10.

Как только вы это сделаете, внизу появляются данные платы: процессор mega328, тактовая частота 16 МГц. Изображение, конечно, стилизованное, есть только один светодиод (черный квадратик около вывода 13). Вот этот светодиод мы и попробуем включать и выключать.

Для этого загрузим из папки Arduino на диске С, куда установилась Arduino IDE, пример с названием blink, для чего нажимаем кнопку "загрузить" над полем программы.

Рис. 11.
Рис. 11.

В окне программы появляется текст, а в темном окне под ним написано, что успешно загружен компилятор. Если вы нажмете кнопку "Настройки (шестеренка)" и выберите "Настройки компилятора", то увидите адрес папки Ардуино на вашем компьютере.

Давим на кнопку с галочкой "Компилировать" , чтобы перевести текст программы в машинные коды, понятные процессору. Если в се пошло удачно...

Рис. 12
Рис. 12

Появляется информация о пространстве памяти, занятом программой. Теперь давим на кнопку с микросхемой "Загрузить", и скомпилированная программа загружается в наш виртуальный процессор. При этом под полем схемы появляется информация .....

Рис. 13.
Рис. 13.

о том, что программа загружена удачно. Нажимаем кнопку "Запустить симуляцию" и светодиод начинает мигать с частотой 1 Гц.

А теперь поиграем с этой простейшей программой. Убираем комментарии, оставляя только суть. И внесем первые изменения. Я ранее сказал, что светодиод на плате соединен с цифровым выводом 13. Поэтому в тексте программы можно LED_BUILTIN заменить цифрой 13.

Рис. 14.
Рис. 14.

Компилируем и загружаем. Включаем симуляцию - все работает. как и раньше. А теперь добавим еще один внешний светодиод, привязав его к пину 7. Для этого добавим дополнительные строчки. Не обязательно их набирать - проще скопировать имеющуюся и вставив в новую строку, заменив только самую малость.

Рис. 15.
Рис. 15.

Собираем схему и загружаем скомпилированную программу. Вот результат.

Рис. 16.
Рис. 16.

Установив индикаторы, получаем интересную информацию: добрый человек, создавший симулятор, уже подсоединил к выводу Vin питание +12В, а на выходе +5В присутствует это напряжение. Но есть и недостаток: если к выводу GND подсоединить значок заземления, убрав линию, соединяющую GND и катод диода, и подсоединить к катоду диода также значок заземления, то схема работать не будет. И еще, вы можете менять цвет светодиода, зайдя в его свойства.

Обозначать в программе пины цифрами считается не корректным, так как в цифрах легко запутаться. Поэтому присвоим пину 7 имя Led_my (понимаются только латинские буквы, но слова можно брать русские). Тогда программа примет такой вид.

Рис. 17.
Рис. 17.

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

Рис. 18.
Рис. 18.

А вот схема.

Рис. 19.
Рис. 19.

На сегодня все.

Всем здоровья и успехов!