• I






      
           

Научно-популярный образовательный ресурс для юных и начинающих радиолюбителей - Popular science educational resource for young and novice hams

Основы электричества, учебные материалы и опыт профессионалов - Basics of electricity, educational materials and professional experience

КОНКУРС
language
 
Поиск junradio

Радиодетали
ОК
Сервисы

Stock Images
Покупка - продажа
Фото и изображений


 
Выгодный обмен
электронных валют

Друзья JR



JUNIOR RADIO





Микроконтроллеры 3. Программа FlowCode.



Статьи публикуются по мере поступления. Для упорядоченного тематического
поиска воспользуйтесь блоком  "Карта сайта"







Современные микроконтроллеры — это хорошо продуманные устройства, позволяющие существенно упростить построение схем. Очень часто в своем составе они имеют встроенные компараторы, АЦП, модули работы с сетью USART или радиоканалом RF. Для любителей электроники и профессионалов, не специализирующихся на микропроцессорной технике, камнем преткновения может стать необходимость написания программы, без которой микроконтроллер «глух и нем». Если есть схема готового устройства и файл загрузки, задача упрощается, но готовая схема не всегда устраивает в  полной мере,   да и некоторый  осадок  беспомощности,   скованности остается. Под программированием подразумевается написание кода программы на ассемблере или языке высокого уровня: С, Basic, Pascal... Но так ли это? Рассмотрим конкретную и простейшую задачу. Положим, мы хотим на одном из выводов контроллера установить высокий уровень (при питающем напряжении 5 В, это и будет почти 5 В) . Через некоторое время (пауза) напряжение на этом выводе сделаем равным нулю (низкий уровень). И пауза. Если все это повторяется бесконечно, то такой «самый простой» случай позволит использовать контроллер в качестве управляющего устройства, скажем, для переключения елочной гирлянды. Или для генерации меандра. Или это станет индикатором, звуковым или световым. Или... И, что до программирования, то программу мы уже написали. Осталось ее реализовать. То, как она будет реализована далее, должно помочь людям, начинающим осваивать микроконтроллеры, почувствовать себя увереннее и избавиться от неприязни к программированию. Есть такая компьютерная среда разработки и отладки программ для микроконтроллеров, которая называется FlowCode.

Купить

Программаторы, средства разработки и отладки для DSP,
средства разработки и отладки для ПЛИС-ПАИС


