top.mail.ru Flowcode по русски

Вход



Код защиты Введите символы с картинки. (Щелкни картинку чтобы обновить)
Введите символы с картинки.
 * 

Flowcode по русски PDF Печать E-mail

Источник статьи - http://elektron.ucoz.ru/publ/8-1-0-70

ПРОГРАММА FLOWCODE - полет первый

Программа FlowCode
как самый простой и легкий путь к применению микроконтроллеров в своей практике.
Полет первый
Современные микроконтроллеры — это хорошо продуманные устройства, позволяющие существенно упростить построение схем. Очень часто в своем корпусе они имеют встроенные компараторы, АЦП, модули работы с сетью USART или радиоканалом RF. То, как настроить работу с этими устройствами, как использовать эти устройства, лучше прочитать в документации на конкретный тип микроконтроллера — никто лучше производителя не знает этого.
Но, если не пытаться при первом знакомстве с микроконтроллером использовать в полной мере все, что в нем заложено, то можно рассматривать контроллер, как обычную цифровую микросхему. У нее есть выводы, объединенные в группы, называемые портами. Выводы, в целом, могут как-то при программировании устанавливаться в свойствах быть входами или выходами микросхемы. Выходы микроконтроллера, как любой цифровой микросхемы устанавливаются в 0 или 1. При программировании микроконтроллера в определенном месте памяти устанавливаются режимы работы: будет ли контроллер использовать встроенный тактовый генератор или последний будет внешним, с кварцем или RC цепью; будет ли контроллер использован для перехода в режим ожидания; на какой скорости будет работать USART и т.д. Часто эти параметры устанавливаются в «слове конфигурации» контроллера, как биты 0 или 1. Эта конфигурация записывается при вводе программы в контроллер с программатора и остается неизменной в дальнейшем.
Все, что относится к слову конфигурации, мы можем рассмотреть тогда, когда заговорим о программировании и программаторах, и о программе, работающей с программатором. Как программаторов, так и программ работающих с программаторами много. Если вы не планируете профессионально заниматься микроконтроллерами, «прошивая» по сотне микросхем в день, то совсем не обязательно выбирать программатор, работающий с LPT или USB портами компьютера, вполне подойдет и простенький программатор, присоединяемый к COM-порту. То же можно сказать и о выборе контроллера — если у вас нет сложной задачи, для которой запланировано время на выбор контроллера, используйте тот, что подешевле, что можно купить в ближайшем магазине или получить по почте. Позже, когда вы наберетесь опыта, вам не сложно будет сменить PIC на AVR или любой другой. Среды разработки, такие как MPLAB или AVRStudio могут работать напрямую с рядом программаторов. Но это потребует от вас больше работы по поиску схемы и сборке устройства. Порой проще выполнить всю работу по созданию кода и его отладке в одной программе, а выполнить программирование микросхемы в другой. Но это, как говорят, дело вкуса.
Рассмотрим самый простой случай, когда все выводы микроконтроллера используются «на выход». Для конкретизации используем PIC16F628A. А для реализации простых задач программу FlowCode. Такой «самый простой» случай позволит использовать контроллер в качестве управляющего устройства, скажем для переключения елочных гирлянд. Или для генерации меандра. Или как индикатор включения. Или...

Запускаем программу FlowCode.

Рис. 1. Первый запуск программы FlowCode

Программа предназначена для операционной среды Windows, но я использую ее в Linux, поэтому могут иметь место незначительные отличия во внешнем виде и поведении программы. Так у меня при запуске программы основное рабочее поле необходимо открыть, используя стандартную кнопку Распахнуть в правом верхнем углу. Если вы уже работали с программой, то при запуске в окне диалога открытия файла можно выбрать, предстоит ли работа с новым файлом (Create a new FlowCode flowchart...), или будет продолжена работа со старым (Open an existing FlowCode flowchart...), который можно выбрать из предложенного ниже списка.
Я не борец за «крутость», по причине чего хочу заставить микроконтроллер управлять светодиодом, который на макетной плате припаяю к выводу, скажем, нулевому порта А. Пусть мигает раз в секунду.
Я подозреваю, что в программе это можно сделать несколькими способами, но использую самый очевидный — на правой инструментальной панели есть кнопочка с буквой «О». Думаю, это от слова output-выход (если навести курсор мышки на эту кнопочку, то высвечивается подсказка Output). Цепляю этот выход (нажимаю левую клавишу мышки, когда курсор указывает на иконку, и, не отпуская клавиши, перемещаю курсор в рабочее поле схемы) и тащу его к линии между овалами Begin-начало и End-конец. При этом курсор выглядит как стилизованная иконка, а слева появляется стрелочка-указатель.

