Первое усовершенствование генератора – для новичков в радиоделе

April 10, 2014 by admin Комментировать »

Собрать генератор можно на более дешёвых микросхемах Чем привлекателен микроконтроллер

Микроконтроллер позволит нам достаточно просто менять частоту генератора Ради этого я добавил в проект переменную Сейчас я намерен менять эту переменную, которая будет менять частоту генератора

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

Добавим в наш проект кнопку (Switch в разделе Входы) Она появится на Панели

Рис 226 Добавление кнопки в проект

Если в окне свойств после выделения кнопки щёлкнуть правее надписи Расшир Св…, то появится диалоговое окно, в котором вы можете выбрать вид и модель кнопки

Рис 227 Диалоговое окно настройки кнопок

Выбрав тип кнопки (кнопка), способ переключения (я остановился на «возвратный»), полярность (то есть, что произойдёт, когда вы нажмёте кнопку, соединённую с входом, будет ли на входе высокий или низкий уровень), и добавил в графу Антидребезг 10 мс О проблемах дребезга мы, возможно, поговорим позже

В программу для опроса кнопки я должен добавить программный элемент Вход  (Input) Этот элемент я хочу соединить с выводом B0 микроконтроллера Для этого я обращаюсь к свойствам программного элемента, дважды щёлкнув по нему

Рис 228 Свойства программного элемента Вход

Но для работы этой программной конструкции требуется переменная Выше я описал один из способ ввести переменную в программу  Flowcode Вот  другой  способ: нажимаем кнопку Переменные в диалоге настройки программного компонента И попадаем в диалог добавления переменных и их изменений

Рис 229 Диалоговое окно работы с переменными

Нажимая кнопку Добавить новую… мы оказываемся в уже знакомом окне ввода имени и выбора типа переменной Я называю новую переменную input и выбираю  тип byte Остаётся нажать кнопку ОК в этом окне и Использовать в предыдущем

Каждое нажатие на добавленную в программу кнопку я хочу использовать для увеличения периода колебаний генератора Для этого после нажатия на кнопку переменная pause будет увеличиваться на 100 Эту операцию выполняет программный элемент Вычисление, в который добавлена запись pause = pause + 100

Вот вид программы, которую я намерен проверить

Программа в точности повторяет предыдущий вариант, если не считать программного элемента опроса кнопки (Вход), который меняет значение переменной input

Если кнопка нажата (я использую соединение с общим проводом), переменная input становится равна 0

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

Такой элемент есть в любом языке программирования: if…then.else

В программе Flowcode он называется  Условие В данном случае проверяется переменная input Если она равна нулю, выбирается ветвь Да, иначе ветвь Нет

Задержку в 500 мс я поставил на всякий случай Я использовал в настройках кнопки элемент устранения дребезга Но не знаю, работает он или нет Позже я, возможно, проверю это

Рис 2210 Вид полученной программы управления частотой генератора

Остаётся откомпилировать программу, а hex-файл загрузить в подготовленную программу ISIS

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

Рис 2211 Вид сигнала после первого нажатия кнопки

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

подчёркивал, что неожиданности могут подстерегать на каждом шагу И следует не бояться ошибок, но лишний раз (и он не будет лишним) заглянуть в описание, лишний раз подумать

Итак, я подозреваю, что проблема возникает при передаче значения в задержку переменной pause Если в пошаговом режиме выполнять отладку программы в Flowcode, наблюдая за переменной, то видно, что она меняет значение так, как мы и «заказывали» Вот, как это происходит (в свойствах кнопки её на время отладки следует определить как кнопку с фиксацией):

Рис 2212 Добавление переменной для наблюдения в пошаговом режиме отладки

Как и написано в окне наблюдения за переменными, правым щелчком кнопки мы вызываем выпадающее меню, где раздел Добавить переменную… открывает диалоговое окно выбора переменной Добавляем переменную pause

Нажав кнопку на Панели, и нажимая клавишу F8 на клавиатуре, можно наблюдать за изменениями переменной

Рис 2213 Изменение переменной после первого нажатия кнопки

