Flowcode

Программирование AVR микроконтроллеров для начинающих

материалы в категории

Простые программы для микроконтроллеров самостоятельно. Светофор

часть 2

начало статьи Простые проекты на AVR микроконтроллерах

В первой части статьи мы сделали симулятор для нашего будущего проекта, теперь будем составлять прошивку. А для этого мы будем использовать программу Flowcode AVR v4.3.6.61 . Почему будем использовать устаревшую версию? Да потому что сама программа денег стоит, а на более старые версии можно спокойно и кейгены найти….

Ну, в общем, поехали…

Пишем управляющую программу при помощи Flowcode AVR v4.3.6.61

Запускаем Flowcode AVR v4.3.6.61. Выбираем “create a new flowcode flowchart”, в появившемся меню прокруткой выбираем тип микроконтроллера, нам нужен “Attiny13” (рис18,19,20). Далее появляется окно программы с панелями.

В выпадающем меню «файл» выбираем «сохранить как», и указываем путь к созданной нами папке в корневом каталоге диска “myproject”, называем файл его именем на английской раскладке клавиатуры “svetofor”. И мы готовы к написанию алгоритма программы.

Описание Flowcode

Первая  инструментальная панель — это панель команд


Перечень представленных команд (с лева – на право на рис.21).

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

Ниже расположена вторая панель инструментов.


На ней расположено много всяких устройств, для подключения к портам микроконтроллера (рис.22).

Вообще я прилагаю к статье “help” на русском языке по работе с этой программой, если что, то заглядывайте туда, (правда перевод там смешной, но разобраться можно).

Далее давайте определимся с алгоритмом работы светофора и опишем его словами:1.   Зажигается красный свет и горит, к примеру –  5 секунд (не смейтесь, у нас же всё – таки не настоящий светофор с перекрёстка);2.

   Зажигается желтый на 2 секунды (красный при этом не тухнет);3.   Тухнет красный и желтый;4.   Загорается зелёный на 5 секунд;5.   Зелёный мигает 3 раза;6.   Тухнет зелёный;7.   Загорается желтый  на 2 секунды;8.

   Тухнет желтый;

9.   Повтор пункта 1 (или конец цикла).

Теперь этот алгоритм нужно нам запрограммировать в наш микроконтроллер.

Настроим выходы микроконтроллера, для этого на второй инструментальной панели выбираем «выходы» и «LED», на панели видим добавился наш светодиод (рис.23,24).


Кликнем на светодиоде правой кнопкой , выберем «расширенные свойства»(ext properties), выберем цвет, размер, и активный уровень (вспомним нашу модель в протеусе, светодиоды подключили с общим катодом, а значит активный уровень выбираем высокий) (рис.25,26) . Теперь ещё раз кликнем правой кнопкой на нём и выберем “connections” (вспомним модель в протеусе, у нас красный порт –  В0, желтый – В1, зелёный – В2.) (рис.27,28).

Таким образом подключаем все три наших светодиода (рис.29).

Теперь у нас есть чем управлять программно.

На клетчатом фоне видим два связанных элемента алгоритма, они неизменно присутствуют всегда. Без них никак нельзя это “BEGIN” и “END”, то есть начало и конец выполнения программы.

Поскольку микроконтроллеры AVR  выполняют программу от начала и до конца, то выполнив «тело программы» он дойдёт до “END” и остановится.

Нам этого не нужно, светофор ведь должен работать всё время, пока его не отключат.

Для этого установим бесконечный цикл выполнения нашей будущей программы. Для этого в первой панели инструментов находим значок “Loop”, что значит цикл, и перетягиваем этот значок на место, между “BEGIN” и “END” (рис.30) .