Рис. 2. Добавление элемента программы к диаграмме

После добавления элемента Output диаграмма принимает следующий вид:

Рис. 3. Начальный вид диаграммы первой программы

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

Рис. 4. Диалоговое окно свойств элемента Delay

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

Рис. 5. Изменение свойств выхода порта А в диалоговом окне

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

Рис. 6. Первая программа в FlowCode

А мы написали первую программу, и пора бы проверить, работает ли она. Программа FlowCode имеет отладочные средства. И я глубоко убежден, что их должно хватать для создания достаточного количества устройств без необходимости покупать и программировать контроллеры.
Чтобы запустить отладку, достаточно в основном меню выбрать пункт Run и раздел Go/Continue или на основном инструментальном меню нажать кнопочку с иконкой, как у любого плеера обозначающей воспроизведение. Однако прежде, чем это сделать полезно (или весьма полезно) на левой инструментальной панели (второй) нажать первую кнопочку с изображением ряда индикаторов (светодиодов), появляющаяся подсказка к ним LEDs. Вот теперь можно и запустить отладку. Мигающий светодиод, обозначенный как А0, в точности повторит то, что вы увидите, собрав макетную плату.
Для первой программы полезно будет попробовать менять состояние порта А во втором Output, вписывая разные числа. Они все будут отображаться состояниями выводов порта А в виде, который можно называть кодом 1-2-4-8 или двоичном виде.

Рис. 7. Первый запуск первой программы

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



ПРОГРАММА FLOWCODE - полет второй

Полет второй
Когда пишешь прикладную компьютерную программу, проще — оттранслировал и можно запустить, посмотреть, что из этого получается, даже если ничего не получается.
С микропроцессорами и микроконтроллерами хуже. Я помню, как много лет назад, при написании программы испытывал нестерпимый зуд в руках, в кончиках пальцев, хотелось как можно скорее схватить паяльник и что-нибудь к чему-нибудь обязательно припаять. Уж так устроен «нормальный железячник».
Поэтому прежде, чем вернуться к программе FlowCode, поговорим немного о железе.
Здесь у меня есть определенные трудности. Несколько лет назад, когда мне понадобилось в среде разработки PIC-контроллеров MPLAB что-то сделать, я не отважился ни на покупку программатора, который работал бы с этой программой, ни к пайке такого программатора. Из программ, работающих с простыми программаторами, я обнаружил только PonyProg для Windows, и, спаяв программатор, работал с этой парой. Позже, рассказывая о программах Piklab и KTechlab для Linux, я спаял еще один простой программатор, который прекрасно работал с ними. Оба программатора я выбрал в самом простом виде, поставив панельку только для микроконтроллера PIC16F628A. А в промежутке, чтобы не обидеть Windows купил недорогой, но более универсальный программатор EXTRA-PIC.
Я не готов к тому, чтобы «хаять» программу PonyProg и программатор, работающий с ней. Я не готов к тому, чтобы утверждать, что это и есть то, что нужно, и больше ничего не надо. И, увы, не готов к тому, чтобы найти и спаять схему программатора, который, возможно, будет работать с программой FlowCode. Но в любом случае работа программ для программаторов отличается не столь разительно, хотя может иметь много особенностей, чтобы считать это принципиальным моментом. С другой стороны, было бы непростительно не проверить «живьем» результаты, полученные в программе FlowCode. Я предлагаю компромисс. Я опишу процесс программирование в Piklab, сделав вид, что это некоторая специально для программатора существующая программа, а вы или сделаете вид, что верите мне, или подумаете, а не использовать ли, как это делаю я, Linux в качестве второй операционной системы. Под Linux есть достаточно удобная среда работы с PIC-контроллерами Piklab, есть бесплатные и полнофункциональные компиляторы Си, а об ассемблере я и не говорю. Или, если понадобится, я повторю это описание для программатора EXTRA-PIC. Программа для него тоже распространяется бесплатно.
Итак. Схема программатора с которым я буду работать в программе Piklab для Linux. Кстати, это классическая схема, с которой, мне кажется, будут работать Windows-программы. Нужно их только поискать.


Рис. 2.1. Схема программатора для программы Piklab

Он подключается шлейфовым кабелем в метр длиной, чтобы удобно было работать возле компьютера, к COM-порту. Выглядит он так:

Рис. 2.2. Внешний вид программатора

