Перейти к содержанию

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


Lihouzov

Рекомендуемые сообщения

Программный комплекс 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 блоков и объединения их в схему. Что избавит многих от написания кода и подвигнет многих радиолюбителей к творчеству.

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

Изменено пользователем Lihouzov
Ссылка на комментарий
Поделиться на другие сайты

Flowcode...

> Правила форума <

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

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

Ссылка на комментарий
Поделиться на другие сайты

Codesis, Flowcode, Step7.... Немного смахивает на LadderLogic.

Изменено пользователем chip-chip

Все можно наладить, если вертеть в руках достаточно долго!

Если ничто другое не помогает, прочтите, наконец, инструкцию!

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

Из 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

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

Реализация:

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

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

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

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

H8mbSRTT_pE.jpg

Изменено пользователем Lihouzov
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

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

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

Изменено пользователем Lihouzov
Ссылка на комментарий
Поделиться на другие сайты

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

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

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

Залил проект в контроллер, не пошло. Не пишется данные в 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 данные не записаны.

Почему???

Ссылка на комментарий
Поделиться на другие сайты

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

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).

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

.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 записывается какая то ерунда.

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

Ссылка на комментарий
Поделиться на другие сайты

1. Извиняюсь, в записи

2. ОК

3. EESAVE все же проверьте

Что за контроллер, ATtiny2313?

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

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

Изменено пользователем Lihouzov
Ссылка на комментарий
Поделиться на другие сайты

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

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Пример реализации 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 контроллер нет в наличии. Если у кого есть возможность проверить работу программы, пишите.

Изменено пользователем Lihouzov
Ссылка на комментарий
Поделиться на другие сайты

Скачал 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:

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

Изменено пользователем Lihouzov
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Когда снова появился интерес к усилителям, тоже хотел всех обмануть, попробовал 7294 в разных схемах, 3886 тоже несколько способов приготовления, вроде и неплохо играет, если ничего другого не слушал, годится. Но червячок сподвиг сделать Натали Хоум, УХ! челюсть отвисла, наслушаться не мог, узнал, что такое сцена в звуке, динамика, детальность, да всё лучше. Вот я всегда и спрашиваю, по сравнению с какими другими УМ играет хорошо расхваливаемый усилитель.
    • @Armenn Хорошо. Сделал резистор на 5 Ом.  Результата два. 1. Если включить блок питания в сеть, а уже потом подключить резистор на 5 Ом в фиолетовый провод, тогда резистор просто будет греться.  2. Если подключить резистор на 5 Ом в фиолетовый провод, а уже потом включить блок питания в сеть, тогда случится следующее: лампочка предохранителя от КЗ засветится (через которую я подключаю БП в сеть), а блок питания начнет пищать. Заснял это на видео -   
    • Ну-вы и сравнили. Вот когда будете строить сварочный инвертор на такую частоту-то там нужно  будет учитывать скин эффект. А на частоты до 75кгц-можно забить, отбить и не принимать во внимание. Тем более-что все стараются аппараты до 200А строить. На кольце плотность тока до 15А на мм ^2, на Ш от 10А на  мм^2 А вентилятор-он все лишние тепло сдует ко льдам в Антарктиде. Проверьте монолит 2,12мм, я таким мотаю СТ. Интересно-что там с ним делается на частотах от 30 до 50кГц? Длинна провода примерно 2 метра-На сердечник Е70 влазит 18 витков
    • Добрый вечер всем!  Проблема следующая: Есть флешка с записанной файловой системой через USB MASS STORAGE DEVICES. При "втыкании"  в порт USB открывается на ПК диск с содержимым. Я подключил библиотеку Fatfs и прописал низкоуровневые функции чтения и записи в файле diskio.c Работаю с файлом так:   disk_initialize(SDFatFs.drv); if(f_mount(&SDFatFs,(TCHAR const*)USER_Path,0)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_f_mount!\r\n"); } else { if(f_open(&MyFile,"01.WAV",FA_READ)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_open_File1!\r\n"); } else { Usart1_Send_String("open_File_OK1!\r\n"); } if(f_open(&MyFile,"01.wav",FA_READ)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_open_File2!\r\n"); } else { Usart1_Send_String("open_File_OK2!\r\n"); UINT testBytes=0; f_read(&MyFile, buff1, 512, &testBytes); sprintf(buf1, "TestBytes=%d\r\n", testBytes); Usart1_Send_String(buf1); Usart1_Send_hex((char*)buff1, 512); Usart1_Send_String("read_File_complite!\r\n"); f_close(&MyFile); } } подправил diskio.c так:   DRESULT disk_read ( BYTE pdrv, /* Physical drive nmuber to identify the drive */ BYTE *buff, /* Data buffer to store read data */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to read */ ) { DRESULT res; //res = disk.drv[pdrv]->disk_read(disk.lun[pdrv], buff, sector, count); sprintf(buffer0, "sector=%lu\r\n", sector); Usart1_Send_String(buffer0); w25qReadPage(buff, sector*2); w25qReadPage(buff + 256, sector*2+256); res=RES_OK; return res; } #if _USE_WRITE == 1 DRESULT disk_write ( BYTE pdrv, /* Physical drive nmuber to identify the drive */ const BYTE *buff, /* Data to be written */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to write */ ) { DRESULT res; //res = disk.drv[pdrv]->disk_write(disk.lun[pdrv], buff, sector, count); w25qWritingByUSB(sector, (uint8_t*)buff); res=RES_OK; return res; } #endif /* _USE_WRITE == 1 */ функцию чтения на самом деле пробовал прописывать по разному, все равно не корректно работает... Выдает в отладке такое:   Program start!.... sector=0 // это обращение к функции чтения DRESULT disk_read (); Error_open_File1! sector=0 // это обращение к функции чтения DRESULT disk_read (); Error_open_File2! Что я забыл еще добавить?
    • В былые годы запрещалось размещать на форуме бессмысленные темы. Видать, с тех пор правила существенно изменились.
    • скачай новый архив. там есть важные изменения в комповой программе, по сравнению с той, что я отправлял в личке. исправлены недоделки и добавлены проверки на некорректные действия.
  • Похожий контент

×
×
  • Создать...