Приветствую всех!

Сегодня я хочу затронуть тему реализации программного ШИМ на Ардуино НАНО.

Бывают такие моменты, что надо ШИМ там где его нет, например на Аналоговых пинах.. почему нет?


Что такое ШИМ я затрагивал ТУТ, Напомню в краце: ШИМ - это отношение высокого и низкого сигнала за какой-либо период, который называется частотой ШИМ.

Картинка из интернетов:

Программный ШИМ на arduino NANO

И вот понадобилось мне сделать ШИМ там, где его нет в Ардуине.

Да простит меня сообщество, - не вижу смысла заливать код куда либо, если там несколько строк:

Программный ШИМ на arduino NANO

Котэ работает на прерывании по таймеру2, так как на нем висит Аппаратный ШИМ пинов 3 и 11, то никаких критичных "базовых" функций этим не испортим.

Значит в блоке setup просто переводим таймер в режим работы по CLK, т.е. 16 мГц, и разрешаем прерывание по таймеру.

Для включения ШИМ на каком-либо пину делаем так: в массиве пинов пишем пины какие надо, через запятую,.. ну там и тд...

Затем в Массиве значений ШИМ записываем им всем начальное значение, лучше нули, ... т.е. - 4 Пина юзаем, 4 значения записали,.. хотя наверное можно вообще не писать, они и так при инициализации нулями будут..

Ну а дальше в цикле программы, когда нужно записываем в переменную нужное значение, т.е. надо на пин A0 подать 50%, - пишем PWM_pins[1] = 127; обьясняю: в 1 ячейке массива пинов записан A0,.. 127 - это половина от 255 (0-255 значения). Вот и всё.

Надеюсь кому поможет.