Генератор на ардуино flprog

Генератор меандра 31-32767 Гц

Генератор нарисован в программе FLProg в версии 1.10.2
В проекте используется LCD шилд. Сигнал с генератора выводится на D2.

Настройка частоты, включение и отключение осуществляется кнопками:

Кнопка “select” – включение/отключение генератора.
Кнопки “up” и “down” – настройка частоты +/-
Кнопки “left” и “right” – навигация по меню.

Меню 1:

увеличение/уменьшение частоты на 1Гц.

Меню 2:

увеличение/уменьшение частоты на 10Гц.

Меню 3:

увеличение/уменьшение частоты на 100Гц.

Меню 4:

увеличение/уменьшение частоты на 1000Гц.

Программа на языке FBD и разделена на 5 плат.
Все платы нарисованы предельно просто, все кроме платы №4.
Для меня эта плата, была настоящей головоломкой, возможно для неё есть более простое решение.

В программе используется функция Tone (), в которой по документации реализован вывод частоты от 31 до 65535 Гц,
К сожалению в программе FLProg, блок BUZZER позволяет подключить по входу только переменную Integer,
в которой максимально возможное число 32767.

Благодарю Сергея Глушенко за программу FLProg и от всей души, желаю ему всего самого и самого наилучшего!

Источник

Программирование без программирования!

С Новым Годом всех пользователей сайта www.samosdel.ru! После небольшого затишья продолжаю обучение программированию на Ардуино. Друг прислал ссылку на один довольно интересный ресурс по программированию Ардуино в оболочке которая используется при программировании производственных микроконтроллеров типа Fatek и им подобных. Это визуальное программирование и позволяет обойтись совершенно без написания кода! Т.е. берете блоки, соединяете их между собой, выставляете условия и заливаете в Ардуино! Все, скетч написан! Для получения информации рекомендую посетить сайт http://flprog.ru/ и скачать саму программу. На этом же сайте есть и подробные видеоуроки, я посмотрел всего лишь один, о подключении дисплея 1602 и часов точного времени. Что скажу- все великолепно за исключением нескольких НО. Но об этом попозже. Итак, мой первый опыт в написании первого урока- blink. Сразу хочу заметить, что хотя я и посмотрел видеоурок но запомнил не все и кое в чем приходилось доходить уже самому. Но об моих ошибках и изысканиях все изложу по ходу дела.

Интерфейс FLProg После установки программы я, естественно, запустил её. Открылся вот такой интерфейс:

Выбор контроллера FLProg Жмем меню Файл- Новый (можно также нажать пиктограмму чистого листа под меню Файл), открывается следующее окно где я должен выбрать свою плату:

Выбор контроллера в FLProg

Жмем кнопку с тремя точками и открывается окно с выбором типа контроллера где и выбираю имеющийся у меня Arduino Uno

Щелкаем Выбрать и Готово.

Наконец открывается главный интерфейс программы:

Программирование FLProg Рабочий стол FLProg Понадеявшись на свою память начал перебирать вкладки устройств справа внизу… Попробовал триггеры, счетчики и им же подобные… не то, неожиданно понял что мне нужен простой генератор! Открыл вкладку Таймеры, схватил объект Generator и бросил его в нижнее среднее окно, именно эта область в программе предназначена для комбинирования и соединения блоков. Дважды щелкнул по объекту и открылось следующее окно:

Генератор в FRProg

Пришлось немного потратить время на исследование данного объекта и вот что я выяснил: для подробного описания объекта достаточно перейти на вкладку Информация. Выбираем тип генератора. Тут представлены 3 типа:

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

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

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

Окно несимметричного генератора FLProg После выбора нужного генератора (симметричного или несимметричного) необходимо заполнить поля констант: при симметричном время горения светодиода будет равно времени паузы, при несимметричном- время горения и паузы разное, хотя можете поставить и одинаковое- получите симметричный мультивибратор