Теперь в теле этого цикла и будем осуществлять наш алгоритм. Первым пунктом у нас идёт – включить красный на 5 секунд. Перетягиваем значок “component macro” что значит макрос компонента, а компонент у нас это наш красный светодиод (кстати у него есть имя, он у нас LED0, это можно посмотреть если на нём кликнуть и посмотреть в панель свойств –  “property” (рис.31,32).

Далее, два раза кликнув по значку «макрос компонента» выбираем LED0  и ON, что значит – включить светодиод 0 (рис.33).

Можно ещё вставить комментарий, что бы было легче ориентироваться по своему алгоритму. Перетянем значок “comment”, два раза на нём кликнем, и пишем свой комментарий (рис.34).

Красный должен гореть 5 секунд, есть значок “DELAY”  что значит задержка (пауза), перетянем его и в его свойствах укажем единицу времени ( с ), и их количество ( 5 ) (рис.35).

Пунктом 2 у нас идёт включение желтого на 2 секунды, при этом красный не тухнет. Снова: макрос компонента LED1 (он у нас желтый), выбираем LED1, ON, далее DELAY , выставляем 2 и единицы измерения – секунды (рис.36).

Далее пункт 3, тухнет красный и желтый. И пункт 4, загорается зелёный на 5 секунд. Перетягиваем: макрос компонента , LED0, OFF (выключили красный), макрос компонента, LED1, OFF (выключили желтый), снова макрос компонента , LED2, ON (включили зелёный). Далее  перетянем DELAY, 5 sec. (рис.37) .

Пунктом 5, у нас зелёный мигает 3 раза, то есть тухнет затем пауза, загорается, пауза, и снова тухнет. Здесь немного подумаем, стоит ли переписывать одни и те же действия 3 раза? Конечно же, нет. Используем цикл, перетянем его и кликнем по нему два раза.

 Поставим галочку на LOOP COUNT (что значит количество циклов), поставим в поле нужное нам количество – это 3 цикла (рис.38). Для наглядности примем паузу между включением и выключением зелёного 0.5 секунды(или 500мс.).

Перетягиваем теперь в тело нашего троекратного цикла: макрос компонента LED2, OFF, дальше DELAY, 500 ms, LED2, ON, и DELAY, 500ms. (рис.39).

Далее пункт 6, выключаем зелёный. Пункт 7 включаем желтый на 2 секунды. Пункт 8 – выключаем желтый.  (LED2, OFF; LED1, ON; DELAY, 2 sec.; LED1, OFF). Думаю, что такая запись Вам будет понятна, поскольку эти действия выполнялись уже неоднократно (рис.40).

Ну вот, и всё ! Мы написали алгоритм программы управления светофором. Давайте проверим, что у нас получилось. Для этого в выпадающем меню “view” выберем “project option”, откроется окно опций проекта. Установим тактовую частоту микроконтроллера 4800000 Гц. (это нужно для правильного расчёта пауз ), и скорость симуляции, в данном случае “fast as possible” (рис.41,42).

Теперь жмём «ОК», ищем и нажимаем синий треугольник вверху «RUN», (или нажимаем клавишу F5), и наслаждаемся симуляцией работы нашего светофора в Flowcode. Если не работает, или не так работает как надо, то ищем ошибки. Поскольку статья очень подробная то ошибок быть не должно.

Приступим теперь к компиляции проекта. В выпадающем меню “chip”, выбираем “compile to hex”. Появляется окно компилятора, и индикация его работы (рис.43).

Должно получится так как на картинке, если ”Return code=1”, проверяем путь к файлу проекта. Напомню что названия всех папок в пути от корневого каталога и файла должно состоять только из латинских символов. Иначе компилятор будет выдавать ошибку (рис.44).

Открываем папку с проектом, и смотрим на наш HEX файл прошивки (рис.45,46).

А вот и наш Си файл (рис.47,48).

А это алгоритм работы программы

Вот видео всего того что тут было написано:

Собственно полученная нами прошивка (код).

И программа на СИ (находится в архиве ниже).

Теперь возвращаемся к нашему проекту в Proteus professional. Нам нужно проверить, функционирует ли полученный нами код в модели созданного нами устройства, или нет. Для этого открываем наш файл svetofor.

DSN (он у нас в папке myproject), делаем двойной клик на микроконтроллере, откроется окно его свойств (рис.

50), так называемые фьюзы поставьте такие как на рисунке (WDTON=1; CLKDIV8=1; RSTDISBL=1; CKSEL=10; SUT=10).

Выберите путь к “Program file” нажав на кнопку с папкой (укажите путь к нашему HEX файлу) (рис.51).

Нажимаем кнопку треугольник внизу (воспроизвести), и наслаждаемся работой схемы.

Источник: http://cxem.net

Источник: http://radio-uchebnik.ru/txt/15-avr-mikrokontrollery/125-prostye-proekty-na-avr-mikrokontrollerakh-prodolzhenie

Flowcode и анимация

Программа Flowcode – это среда разработки программ для микроконтроллеров, использующая графический язык программирования.

Использование графики в программировании осуществляется давно. Блок-схему программы легче «увидеть» и понять, чем программу, описанную обычным языком.

Пример блок-схемы из Wiki

Задача разработчиков программы Flowcode сводилась к выбору наиболее часто используемых базовых операций любого языка программирования высокого уровня для создания набора иконок, полностью перекрывающих нужды в программировании микроконтроллеров. Затем разработчики создали компилятор с графического языка на язык Си, наиболее часто используемый в программировании. Последний позволял получить файл, который можно загрузить в микросхему с помощью программатора.

Любая современная среда разработки кроме редактора и компилятора должна иметь средства отладки программы. Поскольку язык программирования был выбран графический, отладочные средства логично было использовать графические. А наглядность этим отладочным средствам придавали элементы анимации. Вот пример работы отладчика в Flowcode 3:

Пример работы отладки в Flowcode 3

Выключатель, соединенный с выводом B0, можно «нажать» с помощью мышки, тогда светодиод, соединенный с выводом A0 микроконтроллера, зажигается. Согласитесь, что такая отладка программы нагляднее, чем отслеживание состояния портов.

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

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

Поскольку уже следующая версия программы, Flowcode 4, имела более развитый отладочный компонент. Появилась панель, на которой можно было размещать дополнительные компоненты, сопутствующие разработке устройств.

Панель для дополнительных компонентов в Flowcode 4

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

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

Группа электромеханических компонентов и шаговый двигатель

Теперь при отладке программы можно было видеть вращение шагового двигателя.

Насколько удачна была эта идея можно судить по разделу электромеханических компонентов в следующей версии Flowcode.

Группа электромеханических компонентов в Flowcode 5

Среди новшеств сегодняшней версии программы Flowcode 6 не только наличие двух панелей, системной и панели управления, но и трехмерный вид компонентов, и развитые средства анимации. В примерах к программе можно найти ряд реализаций:

Пример анимации в Flowcode 6

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

Вот фрагмент программы, управляющей анимацией:

Фрагмент программы в Flowcode 6

Кроме основной части программа имеет много макросов, а анимация в сочетании с программой выглядит достаточно сложной. Но средства анимации позволяют использовать и минимум программных компонентов, как в еще одном примере от Matrix.

Пример еще одной анимации

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

Средства анимации Flowcode 6 оказываются разнообразны, но о том, как сделать первый шаг, пойдет речь далее.

Создаем новый проект. На системной панели выбираем сферу, которую добавляем на панель:

Добавление объекта на системную панель

Используем панель свойств, чтобы дать имя объекту:

Задание имени нового объекта

Имя нового объекта можно оставить, как есть по умолчанию, но удобнее задать имя, которое будет понятно, когда объектов окажется несколько.

Чтобы изменить имя по умолчанию, достаточно щелкнуть в окне Handle и изменить имя на новое.

Некоторые объекты появляются на системной панели с размерами, которые очень малы (или слишком велики). Можно изменить эти размеры, используя в панели свойств параметры раздела World size: Wi…, He…, De…

На инструментальной панели дополнительных компонентов в разделе Machatronics выберем элемент Animator:

Выбор элемента управления объектом

Из вариантов размещения следует выбрать размещение на системной панели. Варианты размещения появляются после щелчка по кнопке (слева) или после щелчка правой клавишей мышки по названию элемента.

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

Придание объектам удобного для работы вида

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

Выбор объекта на панели свойств

Кроме размеров следует задать подключение этого элемента к ранее созданной сфере, используя свойство Target. Полезно и заменить имя по умолчанию на имя удобное для запоминания, например animator_ball. После указания цели для аниматора на системной панели появится стрелка, соединяющая эти два элемента.

Соединение объекта и средства управления

Создадим макрос, который назовем move_ball.

В основной программе добавим элемент Simulation (взяв его с панели программных компонентов) и выберем для симуляции элемент:

Состав закладки симуляции после появления новых компонентов

Основная программа выглядит следующим образом:

Первоначальный вид основной программы

А макрос выглядит так:

Первоначальный вид макроса

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

Первый запуск программы

Осталось разобраться в параметрах настройки, которые были выбраны в элементах Simulation произвольно. Можно прочитать о настройках в файле подсказки, можно опробовать разные настройки, используя созданную программу.

Определившись с движением созданного шара, можно модифицировать основную программу и макрос:

Модификация программы

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

Используя возможности анимации Flowcode 6, можно создать иллюстрацию технологического процесса.

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

Источник: https://www.rlocman.ru/review/article.html?di=150503

Qucs Flowcode

Многие учебные заведения в последние годы с успехом используют в учебном процессе компьютерные программы. Не исключение и институты или колледжи радиоэлектронной направленности.

Такие программы, как Multisim или MicroCAP, позволяют студентам и соединить теоретические знания с практическими примерами построения электрических схем, и увидеть влияние различных факторов на поведение будущих электронных устройств, и научиться разработке этих устройств в форме близкой к той, что ждет их после окончания учебного заведения.

Программы САПР (или EDA) полезны преподавателям при подготовке методических материалов; они используются в научной работе; они очень удобны при написании статей и рефератов, относящихся к электронике.

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

А таких специалистов гораздо больше.

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

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

Существует достаточно много программ или сред компьютерной разработки электроники; ничего плохого о них сказать нельзя, они развиваются и совершенствуются по мере развития и совершенствования самих компьютеров.

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

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

Однако во всем многообразии программ для изучения радиоэлектроники с применением компьютеров есть один элемент, на который все чаще обращают внимание многие учебные заведения. Это стоимость программ. Даже с теми скидками, которые предоставляются учебным заведениям, использование компьютеров, а как их не использовать? – использование компьютеров становится слишком дорогостоящим.

В этой проблеме есть неплохой выход – применение свободно распространяемого программного обеспечения, включая и операционную систему. Все разговоры о трудностях перехода с Windows, а я не думаю, что в учебных заведениях используют другие операционные системы, на любой из дистрибутивов Linux, скорее, надуманы.

Qucs существует в версиях для всех общеупотребительных операционных систем: Windows, Linux, MacOS. Программа может использоваться и распространяться бесплатно в некоммерческих целях. Далеко не секрет, что программное обеспечение с момента появления компьютеров широкого применения существует и используется в виде «пиратских копий».

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

И т.д.

Предисловие

Микроконтроллер – это контроллер, регулирующее или управляющее устройство в электронике, в миниатюрном исполнении в виде одной микросхемы. Основу работы микроконтроллера составляет взаимодополнение процессора и программы.

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

По всей видимости, такой подход мешает начинающим осваивать программирование микроконтроллеров в программе FlowCode.

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

Отдельный предмет их беспокойства и первых действий в освоении микроконтроллеров создание программатора и поиск программы для обслуживания этого программатора.

Бесспорно, и знание устройства микроконтроллера, и программатор – все это нужно.

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

Найдется время и для изучения тех, нужных в данный момент, составляющих микроконтроллера, которые называются банками памяти или регистрами, модулями ШИМ, АЦП или USART.

Программа FlowCode – это среда разработки программы для микроконтроллеров двух популярных видов PIC и AVR. В этом смысле есть две программы, которые выглядят одинаково, но работают с выбранными микроконтроллерами, хотя есть возможность программу, написанную для PIC-контроллера, импортировать в программу для работы с AVR-контроллерами и наоборот. И т.п.

Источник: http://vgololobov.narod.ru/content/qucs_flowcode/qucs_flowcode.html

FlowCode для ARM | arm | programming

Источник: http://microsin.net/programming/arm/flowcode.html

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}
");let k=document.querySelector(".flat_pm_modal[data-id-modal=\""+a.ID+"\"]");if(-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(k,d):jQuery(k).html(b+d),"px"==a.how.popup.px_s)e.bind(h,()=>{e.scrollTop()>a.how.popup.after&&(e.unbind(h),f.unbind(i),j())}),void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{e.unbind(h),f.unbind(i),j()});else{let b=setTimeout(()=>{f.unbind(i),j()},1e3*a.how.popup.after);void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{clearTimeout(b),f.unbind(i),j()})}f.on("click",".flat_pm_modal .flat_pm_crs",()=>{jQuery.arcticmodal("close")})}if(void 0!==a.how.outgoing){let b,c="0"==a.how.outgoing.indent?"":" style=\"bottom:"+a.how.outgoing.indent+"px\"",e="true"==a.how.outgoing.cross?"":"",f=jQuery(window),g="scroll.out"+a.ID,h=void 0===flatPM_getCookie("flat_out_"+a.ID+"_mb")||"false"!=flatPM_getCookie("flat_out_"+a.ID+"_mb"),i=document.createElement("div"),j=jQuery("body"),k=()=>{void 0!==a.how.outgoing.cookie&&"false"==a.how.outgoing.cookie&&h&&(jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show"),j.on("click",".flat_pm_out[data-id-out=\""+a.ID+"\"] .flat_pm_crs",function(){flatPM_setCookie("flat_out_"+a.ID+"_mb",!1)})),(void 0===a.how.outgoing.cookie||"false"!=a.how.outgoing.cookie)&&jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show")};switch(a.how.outgoing.whence){case"1":b="top";break;case"2":b="bottom";break;case"3":b="left";break;case"4":b="right";}jQuery("body > *").eq(0).before("
"+e+"
");let m=document.querySelector(".flat_pm_out[data-id-out=\""+a.ID+"\"]");-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(m,d):jQuery(m).html(e+d),"px"==a.how.outgoing.px_s?f.bind(g,()=>{f.scrollTop()>a.how.outgoing.after&&(f.unbind(g),k())}):setTimeout(()=>{k()},1e3*a.how.outgoing.after),j.on("click",".flat_pm_out .flat_pm_crs",function(){jQuery(this).parent().removeClass("show").addClass("closed")})}countMode&&(flat_count["block_"+a.ID]={},flat_count["block_"+a.ID].count=1,flat_count["block_"+a.ID].click=0,flat_count["block_"+a.ID].id=a.ID)}catch(a){console.warn(a)}}function flatPM_start(){let a=flat_pm_arr.length;if(0==a)return flat_pm_arr=[],void jQuery(".flat_pm_start, .flat_pm_end").remove();flat_body=flat_body||jQuery("body"),!flat_counter&&countMode&&(flat_counter=!0,flat_body.on("click","[data-flat-id]",function(){let a=jQuery(this),b=a.attr("data-flat-id");flat_count["block_"+b].click++}),flat_body.on("mouseenter","[data-flat-id] iframe",function(){let a=jQuery(this),b=a.closest("[data-flat-id]").attr("data-flat-id");flat_iframe=b}).on("mouseleave","[data-flat-id] iframe",function(){flat_iframe=-1}),jQuery(window).on("beforeunload",()=>{jQuery.isEmptyObject(flat_count)||jQuery.ajax({async:!1,type:"POST",url:ajaxUrlFlatPM,dataType:"json",data:{action:"flat_pm_ajax",data_me:{method:"flat_pm_block_counter",arr:flat_count}}})}).on("blur",()=>{-1!=flat_iframe&&flat_count["block_"+flat_iframe].click++})),flat_userVars.init();for(let b=0;bflat_userVars.textlen||void 0!==a.chapter_sub&&a.chapter_subflat_userVars.titlelen||void 0!==a.title_sub&&a.title_subc&&cc&&c>d&&(b=flatPM_addDays(b,-1)),b>e||cd||c-1!=flat_userVars.referer.indexOf(a))||void 0!==a.referer.referer_disabled&&-1!=a.referer.referer_disabled.findIndex(a=>-1!=flat_userVars.referer.indexOf(a)))&&(c=!0),c||void 0===a.browser||(void 0===a.browser.browser_enabled||-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser))&&(void 0===a.browser.browser_disabled||-1==a.browser.browser_disabled.indexOf(flat_userVars.browser)))){if(c&&void 0!==a.browser&&void 0!==a.browser.browser_enabled&&-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser)&&(c=!1),!c&&(void 0!==a.geo||void 0!==a.role)&&(""==flat_userVars.ccode||""==flat_userVars.country||""==flat_userVars.city||""==flat_userVars.role)){flat_pm_then.push(a),flatPM_setWrap(a),flat_body.hasClass("flat_pm_block_geo_role")||(flat_body.addClass("flat_pm_block_geo_role"),flatPM_ajax("flat_pm_block_geo_role")),c=!0}c||(flatPM_setWrap(a),flatPM_next(a))}}}let b=jQuery(".flatPM_sticky");b.each(function(){let a=jQuery(this),b=a.data("height")||350,c=a.data("top");a.wrap("
");let d=a.parent()[0];flatPM_sticky(this,d,c)}),debugMode||countMode||jQuery("[data-flat-id]:not([data-id-out]):not([data-id-modal])").contents().unwrap(),flat_pm_arr=[],jQuery(".flat_pm_start, .flat_pm_end").remove()}

Это генератор кода программы, основанный на “квадратиках” стандартных блок-схем алгоритмов. Конечно, это не “киллер” C и C++ для написания программ, но рассмотреть такой вариант программирования очень интересно.

Сайт программы см. в [1]. Очень неплохая статья про FlowCode [2]. FlowCode поддерживает ARM, AVR и PIC. К сожалению, в версии, что я тестировал – Flowcode v3.4.7.

48 для ARM – я не нашел работы с USB. В новых версиях (Flowcode 4, которая на момент написания статьи – июнь 2009 – была только в версии для PIC) это должно поддерживаться, см. [4].

К сожалению, не поддерживается чип AT91SAM7X256 (на 100 ножек).

Установка программы не вызывает затруднений. Поле установки для быстрого ознакомления удобно открыть и позапускать примеры из папки “c:Program FilesMatrix MultimediaFlowcode_ARMExamples”.

В примерах рассмотрено мигание светодиодами, управление 7-сегментными индикаторами (одноразрядным и четырехразрядным), вывод на LCD-индикатор, подключенный к PORTA (индикатор на чипе Hitachi HD44780), чтение кнопок, формирование задержек, чтение ADC.

В новой версии (Flowcode 4) возможности впечатляют:

– поддерживаются интерфейсы I2C, SPI, RS232, Bluetooth, Zigbee, IrDA, CAN, LIN, TCP/IP, Webserver, USB, RFID, GPS.

Конечно, многое из этого списка было и в предыдущей версии. – имеются компоненты для LED, кнопок, выключателей, клавиатур, LCD, Graphical colour LCD, Graphical mono LCD, сенсоров, 7-сегментных дисплеев, внутренней EEPROM.

– можно рисовать переднюю панель для разрабатываемого прибора (!).

– поддерживаются следующие ARM: AT91SAM7S512, AT91SAM7S256, AT91SAM7S128, AT91SAM7S64, AT91SAM7S321, AT91SAM7S32, AT91SAM7S16, AT91SAM7S161, AT91SAM7SE32, AT91SAM7SE256, AT91SAM7SE512 (к сожалению, AT91SAM7X256 не поддерживается).

Из ответа Sean King, инженера Matrix Multimedia Ltd:

К сожалению, никакие отладочные средства FlowCode не поддерживает ни для ARM, ни для AVR. В данный момент (26 июня 2009) разрабатывается отладочное средство для PIC, и в будущем (наверное далеком) такая функциональность может быть добавлена в версии FlowCode для AVR и ARM.

Версии FlowCode для AVR и ARM используют в качестве штатного компилятора GCC, поэтому возможно получить отладочный код для отладки вне среды FlowCode. Для AVR тут все понятно – это AVR Studio, а что применять для ARM – непонятно.

В качестве программатора FlowCode для AVR использует по умолчанию AVRDUDE, но возможно использование следующих программаторов:

ABCmini Board, aka Dick Smith HOTCHIP Nightshade ALF-PgmAVR AT-ISP V1.1 programming cable for AVR-SDK1 AVR109 Boot Loader avr910 Atmel Low Cost Serial Programmer Atmel AVR ISP (an alias for stk500) Atmel AVR ISP mkII (alias for stk500v2) Bascom SAMPLE programming cable Altera ByteBlaster Brian Dean's Programmer Atmel Buttery Development Board c2n232i dasa serial port banging dasa3 serial port banging AVR Dragon Dontronics DT006 ERE ISP-AVR Frank's STK200 clone Futurlec.com programming cable Atmel JTAG ICE mkI Atmel JTAG ICE mkII Crossbow MIB510 programming board Jason Kyle's pAVR Serial Programmer Picoweb Programming Cable Pony Prog STK200 Lancos SI-Prog Steve Bolt's Programmer STK200 Atmel STK500 Atmel STK600 USBasp USBtiny simple USB programmer Xilinx JTAG cable

В качестве программатора для ARM FlowCode использует прямое соединение по USB, специальную программу и встроенный в чип bootloader. Возможно использование технологии SAM-BA для загрузки в чип hex-кода, сгенерированного в среде FlowCode.

[Ссылки]

1. Flowcode site:matrixmultimedia.com.
2. ПРОГРАММА FLOWCODE – полет первый site:elektron.ucoz.ru.
3. Дока на русском по FlowCode – FlowRU.pdf.
4. FlowCode USB site:matrixmultimedia.com.