Несколько каналов ШИМ на PIC

Я использую PIC16F88 для моего проекта с компилятором XC8.

То, чего я пытаюсь добиться, - это управление 4 светодиодами с помощью 4 кнопок, при нажатии на которые увеличивается рабочий цикл соответствующего светодиода на 10%. При нажатии кнопки на RB0 увеличивается рабочий цикл светодиода на RB4 и т. Д. Каждый светодиод независим, поэтому он может иметь различный рабочий цикл.

Проблема состоит в том, что используемый PIC имеет только один модуль ШИМ на RB0 или RB3 (с использованием бита CCPMX).

После некоторых исследований я решил внедрить программный ШИМ, чтобы иметь четыре разных канала, каждый из которых контролировал бы один рабочий цикл, но большинство источников, которые я обнаружил, не предоставили никакого объяснения того, как это сделать. Или есть способ отразить ШИМ на несколько контактов?

Спасибо заранее за помощь мне.

1 ответ

Зеркальное отображение не вариант.

ШИМ относительно прост. Вы должны установить частоту ШИМ (которую вы не будете изменять) и рабочий цикл ШИМ (который нужно изменить, чтобы иметь диапазон напряжения 0-100%). Вы должны решить, какое разрешение ШИМ вам нужно, какой шаг напряжения вам нужен (встроенный ШИМ, например, 8-битный и имеет 0-255 шагов).

Наконец, вы должны установить таймер прерывания на основе частоты ШИМ * разрешение ШИМ. В программе Timer ISR вам необходимо проверить количество разрешений и значение ШИМ для всех ваших каналов. Счетчик разрешений должен будет сбрасываться при достижении значения разрешения (и снова начать отсчет с 0, все выходы здесь также ВЫСОКИЕ). Когда достигается выходное значение ШИМ, вы должны переключить (потянуть НИЗКИЙ) соответствующий вывод (и сбросить его на ВЫСОКИЙ при каждом сбросе счетчика разрешений).

Это только один способ сделать это, включает только один таймер и должен быть максимально простым, так как у вашего PIC мало ресурсов.

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

Другие вопросы по тегам