Пример настройки несимметричного мультивибратора Я задал вот такие параметры. Т.е. светодиод будет гореть 0,5 сек и пауза между свечением- 1 сек. На этом настройка генератора завершена. Переходим к выбору выходного пина. Т.к. заморачиваться с подключением светодиодов не хотелось то решил обойтись светодиодом на 13 пине. Ну как и в стандартном blink.

Создание выхода FLProg Для этого переходим в верхнее окно программы,

Настройка выхода FLProg

жмем дважды Добавить выход и в диалоговом окне выбираем такие данные.

Вы можете задать свои собственные имена и описание. Жмем Готово и переходим собственно к самому «программированию».

Мультивибратор и выход FLProg Перетаскиваем созданный порт в нижнюю часть интерфейса,

Проверка проекта в FLProg затем подводим курсор к левой стороне блока Led_13, появится рыжая полоска сбоку как показано на рисунке, щелкаем на ней и не отпуская кнопки соединяем с выводом Q мультивибратора. Все, мы подключили выход мультивибратора к выходу 13 Arduino UNO! Теперь давайте проверим- все ли правильно мы сделали. Для этого жмем кнопку с зеленой галочкой под меню Настройки.

Ошибка проверки FLProg Почему то вылетает вот такое сообщение. Настройка запуска мультивибратора FLProg

Давайте разбираться. По идее все сделали правильно: сделали генератор, подключили к выводу светодиод и все должно работать. В радиолюбительстве все так и должно было бы получиться но в данном случае есть одно НО. В данной программе необходимо указать мультивибратору чтобы он начал работу (проще говоря подать питание) о чем и говорит ошибка на плате №1. Для этого подводим курсор к левой части мультивибратора, вывод EN (наверное Enable что означает Доступность), кликаем ПРАВОЙ кнопкой мыши, выбираем Вставить константу и выпрыгивает вот такое окно.

Открытие файла FLProg на моем компьютере

В нем указываем только один параметр- TRUE и жмем Готово. Проверяем еще раз проект.Наконец вылетает надпись что проект корректен! Сохраняем его. Почему то программа сохраняет проект в формате *FLP, что для тех кто пишет музыку на компьютере программой Frutti Loops несколько «нехорошо», т.к. эти программы используют одни и те же расширения. По крайней мере у меня попытка загрузки файла в FLProg выглядит вот так.

Но с этим можно смириться, тем более что я программу FLProg просто удалю после этого урока. Что ж, скетч «написан», осталось залить его в Ардуину.

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

Теперь давайте посмотрим что же скомпилировала нам данная программа? Смотрим листинг:

bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
void setup()
<
pinMode(13, OUTPUT);

>
bool _isTimer(unsigned long startTime, unsigned long period )
<
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) =(startTime + period));> else =(4294967295-startTime+period));>
>

Столько наворочала FLProg что разобраться «с лету» практически невозможно! Жмем Вгрузить (почему именно так написано- непонятно), скетч заливается и Arduino начинает бодренько мигать светодиодом по нашему скетчу!

Ну а теперь причины почему я все таки откажусь от этой визуально-ориентированной программы для Arduino:

Занимаемое место blink в FLProg

  1. Размер скетча. В данном виде скетч занял:Занимаемое место blink в FLProg1178 Байт +15 Байт под глобальные переменные. Итого 1192 Байта. Вроде небольшая разница по сравнению с обычным blink на delay (1082 Байта) и без delay (1018 Байт). Но просто помигать светодиодом да еще и с использованием глобальных переменных… это жирно я бы сказал. Что же будет с размером программы когда надо будет подключить что то более серьезное?
  2. Все таки непонятно что наворочала FLProg при компиляции проекта. Нет, все работает без слов, но чтобы что то исправить придется опять лезть в FLProg и менять условия уже там а не в Arduino IDE. Иначе просто запутаешься в условиях.
  3. Для самообразования вещь несомненно полезная, но только на начальных порах и если надо что то сделать ну очень быстро. Кстати я бы советовал не заморачиваться с FLProg а начинать самостоятельно изучать Си- так и пользы больше и время сбережете. По любому потратите время на изучение FLProg, лучше начните с малого но понятного.
  4. Я хочу знать в коде где, что и как обрабатывается а не просто тупо смотреть на условия и гадать где поставить вывод в порт для отслеживания ошибки.

