Бінарна модуляція (Binary angle modulation) - альтернатива програмному ШІМ-у
Вітаю, любителі мікроконтролерів!
Ліричний вступПісля того, як я виклав на загальний огляд свій відкритий проект напівнакальних ДХО, в личку посипалося багато питань. Причому більшість питань була не з приводу самого проекту, а з тих чи інших проблем програмування контролерів AVR. Тут хотілося б відзначити, що для досягнення своєї мети багатьом просто не вистачає терпіння. Я й сам, можна сказати, тільки починаю пробувати себе у цій справі. Але мені простіше, я людина прискіплива і терпляча: вивчаю документацію, потім дивлюся приклади інших, потім пробую на практиці. Якщо заходжу в глухий кут або набридає, то відкладаю вбік, а потім повертаюся.Зараз повернувся до мого першого незакінченого проекту і вирішив робити дорогою маленькі статті з вузьких тем для початківців. Думаю, буде цікаво.
І так, повертаюся до свого першого проекту - лампи настрою. Спочатку хотів повторити готовий виріб на Atmega8 з інфрачервоним сенсором (ІЧ-світлодіод + ІЧ-приймач) для перемикання режимів. Ніяк не зміг нормально налагодити роботу сенсора. Нині ця ідея перестала подобатися. Однак, пара плафонів з Ікеї, потужні RGB-світлодіоди валяються, і, зрідка, дружина мене ними дорікає :) Втім, вирішено зробити виріб на Attiny13A. Її достатньо для такої штуки, хоча, коли починав, не думав, що це реалізовано. На мою думку, лампа матиме ще й ємнісний сенсор і кілька режимів. Подивимося, що вдасться вштовхнути в цей МК.
Т.к. я прихильник відкритого ПЗ, то паралельно вирішив перейти на компілятор GCC-AVR - весь код буде під нього. До цього писав CodeVisionAVR. Тепер зрідкавикористовую його генератор коду, коли ліньки шерстить датташити.
Бінарна модуляціяТак що таке бінарна модуляція (далі — БМ)? Багато хто знайомий з широтно-імпульсною модуляцією (далі - ШІМ), яку підтримують апаратно багато мікроконтролерів. Спробую пояснити сенс БМ на пальцях порівняно із ШІМ. Маю на увазі, що читає з ШІМ знаком або ознайомиться. Розглядатимемо 8-бітний ШІМ та БМ. Якщо для 30% ШІМ виглядатиме так:

У БМ кодування йде бітами двійкового числа. Кожен біт відповідає за свою тривалість.

Для наочності ми візьмемо число 85 - у двійковому це 01010101 і близько 33%. Значить БМ у цьому випадку виглядатиме так: