Найти в Дзене
Электроник ОПГЭ

Помигаем светодиодами на PIC24 используя ШИМ и таймеры. продолжение 3 (soft)

ссылка на --> предыдущую часть

Шимы и светоэффекты настроены. Теперь займусь управлением всем этим. Буду переключать режимы и скорость при помощи двоичного переключателя. Это вот такая штука. Существуют поминиатюрнее, но в наличии у меня только это

двоичный переключатель
двоичный переключатель

В контроллере есть свободный порт "А". Буду использовать его. Подключу к нему переключатели вот так:

Переключатели
Переключатели

Первый на режимы, второй на скорость.

Подготовлю порт А

Конфиг порта А
Конфиг порта А

Здесь попутно устанавливаю максимальную скважность в 30 проц . Так как поизучав схемы стабилизаторов тока светодиодных лент, прикинул , что там такая скважность примерно. Также умножаю на 3 период таймера 4, чтобы скорость совпадала с бегущими огнями - он считает одновременно на три канала .

Настрою еще и таймер 5 на 4 секунды примерно . Он мне понадобится для автоматического перебора режимов.

-4

Теперь собственно управление. Режимы буду переключать просто разрешением/запретом прерываний таймеров и изменением минимальной скважности. Пишу в "теле" бесконечного цикла в главной функции вот это:

режимы
режимы

Здесь я опрашиваю порт А . Выделяю биты режима и , в зависимости от кода , использую нужный таймер . В трех последних режимах увеличиваю минимальную скважность для режима мерцания (диоды не гаснут полностью). В режимах 2 и 5 сделаю инверсию каналов в прерывании Tmr3 - "бегущий ноль". Получится 6 режимов плюс "0" - автомат.

1-бегущий огонь, 2- бегущий ноль, 3 - бегущая волна, 4- мерцающий бег.огонь, 5 - мерцающий бег.ноль, 6 - мерцающая волна.

0 - автоматический перебор нескольких режимов по 8 сек , примерно , каждый

Скорость буду менять в обработчиках прерывания таймеров. Вот так изменю обработчик Tmr3:

прерывание Т3
прерывание Т3

В этой функции выделены две строчки работающие только в режимах 2 и 5. В первой инвертирую каналы методом "исключающее ИЛИ" с единицами (так показалось проще). Получается "бегущий ноль". Во второй помеченной строке, инвертирую в исходное состояние. Скорость устанавливаю изменением периода Tmr3. Опрашиваю порт А, выделяю биты скорости и меняю период. В двух битах 4 скорости получится.

В таймере-4 аналогично. Только здесь меняю период Tmr4.

-7

Далее делаю режим "0- автомат". Пишу функцию обработчика прерывания Tmr5 :

-8

Тут просто по счетчику перебираю несколько режимов по 8 сек , примерно, каждый.

На симуляции получается так

-9

Это режим "0" - авто. Скорость третья.

Виртуальная часть окончена. В итоге - использую таймеры и ШИМ(PWM) . Как и планировал. В последствии буду реализовывать физически.

текст программы >> тут