Lihouzov

Реализация Графического Языка Программирования Для Avr Контроллеров.

267 posts in this topic

Lihouzov    11

Программный комплекс Horizont

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

Программный комплекс включает в себя:

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

Configurator- среда конфигурирования использующая графический язык программирования FBD (Function Block Diagram). Configurator позволяет создать, сохранить, изменить существующий проект, а также по существующему проекту создать файл конфигурации. Также содержаться инструменты для отладки проекта.

Работа проекта:

CTuwDK1qOf0.jpg

Установочный пакет программы Configurator.

Итог:

1. Написал ядро исполнительной программы.

2. Добавил описание FBD блоков

-Порты ввода-вывода;

-Логические блоки (и,или,не,исключающее и,больше);

-константа логическая, константа целочисленная, генератор логический;

-Таймер, фильтр;

-Несколько вариантов ШИМ.

3. Добавил возможность как создания собственных FBD блоков, так и добавление новых типов

контроллеров без перекомпиляции программы Configurator. Для этого необходим лишь текстовый

редактор.

4. В программе Configurator появилась возможность компиляции проекта. Configurator создает

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

является исполняемый двоичный файл.

5. Добавил несколько типов микроконтроллеров

-AT90S2313

-ATtiny13A

6. Собрал демонстрационный проект "управление дневными ходовыми огнями".

Перспективы:

1. Добавление новых типов микроконтроллеров, описание новых FBD блоков.

2. Добавить поддержку режима отладки. В режиме отладки Configurator подключается к

исполнительной программе, проверяет соответствие конфигурации в исполнительной программе и

текущем проекте, отображает данные входных выходных значений FBD блоков в реальном времени.

3. Добавить описание FBD блоков для связи со SCADA системами (AVR микроконтроллеры и SCADA системы).

Задача:

Реализация исполнительной программы для AVR контроллеров.

Приведу пример возможного проекта "Управления дневными ходовыми огнями".

9mJI0_y0dmQ.jpg

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

1. Напряжение бортовой сети выше 13,5 вольт. (заведенный двигатель)

2. Обороты двигателя выше 1200 (не холостой ход)

Процесс написания программ для контроллера сведется к добавлению на лист проекта нужных FBD блоков и объединения их в схему. Что избавит многих от написания кода и подвигнет многих радиолюбителей к творчеству.

Ищу заинтересованных людей.

Edited by Lihouzov

Share this post


Link to post
Share on other sites

Опорное решение: компоненты для защиты RS-485

Компания Bourns анонсировала новую (4-ю) версию демонстрационной платы для тестирования защиты низковольтных слаботочных цепей от токовых перегрузок и импульсных перенапряжений, в частности, для защиты интерфейса RS-485. Мы собрали для вас всю самую интересную информацию по данной теме на одной странице.

Подробнее...

mxroman    3

LOGO... Затея конечно хорошая но думаю не нужная в данном случае, в контроллере очень много перефирии и задач которые чтобы сделать на граф языке очень много сил потребуется чтобы это реализовать... Не задумывались почему сам производитель Atmel не стал делать или другая фирма... Да потому что это не нужный вклад денег в разработку такого ПО... Если вы хотите подвинуть к творчеству радиолюбителей то пусть ребята изучают язык СИ.. Он также понятен тех у кого всё впорядке с логикой...

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

Буду следить за развитием, очень интересно что у вас получится...

Share this post


Link to post
Share on other sites
Lihouzov    11

Исполнительную программу буду отлаживать с приведенным выше примером.

Из AVR контроллеров у меня имеется AT90S2313, AT90S8535, ATMEGA8535.

Приблизительный расчет используемых ресурсов:

Оценим размер файла конфигурации для вышеприведенной схемы:

1. заголовок файла:

"hr" 2 байта (сокращение от Horizont runtime)

Lines 1 байт (число используемых узлов, максимум 255)

2. описание FBD блоков

вход 3+1 байта (1 байт привязка к узлу, 1 байт порт, 1 байт номер вывода)

вход 3+1 байта (1 байт привязка к узлу, 1 байт порт, 1 байт номер вывода)

вход АЦП 6+1 байта (1 байт привязка к узлу, 1 байт номер вывода, 4 байта внутренние данные)

