Широтно-импульсная модуляция широко используется в микроконтроллерах. В каждом из таймеров МК есть по несколько таких каналов. И обычно их хватает, но что делать если нужно больше каналов? Тут выход один - делать их программно. Вот для этого и создан этот кусочек кода.
Программа для организации произвольного количества ШИМ каналов.
sshot-1.png [ 9.1 КБ | Просмотров: 23738 ]
- Для каждого канала уровень ШИМ задается в переменной Bri* (где * - номер канала).
- Все действия производятся в прерываниях таймера0 (или другого по выбору).Для основной программы работа программного ШИМ незаметна. Менять уровень канала можно в любое время, в любом месте программы.
- Задействован только один регистр общего назначения (и его можно освободить храня переменную в памяти).
- Обработка одного канала занимает 7 слов памяти и 8 тактов процессорного времени (не забываем, что для обеспечения частоты ШИМ в 120Гц необходимо каналы обрабатывать 120*256=30720 раз в секунду).
- Теоретически (при частоте задающего генератора 20МГц) можно организовать до 100 таких каналов (если ножек хватит

).P.S. Отдельной процедурой (прерыванием?) выложу вариант организации ШИМ-каналов, когда данные каналов выводятся не отдельно на ножки, а через SPI интерфейс в сдвиговый регистр (это значительно сэкономит память и процессорное время при большом количестве каналов).