Есть версия программы для AVR-контроллеров производства Atmel, есть версия для PIC-контроллеров производства Microchip. И есть очень полезное свойство программы — возможность экспортировать написанное для AVR-контроллеров, в среду разработки PIC-контроллеров, и наоборот. Установка программы выполняется обычным образом. При установке, кроме обычных щелчков по клавише Next и подтверждения согласия с лицензионными правами, следует не забыть установить дополнительный файл РРР (для версии 3 это PPPv3), он нужен, как минимум, для создания «слова конфигурации». Программа есть в демо-версии, урезанной в возможностях, но вполне работоспособной, на сайте производителя (http://www.matrixmultimedia.com), и в разных вариантах на любительских сайтах. Хотя программа создана для Windows, она работает и в Linux под Wine, не полностью, но в мере достаточной для знакомства.Ниже рассказ пойдет в приложении к микроконтроллеру PIC16F628A, но в полной версии программа FlowCode работает с весьма представительным рядом моделей, а все, сказанное в статье, никак не связано с конкретным выбором модели. Начинающим осваивать микроконтроллеры я советую в первую очередь остановить свой выбор на той модели, которую можно быстро и легко приобрести, нет нужды искать самый дешевый, вы же не собираетесь тиражировать созданные устройства, и для которой можно быстро собрать программатор или купить доступный по цене. Итак, первый запуск среды разработки и отладки FlowCode.Поскольку при написании статьи программа работает в Linux, могут иметь место незначительные отличия во внешнем виде рисунков. Если вы уже работали с программой, то при запуске в окне диалога открытия файла можно выбрать, предстоит ли работа с новым файлом (Create a new FlowCode flowchart...), или будет продолжена работа со старым (Open an existing FlowCode flowchart...),  который можно выбрать из предложенного ниже.



Для тех, кто знаком с электроникой, дальнейший порядок работы должен быть знаком: есть микросхемы, которые следует правильно связать сетью проводов в единое целое, небольшие трудности возникают только при выборе нужных микросхем, приходится обращаться к документации. В этом смысле FlowCode снабжена подсказкой, и есть примеры в папке «Examples». Очень полезно заглянуть в эту папку. Задача, описанная выше, может быть доведена до проверки на макетной плате, где микроконтроллер будет управлять светодиодом, припаянным, скажем, к нулевому выводу порта А (на всякий случай через резистор), и пусть светодиод мигает раз в секунду. На инструментальной панели слева, где расположены элементы команд, есть кнопка с буквой «О», от слова output (выход). Если навести курсор мышки на эту кнопку, то высвечивается и подсказка, Output. Зацепив команду (нажимаем левую клавишу мышки, когда курсор указывает на иконку, и, не отпуская клавиши, перемещаем курсор в рабочее поле схемы), тащим ее к линии связи между овалами Begin (начало) и End (конец). При этом курсор выглядит как стилизованная иконка, а слева появляется стрелочка-указатель. Попутно можно отметить, что пользовательский интерфейс программы стандартен для операционной системы Windows, а все операции очень похожи на аналогичные в других программах.
После добавления элемента Output диаграмма принимает следующий вид:




Нуль в заголовке состояния порта А подразумевает, что все выводы находятся в состоянии логического нуля (с низким уровнем напряжения) или что они будут установлены в 0. Мигать чем-то — это менять состояние, но чтобы мигание было заметно, понадобится пауза. Такой элемент (иконка на левой инструментальной панели с литерой «D») Delay (задержка) есть. Перетаскиваем его и вставляем ниже первой команды Output. По умолчанию задержка задается в миллисекундах. Но в свойствах этого элемента можно изменить единицу измерения. Двойной щелчок левой клавишей мышки по этому элементу на рабочем поле открывает диалоговое окно, где задаются многие свойства: имя программного элемента, значение, которое можно задать с помощью переменной, и единица измерения. Имя компонента пока не столь важно, но при создании больших программ следует продуманно использовать это свойство, как и имена переменных, чтобы облегчить чтение и понимание программы и себе, и другим.


Теперь достаточно выбрать опцию seconds, чтобы превратить миллисекунду в секунду. Следом за задержкой в 1 секунду добавим еще одну команду Output, как и в первый раз, но теперь, двойным щелчком левой клавиши мышки по нему на рабочем поле схемы, откроем диалоговое окно его свойств:



Заменив 0 в окне Variable or Value: единицей, мы изменим состояние выводов порта А, добавив в программу еще одну паузу, мы почти достигаем желаемого. Осталось заставить светодиод мигать непрерывно. Такое многократное выполнение фрагмента программы в программировании называется циклом (Loop). И такой элемент на левой инструментальной панели есть, седьмая кнопка сверху. Если добавить его к концу программы, это, конечно, не приведет к цели. Но можно перенести все команды внутрь цикла. Достаточно выделить уже существующие команды и перенести их в нужное место. Для выделения элементов следует, нажав левую клавишу мышки, когда курсор находится на пустом месте над программой, удерживая клавишу, отрисовать прямоугольник, включающий всю программу, кроме цикла. Все, что теперь выделено, можно перетащить к линии, соединяющей начало цикла While и конец, отмеченный как Loop. В программировании часто используются циклы, и бывают они разного вида, например, выполняемые заданное количество раз (For...) или условные, выполняемые до тех пор, пока не будет (или будет) выполнено некое условие, которое может, в свой черед, проверяться до выполнения очередного прохода программы, заключенной в цикл, или после прохода и т.д.
В свойствах цикла программы FlowCode можно изменить характер работы цикла, если это нужно.




Итак, мы написали (или нарисовали, или собрали) первую программу, и пора бы проверить, работает ли она. Программа FlowCode имеет хорошие отладочные средства . Чтобы запустить отладку, достаточно в основном меню выбрать пункт Run и раздел Go/Continue в выпадающем меню или на основном инструментальном меню нажать кнопку с иконкой «>», как у любого плеера, обозначающей воспроизведение. Однако прежде чем это сделать, полезно (или весьма полезно) на инструментальной панели дополнительных компонентов (второй слева) нажать первую кнопку с изображением ряда индикаторов (светодиодов), появляющаяся подсказка к ним LEDs. Вот теперь можно и запустить отладку. Мигающий светодиод, обозначенный как АО, в точности повторит то, что вы увидите,  собрав макетную плату. Но... небольшое дополнение: паузы, которые введены в программу, зависят от тактовой частоты микроконтроллера. Последняя определяется способом организации генератора. Для первых экспериментов самым удобным будет использовать внутренний тактовый генератор, его частота 4 МГц. То, с какой скоростью будет переключаться выход при отладке и при макетировании, следует согласовать с тактовой частотой. В основном меню есть пункт Chip с разделом Clock Speed..., где, собственно, и задается тактовая частота. Если этого не сделать, а по умолчанию тактовая частота принимается равной 20 МГц, то пауза в 1 секунду при отладке на макетной плате превратится в 5 секунд при использовании внутреннего тактового генератора. Для первой программы полезно будет попробовать менять состояние порта А во второй команде Output, вписывая разные числа. Они все будут отображаться со-стояниями выводов порта А в виде, который можно называть кодом 1-2-4-8, или в двоичном виде.



Как вы могли убедиться, написать небольшую программу для микроконтроллера гораздо проще, чем собрать схему на аналоговых ли, цифровых ли элементах, которая заставила бы мигать светодиод. А ведь эту программу легко поправить, чтобы она выполняла более сложные операции. Если вы купили программу FlowCode, то, возможно, купили и программатор, ра-ботающий с ней. В этом случае вы можете сразу вставить микросхему в панельку программатора и, оттранслировав первую программу, загрузить ее в микроконтроллер, перенести его на макетную плату и убедиться, что он работает (слово конфигурации,  о котором будет сказано ниже,  для PIC16F628A возьмите 3F18h). Можно использовать внешнюю программу для программирования микроконтроллеров, например, PonyProg или ICprog. Схемы программаторов для них достаточны просты даже для сборки начинающим. Для PIC контроллеров есть недорогой программатор EXTRA-PIC,  который можно заказать по почте. Сегодня многие пользуются ноутбуками, не имеющими ни СОМ, ни LPT порта, поэтому схему, приведенную ниже подключать некуда, но, возможно, конвертер USB-СОМ (или LPT для других программаторов) позволяет сделать это, хотя лучше предварительно проконсультироваться с теми, кто делал или пытался сделать это.
Схема на рисунке ниже рассчитана на программирование только некоторых моделей PIС-контроллеров. Для первых опытов это, как правило, достаточное требование к программатору. А переделать схему, когда появится опыт работы и круг интересов расширится, не составит особого труда.




Программатор получается небольшим и достаточно удобным в работе, не требует дефицитных деталей. Для его сборки достаточно куска макетной платы. Если стабилитрон D6 заменить аналогичным на напряжение 5.1 В и добавить два светодиода АЛ307А в прямом включении (или один светодиод и стабилитрон с соответствующим напряжением стабилизации), то процесс обращения к программатору можно контролировать визуально. Первые шаги в этом направлении, порой, оказываются не столь удачны, как хотелось бы, и никакая дополнительная индикация не будет лишней. У меня программатор подключается шлейфовым кабелем в метр длиной, чтобы удобно было работать возле компьютера,  к СОМ-порту.  Выглядит он так:



До того, как программировать микросхему, программу из предыдущей части рассказа требуется превратить в hex-файл. Это тот файл, что загружается в программу для работы с программатором, и который отправится в микроконтроллер. Предпоследняя клавиша основного инструментального меню с подсказкой Compile to HEX, как видно из рисунка, должна выполнить трансляцию, а в папке с программой появится искомый hex-файл. Если бы в моем распоряжении был программатор, подключенный по USB интерфейсу к компьютеру и умеющий «разговаривать» с FlowCode, то следующая кнопка основного инструментального меню с иконкой микросхемы загрузила бы программу.



При первом знакомстве с процедурой создания программы для микроконтроллера можно не заботиться о виде программы, довольствуясь полученными «по умолчанию» названиями, но в дальнейшем это может мешать. При взгляде на предыдущий рисунок трудно понять назначение команд. Это легко поправимо. Двойной щелчок по команде открывает диалоговое окно, где в поле Display name можно написать то, что впоследствии поможет легче читать программу. Лучше, если это будут названия на английском, но можно на латинице сделать для себя понятное название элемента. Кроме возможности именовать элементы программы удобным для понимания способом в нее можно добавлять комментарии (тоже лучше латиницей). Для вставки комментария используется последняя кнопка панели команд. Все комментарии должны игнорироваться при компиляции программы, и с этой точки зрения язык, на котором будет написан комментарий, не должен сказываться на работе программы. Вы можете поэкспериментировать с русскоязычными комментариями, но будьте готовы к тому, что при этом могут возникнуть проблемы.


Чтобы не возвращаться к вопросу о назначении элементов панелей, я приведу описания панелей. Первая левая инструментальная панель — это панель команд.



Перечень представленных команд (слева-направо на рисунке, сверху-вниз при запуске): Input (ввод), Output (вывод), Delay (пауза), Decision (ветвление), Connection Point (две точки соединения), Loop (цикл), Macro (макрос), Component Macro (макрос компонента, добавленного в программу), Calculation (вычисление), String Manipulation (строковые операции), Interrupt (прерывание) ,  С Code  (блок кода на языке Си),  Comment  (комментарий). Вторая инструментальная панель для добавочных внешних элементов.



LEDs (светодиоды), Switches (переключатели), LCDDisplay (жидкокристаллический дисплей), ADC (АЦП, если есть порт АЦП), LED7Segl (семисегментный индикатор) , LED7Seg4 (блок из 4х семисегментных индикаторов), Buggy (компонент игрушки), далее несколько стандартных интерфейсов TCP_IP, Bluetooth, RS232, IrDA, AddDefines (добавить определения), LinMaster (ведущий в локальной сети) , Custom (заказной компонент), EEPROM (перепрограммируемая память), Alarm (охранное устройство), Thermometer (термометр), PWM (широтно-импульсный модулятор) , SPI (последовательный внешний интерфейс), Webserver (web-сервер), CAN (сеть абонентского доступа), KeyPad (клавиатура), LinSlave (ведомый в локальной сети),  FormulaFlowCode  (компонент игры),  I2C  (шина связи между ИС).
Программа FlowCode позволяет быстро создавать программы достаточно интересных устройств. Посмотрим, как легко можно модернизировать программу, генерировавшую меандр с частотой 0.5 Гц. Усложним ее: Введем две кнопки управления частотой. Используем эти кнопки для удвоения и уменьшения частоты вдвое. Отобразим значение частоты на семисегментном индикаторе. Ввести две кнопки для управления, в отношении программы, означает добавить два программных элемента ввода (Input). Но после перетаскивания команд в рабочее поле и попытки закрыть окно свойств команды появляется сообщение:




Операция ввода работает только с переменными. Нужно либо выбрать, либо создать переменную, используя клавишу Variables. FlowCode, как любая среда программирования должна обладать всем набором элементов, нужных для построения программы. Хотя FlowCode специфическая, микроконтроллерная среда программирования, она должна иметь переменные. Нажатие указанной клавиши в окне свойств элемента Input открывает диалог создания переменных, в котором есть клавиша Add New Variable..., открывающая следующее окно, где собственно и создается новая переменная, для которой подойдет имя «more»,  больше.  Тип переменной Byte вполне должен устроить.



Как часто бывает в программах, это не единственный путь создания переменных. В основном меню в разделе Edit есть пункт Variables..., где можно открыть диалоговое окно работы с переменными и создать, точно так же, нужные переменные. Позже, когда возникает необходимость в работе с созданными переменными, их можно выбрать из списка либо диалога свойств программного элемента, либо из диалога работы с переменными.



Нажатие клавиши Use Variable возвращает в диалоговое окно свойств программного элемента Input. Для второго элемента ввода, как видно на рисунке выше, выбрано имя переменной less (меньше). Программа в этот момент выглядит следующим образом:



Элементы ввода в программе вне цикла. Это не окончательный результат, но куда и как их поместить, можно рассмотреть позже. Чтобы не переписывать, многократно, одинаковые фрагменты программы, программисты давно придумали такие удобные средства, как подпрограмма, или процедура , или функция, а в данном случае программный элемент Macro. Перетащим его в программу ниже элементов Input. Он появляется в программе, как Call Macro (вызов макроса), а двойной щелчок по нему открывает диалог работы с макросами.



Клавиша Create New Macro... (создать новый макрос), как мне кажется, хорошее начало для создания нужной подпрограммы.


Имя «multi» в поле Name of new macro: — это обязательный атрибут макроса. И, пока «на всякий случай», я добавил параметр «freq». Я еще не знаю, смогу ли я воспользоваться этим параметром, как я это смогу сделать, но удалить лишнее я всегда смогу (если не забуду, как обычно бывает). Добавление параметра потребовало создания еще одной переменной «freq_ch», но, все неприятности когда-нибудь заканчиваются, и, наконец, появляется подпрограмма. Вернее, заготовка для нее.



Теперь можно перенести весь цикл работы выходов из основной программы в подпрограмму. Напомню, как во многих графических редакторах, для выделения достаточно, нажав левую клавишу мышки, обвести нужные элементы. Затем в основном меню Edit выбрать Cut (вырезать), переместиться в рабочее поле подпрограммы и щелкнуть мышкой по линии связи операторных скобок Begin-End, появляется стрелочка, наконец, в основном меню Edit выбрать Paste  (вставить). Подпрограмма выглядит так, как выглядела программа в момент начала работы.

Купить

Программаторы, средства разработки и отладки для DSP,
средства разработки и отладки для ПЛИС-ПАИС


Подумаем, как менять частоту мультивибратора, а подпрограмма, в конечном сче¬те, и есть мультивибратор. Операцию легко проделать, меняя длительность пауз. Поэтому в свойствах паузы (двойной щелчок по первому, затем второму элементу Delay подпрограммы) заменим число «1» на переменную «freq_ch», созданную ранее. Пока программа не превратилась в «небоскреб», ее можно проверить. Предварительно добавим в основную программу (из которой удален цикл) после двух элементов Input новый элемент, который называется Calculation (вычисление) . В его свойствах зададим нужное начальное значение частоты мультивибратора .  То есть, начальную длительность пауз. Небольшое отступление. Ранее мне пришло в голову, что микросхема выглядит привычнее, когда входы у нее слева, а выходы справа. А это привело к тому, что выход переместился в порт В.



 достаточно нажать на кнопку «>» основной инструментальной панели программы, но отладочные светодиоды следует привязать к порту В, а не А, как было раньше.



Первая из кнопок на основной панели LEDs(O) — доступ к свойствам через выпадающее меню, где можно выбрать пункт Component Connections... и заменить привязку к порту.



После сделанных изменений проверка программы запускается клавишей «>» на основной инструментальной панели FlowCode.



Проверка не обнаруживает разницы в работе программы сравнительно с предыдущей проверкой. И еще, пока «болезнь не запущена», с программами это бывает, проведем еще одну диагностику. Изменение частоты, в сущности, изменение значения переменной «freq_ch». При нажатии кнопки «больше» эта переменная должна делиться на 2. Проверим. Добавим после первого элемента Calculation второй такой же. А в нем запишем freq_ch = freq_ch/2. Запустим программу......чтобы убедиться, что-то идет не так, как должно. Программа сейчас выглядит  так (основная программа):



Светодиод вместо того, чтобы мигать быстрее, то ли мигает, то ли нет — непонятно. Но есть простой способ проверить, а я думаю, что проблема кроется в переменной «freq_ch», проверить, что с ней происходит. Для этого достаточно в подпрограмме включить точку останова на элементе, скажем, Output (первое обращение к порту В). Для этого следует щелкнуть правой клавишей мышки по этому элементу и в выпадающем меню щелкнуть по пункту Toggle Breakpoint. Запуск программы выводит в окно наблюдения переменные и их значение.

 



Видно, что после деления переменная превращается в ноль. Первое, что приходит в голову, изменить тип переменной на int (целое). И задать значение не «1», а 1000. И поменять в подпрограмме в свойствах паузы секунды на миллисекунды. Теперь после деления на два переменная становится равной 500, а светодиод исправно мигает. Мы создали подпрограмму работы мультивибратора. Мы добавили два элемента ввода (для двух кнопок управления). И, наконец, разобрались с механизмом изменения частоты будущего мультивибратора. Определенное удобство программы FlowCode в том, что внешние элементы можно добавить для отладки с панели добавочных элементов, а отладку запустить непосредственно в среде разработки без трансляции файла. Поэтому, добавив элемент Switches, я запускаю отладку, чтобы убедиться......программа не реагирует на мои попытки изменить частоту генератора. Используем прием, которым мы уже пользовались: ставим точку останова (правая клавиша мышки и Toggle Breakpoint в выпадающем меню) на второе ветвление. Программа останавливается, но после повторного запуска больше не попадает в точку останова. И где же она обитает? Есть единственное место, где она может быть — подпрограмма. Подпрограмма — это бесконечный (в данный момент) цикл. Попав в него после «схода» с точки останова, программа больше из него не возвращается.

"Домашняя лаборатория" Гололобов В.Н.
 

назад  вперед

 







Просмотров: 13176 | Добавил: Chinas | Рейтинг: 5.0/2








Необходимо добавить материалы...
Результат опроса Результаты Все опросы нашего сайта Архив опросов
Всего голосовало: 377



          

Радио для всех© 2024