Внешний вид и описание программатора EXTRA-PIC можно найти в Интернете, там же есть схема. Можно, думаю, заказать его по почте в агентстве «Десси». Словом, это, мне кажется, не столь принципиально и больше зависит от ваших вкусов и привычек, чем от чего-либо еще.
Сделав вид, что программатор я только что спаял, я хочу программу, написанную в FlowCode, загрузить в микросхему; микросхему перенести на макетную плату, где у меня кроме панельки для микросхемы есть несколько светодиодов, оставшихся от предыдущих экспериментов, и еще что-то, что не имеет отношения к данному случаю. Если светодиод будет мигать, я помещу фотографию макетной платы, если не будет мигать, я напишу пару абзацев о том, как здорово он мигает. Вот такие планы на этот «ночной» полет.
Первое, что нам потребуется, это программу из предыдущей части превратить в файл с hex-кодом. Такой файл загружается в программу, которая отправит его в микроконтроллер.


Рис. 2.3. Трансляция программы в hex-код

Предпоследняя клавиша основного инструментального меню с подсказкой Compile to HEX, как видно из рисунка, должна выполнить это... или, положим, должна была бы... или могла бы... но в Linux эта процедура явно не проходит.
В Windows все заканчивается благополучно, а в папке с программой появляется искомый hex-файл. Если бы в моем распоряжении был программатор, подключенный по USB интерфейсу к компьютеру, программатор, умеющий разговаривать с FlowCode, то следующая кнопка основного инструментального меню с иконкой микросхемы загрузила бы программу.
Я использую Piklab. Не то, чтобы это говорило о моей пристрастности к Linux, я просто работаю в Linux и несколько лет кряду пытаюсь понять, что имеют в виду люди, когда говорят о трудностях освоения Linux. Работа в Linux ничем не отличается от работы в Windows, разве только удобнее. Этот текст я пишу в OpenOffice Writer'е, Piklab работает на другом столе, а на третьем я при необходимости поправляю иллюстрации в графическом редакторе Gimp. В Windows мне не хватает этих удобств.

Рис. 2.4. Среда программирования PIC-контроллеров Piklab

После загрузки появляется предыдущий проект, который мне не нужен. Достаточно его закрыть и открыть hex-файл, созданный в программе FlowCode. Открыть его не составляет труда — в основном меню File-Open или кнопка с папкой на основном инструментальном меню.

Рис. 2.5. Hex-файл, открытый в Piklab

Файл можно было бы загрузить в микросхему, но перед этим нужно записать слово конфигурации. В разных программах, работающих с программаторами, эта процедура может выглядеть различно, но в этой достаточно спуститься чуть ниже в окне кода, об этом же говорят полосы прокрутки. В окне с адресом 2007 перед отправкой кода в микроконтроллер я запишу 2118 (в действительности 3F18h), что означает отказ от блокировок, использование внутреннего генератора и еще ряд особенностей, которые меня пока не интересуют.

Рис. 2.6. Запись слова конфигурации в Piklab

Теперь все готово к записи, осталось нажать на инструментальной панели кнопку с иконкой микросхемы и стрелкой, направленной внутрь. Через несколько секунд в окне сообщений появляется сообщение о завершении процесса записи.
На этом можно закончить повествование, но я обещал проверить, все ли работает. Поэтому после программирования микроконтроллера я переношу микросхему на старенькую макетную плату, оставшуюся от предыдущих опытов, включаю блок питания и наблюдаю, как зажигается и гаснет светодиод. Делает он это не совсем, как я заказывал, не раз в секунду, а медленнее. Я даже могу сказать, что раз в 5 медленнее. Потому что, я думаю, программа FlowCode рассчитывает на работу с кварцем 20 МГц, а внутренний генератор, который я использую, работает на частоте 4 МГц. Если бы мне нужны были именно секундные импульсы, я за 10-15 секунд подправил бы времена задержки, и переписал бы микроконтроллер еще раз.
Если бы я хотел этот контроллер использовать для работы с елочной гирляндой, я добавил бы вместо светодиода транзистор (на всякий случай) с реле, имеющим контакты на 220 В, и подключил гирлянду через эти контакты.

Рис. 2.7. Работающий микроконтроллер на макетной плате

Программа FlowCode может генерировать файл на языке Си.

//************************************************************************************
//**
//** File name: C:\Documents and Settings\vladimir\Рабочий стол\fi_code\part1\schemes\exampl1.c
//** Generated by: Flowcode v3.2.2.40
//** Date: Saturday, March 22, 2008 20:37:58
//** Licence: Demo
//**
//** ***DEMO VERSION***
//**
//**
//** NOT FOR COMMERCIAL USE
//**
//** http://www.matrixmultimedia.com
//************************************************************************************

#define MX_PIC