Удаление FLProg Вобщем при всех своих достоинствах программа имеет свои плюхи. Поэтому… А будете вы ей пользоваться или нет- решать уже только Вам.

Спасибо за внимание.

2 thoughts on “ Программирование без программирования! ”

Постараюсь ответить на Ваши вопросы (я автор программы)
1. Как Вы понимаете сравнивать блинк на delay с результатом работы FLProg не корректно, поскольку блинк кроме мигания светодиодом ничего делать не может. Он останавливает выполнение программы на время паузы и горения. Для того что бы делать что то ещё необходимы программные таймеры. Отсюда и глобальные переменные (а где ещё хранить время включения/выключения светодиода).
2. Программа расчитанна для пользователей не знакомых с языком C поэтому не очень важно что она генерит не очень читаемый скетчь. В программе даже есть режим когда прошивка заливается из среды FLProg напрямую в контроллер без открытия Arduino — IDE. Вы же не изучаете HEX файл и не правите в нём битики. Ну и здесь так же.
3.Используя FLProg не обязательно вообще изучать C. И это могут подтвердить пользователи программы. Если Вы зайдёте на форум программы — Вы увидите это. С появлением возможности написания пользовательских блоков на С, те пользователи которые разбираются в языке С могут написать практически любые блоки, для любого оборудования. Ну а те кто не знает языка, используют их. Кстати обратите внимание, что достаточно много пользователей уже знают язык С, но всё равно пользуются FLProg, поскольку удобнее.
4. Смотри пункт 2.

Извините если обидел. Я нисколько не умаляю Ваших трудов, способностей и стремления. Я просто выдал свою точку зрения на данную программу и не призываю всех и каждого переходить чисто на С. Я привел пример моей работы в данной программе и показал что мне понравилось и НЕ понравилось. Принять или не принять данную точку зрения- это дело лично каждого. На п.1 скажу так- можно обойтись и без delay, вообще мой друг очень плотно подсел на МК и на 45 тиньке такие вещи творит- я просто диву даюсь. Оказывается 32 кБ- это столько места что хватит еще 95 винду поставить! Отвечу на Ваш п.2- я согласен с тем что для тех кто не знает языка это просто грааль, но давайте копнем глубже. Если начинать вообще с нуля то придется объяснять что такое блоки (их у вас очень много, хотя так и должно быть, на самом деле задач может быть много и библиотека тоже должна быть соответствующей), как они будут между собой работать и т.д. Согласитесь что на понятие и освоение тоже уйдет достаточное количество времени? Получается что мы тут буквально половыми органами меряемся- у кого лучше. Хотя забываем что параметров куча и объективно оценить… Да есть здоровские плюхи навроде синхронизации времени на DS1307 и т.д. Я согласен с многими Вашими доводами и обиду на мое высказывание что я такой программой пользоваться не буду. Вы же старались, делали её наподобие многих промышленных программ, я скажу прямо- молодец. Это без шуток, потому что сам работал (и в какой то степени до сих пор работаю)программистом и знаю какой это тяжелый труд. Не побоялся угрохать столько сил и времени на разработку и отладку такой программы НО. Как я и писал выше, я хочу знать КАК работает программа. И не искать ошибки в блоках. Как говорится сам написал, сам оптимизировал и т.д. Тот же мой друг сейчас старается вовсю снизить энергопотребление МК и дошел практически до значений саморазряда литиевых батарей! Так что вопрос энергопотребления сейчас первоочередной и только потом уже идет функционал. Не в обиду было сказано и если обидел то прошу прощения но- это мое мнение. Спасибо за внимание, понимание и программу.

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

Для отправки комментария вам необходимо авторизоваться.

Источник

Adblock
detector