Значение отображается правильно, поскольку мы выбрали тип переменной «целое» Но для этой переменной нужно два байта в памяти А, когда мы передаём эту переменную в переменную, опрделяющую задержку, то есть, передаём в процедуру, описывающую паузу, то, как мне кажется, мы передаём только один байт И это, похоже, началось уже тогда, когда я пытался перенастроить конфигурацию модуля Arduino Проверим мою догадку относительно передачи значения в процедуру задержки Для этого я использую предыдущий вид программы (без кнопки) Где вместо одной переменной pause, которой присваивал значение 500, я создам две

переменные pause1 и pause2, которым присвою значения по 250 Величина 250 помещается в один байт

Если моё предположение верно, то в программе ISIS (и в «живом виде») мы должны получить период 500 мкс, а частоту 1 кГц

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

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

А,   чтобы   получить   длительность   импульса   500   мкс,   мы   используем   обе переменные

Остаётся оттранслировать программу и проверить её

Рис 2214 Программа проверки заданной частоты в новой программе

В программе ISIS проверка даёт:

Рис 2215 Результат проверки в программе ISIS

Пять делений при заданном значении 100мкс/дел, даёт искомые 500 мкс Загружаю программу в модуль Arduino, и подключаю осциллограф:

Рис 2216 Осциллограмма «живого» эксперимента

Чтобы показать первое усовершенствование, не обязательно нужно было использовать начальную частоту 1 кГц (период 1 мс) Но проблемы с паузой 500 мкс помогли нам разобраться и с тем, что не получилось у нас раньше И был повод поговорить о конфигурации микроконтроллера, о правильном задании этой конфигурации в программе Flowcode (в двух местах программы) и в программе ISIS (в свойствах МК) Чтобы сейчас не увеличивать количество переменных, я использую начальное значение 1 мс, поправив программу «с кнопкой»

Я отметил на рисунке сделанные изменения, то есть изначально переменная имеет значение 1, а задержка при формировании импульса измеряется в миллисекундах

Вычисление в ветви программы «Да» изменено так: pause = pause + 1 На рисунке отмечена ещё одна задержка в 500 мс Поговорим о ней

Практически все кнопки имеют контакты, которые пружинят Когда вы нажимаете кнопку или отпускаете её, возникает эффект дребезга – многократное повторение состояний замкнуто-разомкнуто Но  мы хотим получить однократное замыкание Для этого принимают меры по устранению дребезга контактов

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

Рис 2217 Программа для дальнейшей работы

И вот как выглядит сигнал после однократного нажатия на кнопку в программе ISIS

Рис 2218 Проверка программы в ISIS

Теперь, как и положено, длительность импульса 2 мс Теперь, как и положено, каждое нажатие на кнопку увеличивает длительность на 1 мс, то есть, уменьшает частоту генератора И ещё одно замечание: резистор R1 на рисунке выше, зачем он

Цифровые входы, в общем-то, могут «висеть в воздухе» В любой цифровой микросхеме не используемые входы советуют соединять с землёй или с плюсом питающего напряжения Микроконтроллеры не исключение У многих (если не у всех) есть встроенные резисторы, с помощью которых вы можете соединить цифровой вход с землёй или с плюсом питания Делается это заданием бита (или нескольких битов) в специальном регистре

Поскольку я не знаю, задаётся ли это «по умолчанию» я подключил цифровой вход к питающему напряжению явно через резистор R1

В программе ISIS вы можете пощёлкать кнопкой, чтобы убедиться, каждый щелчок увеличивает длительность импульса на 1 мс

Следующее усовершенствование напрашивается само собой: добавить ещё одну кнопку, которая будет уменьшать длительность импульса

В программе для этой цели мы добавим ещё одну переменную для опроса второй кнопки, добавим ещё один программный элемент Вход (где вторая кнопка и опрашивается) и добавим ещё одно ветвление программы для изменения переменной pause

Ниже я приведу вид программы и вид проверки программы в ISIS

Мы получили генератор, у которого можно перестраивать частоту Это то преимущество, которое даёт микроконтроллер Нам достаточно двух кнопок и  микросхемы, чтобы иметь в своём распоряжении очень полезное устройство

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

Рис 2219 Вид новой программы и вид проверки её работы в ISIS

Источник: Гололобов ВН,- Самоучитель игры на паяльнике (Об электронике для школьников и не только), – Москва 2012

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

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