Константа 3+1 байта (1 байт привязка к узлу, 2 байта значение константы)

частот. 8+1 байта (1 байт вход, 1 байт выход, 6 байт внутренние данные)

больше 3+1 байта (2 байта входа, 1 байт выход)

больше 3+1 байта (2 байта входа, 1 байт выход)

блок И 3+1 байта (2 байта входа, 1 байт выход)

выход 3+1 байта (1 байт привязка к узлу, 1 байт порт, 1 байт номер вывода)

------------------------------------------

47 байт Приблизительный размер файла конфигурации

Требуемый объем оперативной памяти:

1. данные узловых переменных 8*2=16 байт ()

2. данные FBD блоков

ADC- 4 байта

freq- 6 байта

------------------------------------------

26 байт оперативной памяти

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

Среда разработки исполнительной программы AVR studio 5.1

Share this post


Link to post
Share on other sites

Видео вебинара «Уникальный подход MORNSUN к разработке DC/DC-преобразователей. Что на выходе?»

На сайте КОМПЭЛ доступны материалы вебинара, посвященные последнему поколению DC/DC преобразователей с фиксированным входом R3 от MORNSUN. Вы можете посмотреть видеозапись, ознакомиться с презентацией и ответами на вопросы.

Подробнее...

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

Позднова-то. Он уже снят с производства.

Share this post


Link to post
Share on other sites
Lihouzov    11

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

Позднова-то. Он уже снят с производства.

Я не буду привязываться к функциональным блокам микроконтроллера, а так как набор ассемблерных команд один и тот же что у tini и mega то значить и программа легко перенесется на другие контроллеры. А если удастся сделать на достаточно слабом (немного оперативной памяти, маленькая flash и eeprom) то будет шикарно.

Share this post


Link to post
Share on other sites
Lihouzov    11

Реализация:

1. Ядро программы и описание функций всех FBD блоков будет во flash памяти

2. Значение узловых переменных и данные FBD блоков (если необходимо для реализации блока) в RAM

3. Файл конфигурации будет храниться в EEPROM

Упрощенная схема работы исполнительной программы:

H8mbSRTT_pE.jpg

Edited by Lihouzov

Share this post


Link to post
Share on other sites

...а так как набор ассемблерных команд один и тот же что у tini и mega...

Отнюдь, у Тинек набор много беднее, чем у Мег.

Share this post


Link to post
Share on other sites
COKPOWEHEU    273

Что будет храниться в контроллере, "исходный код" или полученная из него прошивка? Вообще-то логичнее хранить прошивку: не так много памяти и быстродействия чтобы позволить себе содержать виртуальную машину со своим языком, да еще графическим. Контроллеру, в большинстве случаев, и отображать-то его негде. Для разработки же прошивки (*.hex файла, грубо говоря) изобретать свой графический "язык" тоже странно, вроде же существуют flowcode или еще что в этом же роде.

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

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

Внешний вид исходной диаграммы, "исходного кода", в среде разработки. Даже у относительно простой программы блок-диаграмма получается достаточно громоздкой, это ведь и инициализация всего подряд, и циклы, и ветвления, и прерывания. Должны быть средства визуально уменьшить занимаемый объем диаграммы без увеличения количества соединительных линий. В том же Labview есть структуры циклов и последовательностей так называемых кадров, выполняющихся по очереди. Однако, с минимизацией количества связей они не справились: либо тащить каждую интересующую линию отдельно, тогда она будет видна на всех вкладках, в то время, как нужна только на следующей, либо объединять в структуры, тогда, при изменении этой структуры, приходится лазить по всем вкладкам и исправлять ее. В классических языках программирования (ЯП) с этим проще: область видимости переменных легко задается и, в то же время, визуально не загораживает код.

Внешний вид диаграммы вне среды разработки. Можно ли будет писать программы на бумажке и быстро переносить их на целевое устройство? Скорее всего, нет: расстановка компонентов мышью гораздо медленнее печати текста, не говоря уж о сложных конструкциях, где на одном месте экрана могут быть разные комбинации элементов (аналогия с вкладками во многих программах).

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

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

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

