У попередніх розділах ми розглянули ряд питань, які могли б викликати труднощі при реалізації програми перебудовується генератора прямокутних імпульсів

Зараз ми озброєні достатньо, щоб завершити побудову програми Ми визначилися з тими обмеженнями, які можуть виникнути, і вибрали компромісне рішення Але, як завжди, я віддаю перевагу описати програму на звичайній мові, приділяючи увагу тому, які дії я буду здійснювати, коли пристрій запрацює

Опис дій, включаються в програму:

Після включення пристрою програма чекає натискання кнопки «Діапазон, range» Коли кнопка натиснута, програма переходить до обробки першого макросу (підпрограми), в якому: обраний перший діапазон (із змінною number, в якій будемо зберігати номер діапазону) і викликається макрос виведення сигналу з середньою частотою діапазону У макросе виводу (out) очікується натискання кнопок

«Збільшення» і «Зменшення» частоти, за якими змінюється тривалість імпульсів, і натискання кнопки «Діапазон», яка викликає перехід до макросу вибору діапазону (збільшуючи номер діапазону)

Поки я не впевнений, що повністю (і правильно) описав всю програму Але можна приступити до остаточного формування програми, доповнивши її блоком ініціалізації, де ми створимо і заповнимо потрібні нам масиви Щоб не посилатися на попередні сторінки і малюнки, я повторю всі кроки зі створення програми, включаючи нагадування, що непогано б створити окрему папку для проекту

Створивши новий проект в програмі Flowcode for AVR, я віддаю перевагу відразу зберегти його у новоствореній папці, задавши йому імя (у мене це project_24_01) Після цього через основне меню Правка-Змінні я створюю три масиву для зберігання тривалостей імпульсів

Зверніть увагу, що за замовчуванням кожен масив має 20 значень Нам потрібно тільки 5

Якщо ми не змінимо розмір масиву (кнопка Розмір масиву ..), То на програмі це не позначиться, але ми можемо швидко витратити всю память, відпущену для зберігання змінних

Рис 241 Створення масивів для зберігання тривалостей імпульсів

Можна відразу створити всі змінні Але не будемо поспішати, а краще приступимо до заповнення масивів, натиснувши в цьому діалозі кнопку Закрити

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

Увійшовши у вікно редагування елемента Обчислення (Подвійним клацанням мишки), ми натискаємо кнопку Змінні і вибираємо перший масив ran1

Після появи масиву у вікні редактора він не має заданого номера елемента масиву

Рис 242 Поява першого елемента масиву

Задаємо номер першого елемента масиву, нагадаю, що нумерація починається з нуля Вводимо значення І так повторюємо для всіх елементів масиву У результаті виходить наступний набір привласнення для першого масиву:

Рис 243 Заповнення першого масиву

Ми можемо тут же продовжити заповнення другого масиву, але я віддаю перевагу додати ще один елемент Обчислення, Заповнивши його

Рис 244 Заповнення другого масиву

І повторивши всі, заповнимо третій масив

Рис 245 Заповнення третього масиву

Я думаю, що ви вже помітили: якщо внести невеликі виправлення в отримані нами значення, то нам знадобиться тільки один масив для зберігання даних Звичайно, якщо ви будете використовувати точні значення частот, то це може виявитися не так, але ми й не планували використовувати точні значення Зате, видаливши два масиви, ми заощадимо місце для інших змінних Обсяг цієї памяті у мікроконтролерів НЕ так великий Я зупиняюся на вирішенні видалити два масиви, а масив ran1 перейменувати просто в ran, Залишивши значення 50-15 – 10-7-5 Для внесення змін – пункт основного меню Правка-Змінні У діалозі виділяємо непотрібний масив і натискаємо кнопку Видалити Підтверджуємо видалення кнопкою ОК в повідомленні, що зявилося, і видаляємо друге масив

Виділивши масивran1, Використовуємо кнопкуПерейменувати, Щоб видалити одиницю з його назви

Тепер додамо змінні для опитування кнопки і підрахунку, скільки разів була натиснута кнопка