//Defines for microcontroller
#define P16F628A
#define MX_EE
#define MX_EE_TYPE1
#define MX_EE_SIZE 128
#define MX_UART
#define MX_UART_B
#define MX_UART_TX 2
#define MX_UART_RX 1
#define MX_PWM
#define MX_PWM_CNT 1
#define MX_PWM_TRIS1 trisb
#define MX_PWM_1 3

//Functions
#include <system.h>
#pragma CLOCK_FREQ 19660800

//Configuration data
//Internal functions
#include "C:\Program Files\Matrix Multimedia\Flowcode V3\FCD\internals.h"

//Macro function declarations
//Variable declarations
//Supplementary defines
//Macro implementations
//Supplementary implementations

void main()
{
//Initialisation
cmcon = 0x07;

//Interrupt initialisation code
option_reg = 0xC0;

//Loop
//Loop: While 1
while( 1 )
{
//Output
//Output: 0 -> PORT A
trisa = 0x00;
porta = 0;

//Delay
//Delay: 1 s
delay_s(1);

//Output
//Output: 1 -> PORT A
trisa = 0x00;
porta = 1;

//Delay
//Delay: 1 s
delay_s(1);
}
mainendloop: goto mainendloop;
}

void interrupt(void)
{
}


Это удобно, если предполагать работу с языком Си. Хотя запись на языке Си может потребовать правки, зависит от используемого компилятора, она достаточно универсальна. Ту же программу можно использовать для других микроконтроллеров.
Но это тема другого полета.


ПРОГРАММА FLOWCODE - полет третий.

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

Рис. 3.1. Начало работы с программой обслуживания семисегментного индикатора

Как мне помнится, есть светодиодные индикаторы с общим анодом и общим катодом. Если так, то при практической реализации легко можно сменить состояние общего вывода и инвертировать состояние выводов управления, если не так, то и менять ничего не придется.
Выходы микроконтроллера PIC16F628A рассчитаны на достаточно большие токи, но, если нет особой нужды в минимизации деталей схемы, можно в реальной схеме добавить токоограничительные резисторы. Будут или нет «резисторы безопасности», это никак не отразится на работе программы, поэтому при написании программы можно отложить решение этого вопроса до момента реализации схемы на макете.
Если на панельке индикатора нажать на кнопочку со стрелкой в правом верхнем углу, то появится выпадающее меню. Выбор раздела Component Connections... приводит нас в диалог настройки подключения индикатора.

Рис. 3.2. Диалог настройки подключения индикатора

При первом запуске вывод Anode оказывается не подключен (Unconnected). Для его подключения достаточно выбрать в окне Port:, скажем, порт А и Bit 3. Сегменты индикатора можно оставить подключенными так, как это сделано по умолчанию.
Теперь, подключив анод к выходу 3 порта А, мы можем установить вывод в «1», чтобы засветить все сегменты. Для этого используем элемент Output, как делали это прежде, и изменим свойства этого элемента.

Рис. 3.3. Диалог настройки элемента Output

В этот раз я хочу использовать только бит 3, который установлю в «1». Если такое подключение семисегментного индикатора засветит все сегменты, то мы должны получить цифру 8

Рис. 3.4. Запуск симуляции программы

Теперь постараемся превратить цифру 8 в цифру 0 (самая простая трансформация). За «перекладинку» отвечает сегмент G, подключенный к биту 6 порта B, который установим в «1».

Рис. 3.5. Изменение состояния вывода порта B.6

Запустив симуляцию можно проверить, что 8 превращается в 0, как мы и ожидали. Таким образом, манипулируя состоянием выводов порта B, мы можем высвечивать любую цифру на семисегментном индикаторе.

Рис. 3.6. Превращение 8 в 0 на индикаторе

Программа FlowCode, если заглянуть в папку, где она установлена, имеет много обучающих примеров. Если при первом знакомстве, например, с программированием микроконтроллера можно не заботиться о виде программы, довольствуясь полученными «по умолчанию» названиями, то в дальнейшем это может мешать. При взгляде на предыдущий рисунок трудно понять назначение первого элемента. Но это легко исправить. Двойной щелчок по нему, в окне Display name: пишем то, что нам понятно. Лучше, если это будут названия на английском, но можно на латинском сделать для себя понятное название элемента.

Рис. 3.7. Смена названия элементов программы