Простота. "Интуитивная понятность" интерфейса и "языка" это, конечно, хорошо, но вряд ли достижимо. Всегда есть какие-то особенности, которые придется учить специально (пример из Labview - перевод числа в строку. На первый взгляд неочевидно, что это всего лишь видоизмененный sprintf() и, тем более неочевидно, откуда брать обозначения для различных типов данных, целочисленное там, символьное, строковое, %d,%с,%s соответственно. Не все изучали Си).

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

Универсальность. У каждого контроллера свои интерфейсы ввода-вывода. Разное количество портов, разные модули (у той же AT90S2313, да и у ATmega8515 нет встроенной шины I2C, а у какой-нибудь ATmega8 есть)

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

Стандартные библиотеки. Поскольку "язык" новый - придется писать все с нуля.

В общем, о графических языках программирования я невысокого мнения и предостерегаю от повторения известных ошибок и недостатков.

Share this post


Link to post
Share on other sites
Lihouzov    11

В контроллере будет храниться:

1. исполнительная программа во flash памяти.

2. файл конфигурации в EEPROM памяти.

Контроллер не хранит никакого графического интерпритатора или виртуальной машины. Файл конфигурации это последовательность FBD блоков.

Среда разработки Configurator работает с пользователем, позволяет сформировать нужную схему, в дальнейшем по данной схеме создается файл конфигурации и заливается в EEPROM контроллера.

Первая реализация исполнительной программы: https://sites.google.../runtime/hr_avr, в дальнейшем данные файлы я постараюсь обновлять.

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

Edited by Lihouzov

Share this post


Link to post
Share on other sites
COKPOWEHEU    273

"исполнительная программа", которая во flash-памяти, по сути и есть виртуальная машина, она же интерпретатор блок-схемы. А уж как она хранится - не так уж важно.

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

Share this post


Link to post
Share on other sites
Lihouzov    11

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

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

Плюсы в том что:

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

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

Share this post


Link to post
Share on other sites
COKPOWEHEU    273
На счет байт памяти. Какая разница какая размером программа 300 байт или 2 килобайта
У той же AT90S2313 всего 2 кБайта флеша, а EEPROM'а и вовсе 128 байт, может и не влезть, я уж не говорю про какую-нибудь ATtiny11.

Насчет плюсов. Я же не предлагал давать пользователю сразу ассемблер, например (хотя, предлагал, конечно, вот только тема не об этом). Саму IDE можно заставить выдавать файл прошивки. Так, прошивкой, и хранить в контроллере, все равно считать FBD-диаграмму бе зпотерь не получится, если не хранить координаты блоков на "листе" а на такое памяти точно не хватит. То есть сделать по типу классических компиляторов - со своего "языка", пусть и графического, в файл прошивки. Тогда надежность будет определяться багами компилятора и формой рук пользователя: от неправильно сформулированного алгоритма никакой компилятор или интерпретатор не спасут.

Тоже кистати, вспомнил, это флеша в контроллерах достаточно, и то не всегда, а вот EEPROM как раз маленькая. Как вариант, можно воспользоваться самозагрузчиком (bootloader) чтобы в начале памяти хранить программу а в конце - интерпретатор.

Share this post


Link to post
Share on other sites
Lihouzov    11

IDE не создает исполнительную программу а, только файл конфигурации.

На данный момент исполнительная программа занимает 35% от флеш памяти AT90S2313 приблизительно 700 байт. Данная программа содержит само ядро и описание FBD блоков для работы с выводами контроллера.

Файл конфигурации для приведенного выше примера будет составлять около 80 байт. EEPROM у AT90S2313 128 байт.

Share this post


Link to post
Share on other sites
COKPOWEHEU    273

"Приведенный выше пример" это какой? Термостат, ходовые огни или еще что-то? На первый взгляд задача не слишком сложная а вот, уже больше половины (62,5%) памяти съедено.Что же будет на более-менее серьезных проектах?

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

Share this post


Link to post
Share on other sites

Универсальность. У каждого контроллера свои интерфейсы ввода-вывода. Разное количество портов, разные модули (у той же AT90S2313, да и у ATmega8515 нет встроенной шины I2C, а у какой-нибудь ATmega8 есть)

