По логіці роботи програми.
Використовуються два таймери - 0 та 2.
Таймер0 викорисовується лише для запуску перетворень АЦП.
В обробнику переривань від АЦП обчислюється напруга мережі 220В,
детектується перехід через "0", та виконується ПІД-синхронізація частоти
другого таймера до частоти мережі.
Таймер0 налаштовано на частоту 5 кГц (період 200 мкс) - в 100 разів більше від
частоти мережі. Десь читав, що треба 100+ разів від частоти вимірюваної
напруги. Тобто треба збільшити частоту?
Таку частоту не можна задати віртуальному таймеру - треба шукати інші
можливості для запуску АЦП з потрібною частотою.
Зідно налаштувань таймера - в дійсності його частота в два рази менша, тобто
період 400 мкс. Можливо помилка налаштування.
Таймер2 працює з частотою 50 Гц (період 20 мс), в процссі роботи підстроюється
під частоту мережі.
В обробнику переривань теймеру2 виконуються:
- Razgon_() - управління релє
- якщо pdm, то PDM_() - твердотільне релє, щось там рахують і міняють
прапорець ,по якому вже буде TURN_SSR_ON чи TURN_SSR_OFF
- інвертується флаг напівволни мережевої напруги (?)
- завантажуєтся нове значення в дільник таймеру2
- рахуються періоди до секунди. коли секунда:
- оновлення дісплею(?)
- контролюється таймаут меню
- контроль таймауту для усарт
- відсилання репорту на ADprotocol
- Buttons_() - опитування кнопок.
Зроблю:
один VT на 50 Гц - релюхі
другий VT на 1 сек
третій VT на 50 Гц - кнопки. або, краще, окремий потік.
-----
Опитування кнопок - евенти
https://www.playembedded.org/blog/mastering-exti-chibios-pal/
-----
20.11.2023
На цьому - все.
тут тупік.
воно не робить - скоріш за все прибрав щось зайве, код такий, що розбиратись в
ньому немає жодного бажання.
краще почати з 0.