«Діапазон» Назвемо першу змінну range, Друга ran_num і виберемо тип byte Кнопка буде вхід підключати до загального проводу, тобто, вхідний сигнал при кнопці буде дорівнює нулю Тому записуємо умова розгалуження програми при range = 0

Оскільки ми ввели змінну ran_num, Не дивлячись на те, що багато компілятори за замовчуванням задають значення змінним, обнулив цю змінну в блоці ініціалізації Це зовсім не обовязково зараз робити, але краще звикнути до цього Іноді початкове значення може відрізнятися від нуля, забувши це зробити, можна отримати помилки в роботі програми, які важко буде виявити Для другої змінної range початкове значення буде здаватися першим опитуванням кнопки

Якщо кнопка натиснута, то ми повинні змінити значення змінної ran_num і викликати макрос обробки діапазону Для нарощування змінної використовуємо той же елемент Обчислення, Що й колись А для виклику макросу додамо елемент Макрос

На малюнку виклик макросу ще не додано в програму Але вставити цей елемент ми вже можемо, хоча сам макрос ще не створений

Щоб створити макрос, як і з створенням змінних, є два основних механізми

Перший механізм створення макросу – це використання пункту основного меню Макрос, Де є розділ Новий

Другий механізм – це виклик діалогового вікна, в якому задаються властивості елемента виклику макросу Подвійне клацання мишкою по цьому елементу відкриває діалог

Який з механізмів використовувати, ви можете вирішити «за місцем», це ніяк не позначиться на роботі програми

Рис 246 Основна галузь програми

Якщо ви звернулися до властивостей програмного елемента для створення нового макросу, ви побачите кнопку Створити новий, З клацання по якій почніть створення макросу У вікні, задайте імя макросу, я назвав його range

Якщо ви до цього часу не задали конфігурацію мікроконтролера, не забудьте, що потрібні параметри слід задати в двох місцях: Чип-Конфігурація задає слово (або слова) конфігурації, Вид-Настройка проекту задає робочу частоту тактового генератора

І ще, в ранніх версіях Flowcode коментарі, написані кирилицею, могли відображатися знаками питання при перегляді тексту на мові Сі Однорядковий коментар в цьому випадку записується після подвійної зворотного косою риси, символу однострочного коментаря Формально все, що за косою рисою, відкидається компілятором, але я стикався, коли програма переставала працювати, спіткнувшись на текст, написаний кирилицею Якщо таке станеться у вас, то переходите на латинську клавіатуру, роблячи запис виду Initsializacia

Якщо ви задали імя макросу в діалоговому вікні, але не сам макрос, то скористайтеся там же кнопкою ОК & Змінити макрос

У самому макросе range ми повинні здійснити вибір діапазону, який визначиться значенням змінної ran_num Зробити це можна різними способами, але останні версії програми Flowcode пропонують найбільш зручний – програмний елемент Перехід (Switch) Додамо його в підпрограму

Рис 247 Додавання перемикача в макрос

У властивостях цього елемента ми повинні вказати, яка змінна буде перемикачем переходів по декількох гілках програми У нас 3 діапазону Відповідно буде три значення змінної ran_num (Про те, щоб їх не було більше, нам належить подбати) І три гілки програми

Одне з розгалужень, Випадок = 1, створено програмою за замовчуванням Щоб додати ще два, досить поставити галочки у віконці ініціалізації

Значення може бути і не цифрою, а буквою, але її потрібно укласти в апострофи: a.

Рис 248 Завдання властивостей елемента Перехід

Після вибору потрібної кількості переходів і виходу з діалогу властивостей (кнопка ОК) Підпрограма приймає вигляд:

Рис 249 Вид підпрограми вибору діапазону

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

Щоб не перевантажувати схему програми, ми створимо ще три макросу: ran1, ran2 і ran3, заповнивши їх викликами три гілки перемикача програми

Зверніть увагу на закладки Крім основної програми із закладкою Main у нас є закладки для всіх макросів Перемикання за допомогою закладок (клацанням мишки) дозволяє перейти в робоче поле даної підпрограми

Рис 2410 Завершення роботи над макросом вибору діапазону

Джерело: Гололобов ВН, – Самовчитель гри на паяльнику (Про електроніці для школярів і не тільки), – Москва 2012