Добавлю, разный набор и таблицы векторов прерываний, разные размеры векторов прерываний. Разный состав таймеров и их модулей. Наличие/отсутствие ЦАП, TWI, JTAG, DebugWire, компараторов. Укороченный набор команд в семействе Attiny. Что еще... Различие в адресах и наборах служебных регистров.

Все это должна будет учесть ваша среда. И только ради лентяйства "программистов-неучек"? Ваше право! Но пока вы осваиваете все существующие МК (хотя бы AVR) их уже снимут с производства и забудут пользователи. А на новые разработки потребуется новая среда, т.к. слишком уж сильно отличаются новые МК от существующих и архитектурой, и программированием. Существующий пример тому подтверждение (пора бы забыть AT90S2313). Даже ее новый прототип Attiny2313 не полностью совместим с ней аппаратно.

Edited by Геннадий

Share this post


Link to post
Share on other sites
Lihouzov    11

Залил проект в контроллер, не пошло. Не пишется данные в EEPROM использую код:

//================ Работа с EEPROM =================
EEWrite:
//wdr ; Сброс сторожевого таймера
SBIC EECR,EEWE ; Ждем готовности памяти к записи. Крутимся в цикле
RJMP EEWrite ; до тех пор пока не очистится флаг EEWE

CLI ; Затем запрещаем прерывания.
#ifdef EEARH
OUT EEARL, Adr_EEPROM_L ; загружаем адрес нужной ячейки
OUT EEARH, Adr_EEPROM_H ; его старшие и младшие байты
#else
OUT EEAR, Adr_EEPROM_L ; загружаем адрес нужной ячейки
#endif
OUT EEDR,C ; и сами данные, которые нам нужно загрузить

SBI EECR,EEMWE ; взводим предохранитель
SBI EECR,EEWE ; записываем байт

SEI ; разрешаем прерывания
ADIW Adr_EEPROM_L, 1 ; перевод указателя
RET ; возврат из процедуры

EERead:
//wdr ; Сброс сторожевого таймера
SBIC EECR,EEWE ; Ждем пока будет завершена прошлая запись.
RJMP EERead ; также крутимся в цикле.
#ifdef EEARH
OUT EEARL, Adr_EEPROM_L ; загружаем адрес нужной ячейки
OUT EEARH, Adr_EEPROM_H ; его старшие и младшие байты
#else
OUT EEAR, Adr_EEPROM_L ; загружаем адрес нужной ячейки
#endif
SBI EECR,EERE ; Выставляем бит чтения
IN C, EEDR ; Забираем из регистра данных результат
ADIW Adr_EEPROM_L, 1 ; перевод указателя
RET

Функция переноса данных из flash в EEPROM:

Test_cfg:
   .DB 0x68,0x72,3,  4,2,1,0x09,  4,2,1,0x07,  3,5,2,  4,2,2,0x08, 0 
.equ Size_Test_cfg    = 50	  //Адрес начала конфигурации
EEWrite_Test_cfg:
  ldi A, Size_Test_cfg			  ; количество байт для переноса в EEPROM
  ldi Adr_flash_L, Low(Test_cfg*2)  ; адрес тестовой конфигурации во flash
  ldi Adr_flash_H, High(Test_cfg*2) ; адрес тестовой конфигурации во flash
  ldi Adr_EEPROM_L, Low(Addr_Cfg)   ; адрес тестовой конфигурации в EEPROM
  ldi Adr_EEPROM_H, High(Addr_Cfg)  ; адрес тестовой конфигурации в EEPROM
 loop_EEWrite:
  lpm C, Z+						 ; читаем flash
  rcall EEWrite					 ; пишем в EEPROM
  dec   A						   ; уменьшить
  brne  loop_EEWrite			    ; проверка записанных байт
RET					 ; возврат из процедуры

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

Почему???

Share this post


Link to post
Share on other sites
COKPOWEHEU    273

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

Test_cfg:
       .DB 0x68,0x72,3,  4,2,1,0x09,  4,2,1,0x07,  3,5,2,  4,2,2,0x08, 0
Test_cfg_end:
.equ Size_Test_cfg  = Test_cfg_end - Test_cfg      //Адрес начала конфигурации