Несколько примеров в папке Examples показывают, как удобно для себя использовать возможности программы. Профессиональные программисты используют разные приемы оформления программы, но главное — обеспечить понятность для себя и других. Даже когда пишешь программу для себя, а программы имеют свойство повторного использования готовых модулей, важно сделать программу понятной, используя ясные названия переменных, комментарии. Увлекаясь работой, жалеешь время на обдумывание этих, в сущности нейтральных по отношению к коду программы атрибутов, но возвращение к уже написанной и отлаженной программе показывает, что это время было бы потрачено не зря. Переменные вида а1, а2, а3 и т.д. экономят время при написании программы, но их назначение трудно понять по прошествии месяца после завершения работы. Но это дело вкуса и личных предпочтений, а возможностям понятного описания программы посвящено несколько примеров в папке Examples.
На одном из сайтов, кажется «Паяльник», я видел просьбу помочь с устройством, на первый взгляд простым — несколько кнопок, при нажимании которых счетчик должен отображать количество нажатий. Все просто. Счетчик, кнопки, индикатор. Небольшая проблема — первое нажатие любой кнопки должно обнулять счетчик. И еще одна небольшая проблема — дребезг контактов кнопок. Две небольшие проблемы (а может и не две) существенно усложняют схемное решение. И совет, данный автору темы, использовать микроконтроллер, совершенно, как мне кажется, правилен.
Подключение индикатора к контроллеру ясно из предыдущего. Как подключаются кнопки, можно увидеть в примерах.

Рис. 3.8. Пример использования кнопок в программе FlowCode

Пример взят из программ, приходящих с FlowCode. А предыдущий пример показывает, как использовать элемент вычислений Calculation.

Рис. 3.9. Пример использования вычислений

Здесь переменная MY_OUTPUT увеличивается на 4. Собственно, есть все подсказки для того, чтобы начать работу над проектом: несколько кнопок, подсчет нажатий каждой кнопки в переменной, отображение результата на индикаторе. Если добавить условие такого рода, а элемент Decistion-условие в программе есть, чтобы при нажатии кнопки проверялось, нажата она впервые или нет, если впервые, то обнулять переменную подсчета отображаемую индикатором, если нет, то продолжать подсчет, если добавить это, то, практически, почти все требования к схеме будут соблюдены. Для программного устранения дребезга контактов можно вставлять паузы Delay длительностью 0.1-0.2 секунды в то место программы, где проверяется состояние контактов.
Реализацию первого проекта такого рода можно разбить на несколько этапов.
На первом этапе, например, можно использовать переменную, значение которой должно отобразиться на семисегментном индикаторе. Переменная должна меняться от 0 до 9. И на первом этапе это можно делать «ручками»: остановили отладку, изменили значение переменной, отобразили. Или сделать цикл (с паузами), в котором переменная наращивается от 0 по 1 до 9. Условие остановки цикла — переменная стала равна 10 (или 9).
На втором этапе можно использовать кнопку для увеличения значения переменной.
На следующем этапе можно обработать две кнопки, сразу добавив обнуление счета при первом нажатии любой из них, или сделать это на следующем этапе.
И, наконец, можно проверить работу «антидребезга», сделав паузу, например, длительностью в несколько секунд и нажимая кнопку несколько раз.
Думаю, и в этом случае, как подойти к созданию программы, зависит от личных вкусов и предпочтений. Полезно, если даже вы в первый раз приступили к работе, потратить некоторое время, чтобы разобраться в собственных вкусах и предпочтениях. Дело в том, что все люди разные. Что одному хорошо и удобно, как бы оно ни было правильно, другому может доставлять больше неудобств, чем комфорта. И если у него есть собственные удобные приемы, или подходы, или даже привычки — если это не сказывается на конечных результатах, то отчего бы ни использовать их?
Если в процессе работы появится необходимость обратиться за помощью, то в первую очередь можно заглянуть все в ту же папку Examples.

Рис. 3.10. Пример работы с семисегментным индикатором из примеров FlowCode

Программа FlowCode имеет еще ряд очень полезных качеств. Освоив работу с микроконтроллером на уровне алгоритмического построения программы, а многие профессиональные программисты небезосновательно считают, что создание алгоритма, это и есть создание программы, при желании освоить кодирование на языке Си можно видеть, как простые операции, использованные прежде, выглядят на этом языке. Не знаю, насколько удобно использовать FlowCode для работы с языком Си, но, заглянув в руководство, знаю, что компилятор языка может быть использован в программе MPLAB. То есть, все, что вы сделаете, можно перенести в MPLAB и использовать эту среду программирования с компилятором FlowCode без значительных изменений. Аналогично, мне кажется, можно поступить и ассемблером, если вас заинтересует такой вариант.
Но рассказ об MPLAB — это совсем другая история.

 

Добавить комментарий


Защитный код
Обновить

        Рейтинг@Mail.ru Rambler's Top100                       Valid XHTML & CSS