як передати управління основного блоку, програма визначає, в якому стані перебувало пристрій перед відключенням живлення. Залежно від результату встановлюються ті чи інші прапори, що повідомляють основній програмі про те, які дії необхідно зробити. Наприклад, якщо в момент зникнення мережевої напруги був включений перший канал, то після відновлення електропостачання він включиться автоматично (якщо це було попередньо дозволено користувачем у налаштуваннях пристрою). p align="justify"> Як вже зазначалося, код основного блоку Main. asm виконується в нескінченному циклі. Так як детектування переходу мережевої напруги через нуль здійснюється в кожному напівперіод, цикл Main. asm повторюється кожні 10 мс.
Перша команда основного блоку - скидання сторожового таймера. Слід зазначити, що це єдине місце у всій основній програмі, де здійснюється скидання сторожового таймера. p align="justify"> Алгоритм заснований на порівнянні не з константою, а з попереднім результатом вимірювання. Команда на включення каналів подається тільки тоді, коли поточний результат вимірювання стає більше попереднього. У звичайному режимі (без впливу перешкод) МК здійснить вихід з циклу, як тільки мережеве напруга змінить напрямок з спадної на зростаюче, тобто відразу після переходу мережевої напруги через нуль. Таким чином, відпадає необхідність у кварцовому резонаторі, калібруванню внутрішнього генератора і в калібрування АЦП. Також не потрібна додаткова константа і налаштування пристрою під конкретний екземпляр МК. p align="justify"> Похибка нового алгоритму неважко підрахувати. Для визначення моменту, коли мережеве напруга почало зростати, достатньо двох вимірювань. Час одного перетворення АЦП складає 27 мкс. Час на обробку отриманого результату (перші 5 команд процедури PhaseDetect) складе в гіршому випадку 8 мкс. Значить, максимальна похибка дорівнює 27 + 27 + 8 = 62 мкс. Відповідно до формули U = A sin (2 pft), при такій затримці миттєве напруга в мережі буде перебувати на рівні < b align = "justify"> U = 310 sin (2 3,14 100 6210 -6 ) = 12 В ( щодо номінального мережевої напруги).
Зважаючи розгалуженості алгоритму основної програми його наочне зображення в графічному вигляді не наводиться, тому що буде скрутно для сприйняття. Окремі процедури основної програми описані далі. Полегшити розуміння логіки роботи покликані коментарі до програмного коду, а також розділ Управління. p align="justify"> Функція ИПХ (Імітація Присутності Господарів) використовує в якості лічильника часу у включеному і вимкненому стані окрему процедуру. У функції ИПХ практично скрізь опитується біт лише одного (першого) каналу. Це допустимо завдяки ідентичності каналів, а також завдяки тому, що в даному режимі канали управляються синхронно. p align="justify"> У момент включення функції ...