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

Тим не менш, в програмі можуть залишатися помилки Будь-яка сучасна середовище створення програм обовязково має налагоджувальні механізми І чим відладчик зручніше, тим швидше середу програмування завоює популярність користувачів

Отже, почнемо відловлювати «жучків»

Рис 2427 Вибір діапазону в режимі покрокової налагодження

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

Відпустивши кнопку, ми можемо переконатися, що сигнал на виході формується (правильно чи ні, ми зясуємо пізніше) Але перевіримо, чи правильно перемикаються діапазони Натиснемо кнопку вибору діапазону ще раз

І переконаємося, що діапазони не змінюються

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

Виправимо наше (мое) упущення Додамо підрахунок натискання кнопки в трьох макроси, де ми опитуємо цю кнопку Збільшимо змінну на одиницю: ran_num = ran_num + 1

Рис 2428 Виправлення макросів ran1-ran3

Але тепер ми потрапляємо в іншу пастку – мінлива на самому початку програми прийняла значення одиниці, ми сформували потрібний напрямок просування по програмі, проте, відпустивши кнопку, збільшили змінну run_num ще раз на одиницю, переключивши діапазон після одноразового натискання на кнопку Діапазон Задумано було добре, а вийшло .. «з вогню та в полумя»

Внесемо виправлення в макрос range, Оскільки проблеми виникли при відпуску кнопки перемикання діапазону:

Рис 2429 Виправлення макросу range

У макрос додані блоки, які очікують, коли кнопка буде відпущена Подивимося, чи всі проблеми були вирішені

Не всі, але тепер ми циклічно переходимо з одного діапазону на інший, як і планували

Перша неприємність, яка виявляється, повязана з відображенням частоти Після першого вибору діапазону частота відображається правильно, частота середини діапазону Але після зміни діапазону вона зникає, і повязано це з «недоробками» програми Ось це місце:

Рис 2430 Виправлення недоробок

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

Рис 2431 Правка в макросах ran1-ran3

Записуючи в порт десяткове значення 32, я використовую маску:

Рис 2432 Використання маски

У програмуванні маска використовується, щоб замаскувати від зміни окремі біти в байті Якби ми не задали маску, то біти D0-D2, які «висвічують» обраний діапазон, обнулились б, а світлодіоди погасли Виправлення приносить успіх Повний чи що

Перевіряємо роботу кнопок Більше і Менше Вибравши для маніпуляцій перший діапазон, я переконуюся, що цілком адекватно доходжу, натискаючи кнопку Більше, До останньої частоти діапазону, а далі застряю на ній І це правильно У макросе more ми подбали, щоб змінна mor_num, Ведуча підрахунок кількості натискання на кнопку Більше, Що не пішла за межі діапазону змін, але повертаємося після цього всередину циклу макросу range після керування індикацією Вона й не управляється Одне з рішень повернутися в макросrange, Викликавши його явно:

Рис 2433 Виправлення макросу more

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

Займаючись покрокової, перевіркою я виявляю ряд друкарських помилок Для графічного мови програмування поняття опечатка здається дивним Але друкарські помилки можуть бути і в цьому випадку В одному з рахункових циклів я додав замість одного елемента Цикл (Loop) два І не помітив, переробивши внутрішній цикл в рахунковий, і залишивши зовнішній При покрокової перевірці, застрягши в цьому циклі, я, звичайно, видалив його

У макросах ran1-ran3, Зібравши перший з них, я зробив опечатку, яку, копіюючи макроси, переніс в інші:

Рис 2434 Друкарська помилка в макросах ran1-ran3

Тут має бути правильне присвоювання pause = ran[2] (Середина частотного діапазону) Деякі друкарські помилки не позначаються на логіці програми, але призведуть до її неправильної роботи І в макрос more, Де триває переміщення по частотах, помилка перейшла «у спадщину»

Рис 2435 Помилка в макросе more

Звичайно, тут повинні були бути pause = ran[3] і pause = ran[4] Аналогічна помилка є і в макросе less, Де потрібно зменшити індекси на одиницю

Останні друкарські помилки будуть помітні тільки при інтерактивній перевірці

Тому дуже важливо використовувати всі доступні інструменти для перевірки і налагодження новоствореної програми

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

Але все можна виправити Правда, правки досить багато Я наведу кінцевий результат Але перш виправлю, зроблені для покрокової перевірки тимчасові виправлення: кількість циклів (у двох місцях) в макросе ran2 поверну до значення 100 кількість циклів (у двох місцях) в макросе ran3 поверну до значення 10 кнопки зроблю без фіксації Це дозволить мені запустити інтерактивний режим перевірки (кнопкою програвання на інструментальної панелі)

Рис 2436 Інтерактивна перевірка програми

І залишилося перевірити правильність переключення частот на екрані осцилографа (нехай і віртуального) в програмі ISIS Для цього програму слід відкомпілювати в hex-файл (Чип-Компіляція в HEX) При цьому корисно подивитися, як багато місця програма займає в памяті

Рис 2437 Повідомлення компілятора про займаної памяті

У програмі ISIS (Proteus) я не буду захаращувати креслення світлодіодами Поточну частоту можна визначити за активного стану виходів мікроконтролера

Рис 2438 Перевірка роботи програми в ISIS

І правка, яка знадобилася Я видалив деякі змінні Ось список залишилися змінних

Рис 2439 Змінні в остаточному варіанті програми

До знову доданої змінної freq, Яка зайняла місце змінних mor_num і les_num, Додався новий макрос з тим же імям

Рис 2440 Новий макрос freq

Змінився блок ініціалізації на початку основного блоку програми:

Рис 2441 Новий блок ініціалізації

Змінилися початкові елементи блоків ran1-ran3:

Рис 2442

Зміни торкнулися макросів more і less:

Рис 2443 Зміни макросів

Умова в макросе less записано як freq = 255 Це повязано з тим, що при відніманні одиниці з цієї змінної, коли вона дорівнює нулю, ми отримуємо не негативне число (тип byte), А саме 255

Ось, начебто, і все Якщо я щось упустив, думаю, ви самі внесете зміни І корисно буде, за компютером, постаратися зробити ще один режим – зміна шпаруватості імпульсів Для цього розбийте змінну pause на pause1 і pause2 Віднімаючи з pause1 деяке число, одночасно додайте його до pause2 Частота залишиться колишньою, а шпаруватість зміниться

Якщо ви вирішите зробити окремий генератор для своєї лабораторії, перевірте всі на макетної платі, слід регулювати все, що захочеться підігнати Обовязково почитайте datasheet обраної моделі мікроконтролера У кожної моделі є свої особливості, які можуть бути не враховані в наведених прикладах Але не поспішайте Пізніше ми спробуємо внести ще ряд змін Втім ..

А я і так затягнув розповідь про це генераторі Хоча старався розповісти не про нього, а програмі Flowcode Ви, думаю, помітили це

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