Зачем sei в процедуре чтения?

Addr_flash соответствует регистру Z?

Можно проверить фуз-бит EESAVE, либо для отладки передавать считанные данные по UART например. Либо, хотя бы, считать какой-нибудь из записанных байтов и сравнить с константой, если не равно - зажечь светодиод ошибки (например, считать 2-й байт и сравнить с 0x72).

Share this post


Link to post
Share on other sites
Lihouzov    11

.equ Size_Test_cfg  = Test_cfg_end - Test_cfg	 //Адрес начала конфигурации

Грамотно, не догадался.

1. sei нет в процедуре чтения.

2. регистры

.def Adr_RAM_H	 = r27  //Указатель на оперативную память	   (X)
 .def Adr_RAM_L	 = r26  //Указатель на оперативную память	   (X)
 .def Adr_EEPROM_H = r29  //Указатель на энергонезависимую память (Y)
 .def Adr_EEPROM_L = r28  //Указатель на энергонезависимую память (Y)
 .def Adr_flash_H	 = r31  //Указатель flash памяти			    (Z)
 .def Adr_flash_L	 = r30  //Указатель flash памяти			    (Z)

3. Читаю результат программатором ChipProg, в EEPROM записывается какая то ерунда.

Может контроллер дохлый?

Share this post


Link to post
Share on other sites
Lihouzov    11

Спасибо разобрался, я заливал прошивку скомпилированную на ATtiny2313 в AT90S2313. Интересно то что AVR studio начиная с версии 5 больше не поддерживает AT90S2313. Приобрету ATtiny2313. Придется собрать собственный программатор для PonyProg, ChipProg не поддерживает ATtiny2313.

Edited by Lihouzov

Share this post


Link to post
Share on other sites
COKPOWEHEU    273

Тогда уж не на ATtiny2313 переходи а на что-нибудь поновее. Хотя бы ATmega48/88/168, вроде они самые компактные из мег.

Share this post


Link to post
Share on other sites
Lihouzov    11

Пример реализации FBD блока "генератор".

FBD Блок имеет один выход и четыре внутренних свойства:

- время высокого состояния

- время низкого состояния

- начальное состояние (высокое или низкое)

- начальное время данного состояния

6VGlHZdLBUk.jpg

Реализация блока

#ifndef _FBD5_
#define _FBD5_ FBD5
#message define FBD5 Generators __FILE__

//Размер описания FDB блока 5 байта
//1 байт- привязка к узлу
//1 байт- время высокого состояния
//1 байт- время низкого состояния
//1 байт- начальное состояние (высокое или низкое)
//1 байт- начальное время данного состояния
//Необходимый размер оперативной памяти
//1 байт- текущее состояние (высокое или низкое)
//1 байт- текущее время данного состояния

FBD5_init:
ADIW Adr_EEPROM_L, 3 ;пропускаем первые три байта конфигурации
rcall EERead ;Читаем начальное состояние
st X+, C ;Сохраняем начальное состояние
rcall EERead ;Читаем начальное начальное время
st X+, C ;Сохраняем начальное начальное время
ret ;Окончание инициализации блока

FBD5_run:
//======== Читаем данные блока из файла конфигураций =========
rcall EERead ;Привязку к узлу
mov B, C ;Привязка к узлу
rcall EERead ;время высокого состояния
mov E, C ;время высокого состояния
rcall EERead ;время низкого состояния
mov F, C ;время низкого состояния
ADIW Adr_EEPROM_L, 2 ;пропускаем два байта конфигурации
//========= Читаем данные блока из оперативной памяти =========
ld G, X+ ;текущее состояние
ld H, X ;текущее время данного состояния
//============= Логика работы FBD блока ==================
inc H ;Увеличиваем время данного состояния
breq FBD5_change_sost ;Сменить состояние
cp H, E ;Сравнить с временем низкого состояния
sbrs G, 0 ;Текущее состояние
cp H, F ;Сравнить с временем низкого состояния
brpl FBD5_change_sost ;Сменить состояние
st X+, H ;Сохраняем текущее время
rjmp FBD5_run_end; ;Переход
FBD5_change_sost:
inc G ;Меняем состояние
andi G, 0b00000001 ;Меняем состояние
clr H ;Установить время на ноль
st X, H ;Сохраняем текущее время
st -X, G ;Сохраняем текущее состояние
ADIW Adr_RAM_L, 2 ;Смещаем указатель на конец блока
FBD5_run_end:
clr Uz1H ;Устанавливаем значение узловой переменной
mov Uz1L, G ;Устанавливаем значение узловой переменной
rcall Save_Uz1 ;Сохраняем значение узла по индексу B
ret ;Окончание исполнения логики блока

