Добрый день всем !
Решил выложить (может кому понадобиться) свою реализацию "вежливого" управления подсветками. (Писал по просьбе. Схемотехника - не ко мне).
Программа реализует управление двумя каналами ШИМ микроконтроллера ATTiny13.
Один канал (ножка PB0) - подсветка салона;
второй (ножка PB1) - подсветка ступенек/днища.
Входы (можно сконфигурировать ножки в setup.h, а реакцию на уровни на ножках - в scenario.h):
PB4 - включение двигателя (от ключа зажигания) - PB4=0 двигатель заглушен, PB4=1 двигатель запущен;
PB2 - состояние дверей - PB2=0 дверь открыта, PB2=1 все двери закрыты.
ТЗ было примерно такое:
Алгоритм работы белого светильника (салон):
а) Дверь закрыта - светильник не горит;
б) Дверь открыта - светильник горит (включение плавное ~ 0,3 сек);
в) Последующее закрывание двери - светильник горит на протяжении 10 сек (задержка выключения), далее плавное выключение (~1,5 сек);
г) Запуск двигателя (PB4=1) во время обработки пункта в) -сброс задержки выключения, плавное выключение светильника (~1,5 сек);
д) Если дверь открыта при запущенном двигателе (PB4=1) - белый светильник не включается.
Алгоритм работы синего светильника (ступени):
а) Двигатель не запущен (PB4=0) - светильник не работает;
б) Момент запуска двигателя (PB4=1), светильник горит на полную яркость (включение плавное ~ 0,3 сек) на протяжении 10 сек, далее плавно гаснет на половину;
в) Дверь открыта, двигатель запущен (PB4=1) - светильник загорается на полную мощность;
г) Последующее закрывание двери - плавное снижение яркости светильника на половину;
д) Двигатель остановлен (PB4=0) - светильник плавно выключен.
Программа реализует подход "поведение определяется данными" и использует минимум условных (if, switch) конструкций.
Благодаря такому подходу удается экономить память программ (свободно ~25%).
Никаких настроек во время работы не предусмотрено. Все настройки - на этапе компиляции (среда Atmel Studio 7).
За то - можно задавать любые мыслимые сценарии (см. scenario.h) без изменения основного алгоритма !
Исходники подробно откомментированы: кто захочет, - разберется. В архиве есть модель Proteus (8.7SP3) для ознакомления с работой.
Из минусов:
контроллер молотит постоянно, - т.е. переход в режим пониженного потребления не реализован.
Но ! Из setup.h можно довольно просто играться с тактовой частотой и частотой ШИМ, и, это не затронет задержек (возможно затронет несущественно) в созданных вами сценариях. Требования изложены там же.
Нет программного подавления дребезга. Я считаю, что для единичного изделия два лишних кондюка по входам погоды не сделают)
Картинка: сценарииСкачать файлы можно здесь