Зібрати генератор можна на дешевших мікросхемах Чим привабливий мікроконтроллер

Мікроконтролер дозволить нам достатньо просто змінювати частоту генератора Заради цього я додав в проект змінну Зараз я маю намір змінювати цю змінну, яка буде міняти частоту генератора

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

Додамо в наш проект кнопку (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