FBD5:
.db 5, 2 //Размер FBD блока, необходимая оперативная память
.dw FBD5_run, FBD5_init
#else
#error redeclared FBD2 __FILE__
#endif

Чтобы исполнительная программа могла использовать данный блок достаточно к проекту подключить файл с описанием данного блока. Пример:

.include "FBD_pin.inc"		 //FBD блоки работы с ножками контроллера
.include "FBD_gen.inc"		 //FBD блоки источники (константы, генераторы)

где FBD_gen.inc содержит описание блока генератор.

Конфигурация для отладки данного блока:

.DB 0x68,0x72,3, 7,5,2,4,2,1,0, 7,5,0,4,2,0,0, 4,2,2,0x08, 0

7,5,2,4,2,1,0 -описание первой копии генератора

7,5,0,4,2,0,0 -описание второй копии генератора

4,2,2,0x08 -привязка к ножке контроллера

Файл конфигурации составляю вручную, в дальнейшем после оценки целесообразности я доработаю программу Configurator, добавлю поддержку AVR контроллеров.

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

Edited by Lihouzov

Share this post


Link to post
Share on other sites
Lihouzov    11

Скачал AVR studio 4, собрал проект для AT90S23213, добавил описание блока "логическое И".

Тестовая конфигурация:

-CFbs_eIrx0.jpg

По данной схеме составил файл конфигурации:

Test_cfg:
.DB 0x68,0x72,4, 7,5,0,4,2,1,0, 7,5,1,250,250,0,0, 4,2,0,8+0, 4,2,1,8+1, 4,2,2,0+7, 5,10,1,2,3, 4,2,3,8+2, 0
Test_cfg_end:

Прошил контроллер, РАБОТАЕТ!!!

Edited by Lihouzov

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Similar Content

    • By кип-сервис
      Продам новые комплектующие пневматического оборудования для систем автоматизации. Недорого. Цены по запросу.












    • By LegionKC
      Добрый день.
      Экспериментирую с платой TP4056 и MK ATmega8, конкретнее - пытаюсь собрать простенькое зарядное устройство с выводом параметров при зарядке/разрядке на АЦП МК. Для измерения тока нашел ACS712. Думаю, что получится выводить ток при зарядке (т.е. когда идет питание на TP4056 и нагрузка отключена) и при разрядке (питание выключено, нагрузка подключена). Нагрузка - резистор. Возникла проблема с измерением напряжения на АКБ. Вернее, проблема с отсутствием идей как это сделать. Может какую-нибудь схему делителя напряжения нужно сделать? Прошу помочь советом. Схему из пэинта прилагаю.
      Спасибо.
       

    • By кип-сервис
      В связи с закрытием склада, распродаю новые комплектующие для автоматизации: пневматика, реле, датчики, контроллеры и другое (Danfoss, Omron, Ifm, Esbe, Festo, SMC, Camozzi и др.)  Недорого! Подробности в ЛС. Цены по запросу.








    • Guest persej
      By Guest persej
      Нужна электрическая схема  платы управления CONTROL BOARD ZBK. именно электрическая принципиальная, а не  куда какие провода подсоединять как нарисовано в инструкции по монтажу.
      Плата не работает, а как её ремонтировать не зная электрической схемы?

    • By Cheshire Cat
      Здравствуйте, только начинаю изучать программирование мк. Я уже задавал этот вопрос в моих прошлых схемах мне отвечали что-то типа "любой стабилизрованый источник постоянного напряжения", или кидали схему такого источника. Можно назвать мне конкретное устройство? В общем то что я смогу забить в гугл и приписать купить. 

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