Генератор эффектов от GetChiper
Мне приглянулся один из проектов: 12-ти канальный генератор эффектов на ATtiny2313 на сайте GetChip.net.
(Автор блога хорошо преподносит свои мысли и предоставляет подробную информацию для повторения своих конструкциях.)
Вначале я хотел просто повторить данную конструкцию, но потом решил клонировать его на микроконтроллере серии STM8.
По правилам этикета спросил разрешения у автора:
Выбор микроконтроллера
Схема очень простая, большого функционала от микроконтроллера не требуется.
Думаю можно взять любой микроконтроллер из серии STM8.
Я решил остановить свой выбор на базовой линейке STM8S.
В свое время я купил плату STM8S-Discovery, а за ней и кучку микроконтроллеров STM8S103K3T6C, т.к. по характеристикам (и особенно по цене – 22 рубля 18 копеек) они лучше всего подходили на замену ATmega8.
На сегодняшний день они по прежнему являются самыми дешевыми из серии STM8S в наших краях, правда цена подросла до 23 рублей 18 копеек. (Попутно замечу, что ATtiny2313 стоит у нас 69 рублей 48 копеек).
Вот собственно и весь выбор. :)
Особого смысла в сравнении микроконтроллеров по характеристикам не вижу.
Однако сразу использовать STM8S103K3T6C не получится, так как нужно время на изготовления платы, а “руки чешутся” уже сейчас :)
Поэтому за основу возьмем плату STM8S-Discovery, а после перенесем проект на STM8S103K3T6C.
Клонирование
Изначально программа для микроконтроллера ATtiny2313 написана в графической среде программирования Algorithm Builder, очень специфичное программирование :)
Вот например как выглядит код для работы с EEPROM памятью:
Algorithm Builder доступен только для AVR, в связи с чем напрямую клонировать не представляется возможным и придётся писать почти с нуля.
Мне привычнее писать на Си.
Формирование ШИМ
В устройстве реализован ШИМ программно, всего 12 каналов.
Параметры ШИМ: 100 Гц, 8 бит.
В моем понимании 8 бит это 256 возможных значений яркости, однако у автора реализовано всего девять ступеней яркости, возможно в будущем будут реализованы все 256 значений.
Для формирования временных отрезков ШИМ лучше всего использовать таймер.
Определим длительность одного шага ШИМ:
Округлив длительность до 1 мс (1кГц), можно “возложить” на таймер ещё одну задачу - отсчет миллисекундных интервалов (формирование задержек в основной программе с точность до +- 1мс).
Частота ШИМ в этом случае будет равна 125 Гц.
Ограничение уровней сильно снижает нагрузку на микроконтроллер и думаю можно смело организовать каналов сто :)
Световые программы
Формат записи следующий:
Пример одной программы:
Как видим не очень оптимально, возможно запас на будущее, пока оставим как есть.
Перечень эффектов:
- Work – отработка программы изменения яркости для каждого канала отдельно (см. Направление изменения яркости);
- Jump – отработка программы скачкообразного изменения яркости для каждого канала отдельно (см. Направление изменения яркости);
- Strobo – со случайным периодом и случайной длительностью включается стробоскопический эффект на всех каналах;
- Move – эффект сдвига. Плавно и случайно меняется скорость и направление сдвига;
- Bright – плавное и случайное изменение яркости всех каналов;
- Blink – Случайное мерцание всех каналов.
Я пока не совсем понимаю работу всех эффектов.
Диспетчер задач
Реализация каждого эффекта вынесена в отдельную задачу.
Для управления (выполнения) реализован диспетчер задач, вот его код:
и пример одной задачи (Jump):
Если я правильно понял логику работы диспетчера, то его назначение вызывать задачи (подпрограммы) через установленные (заданные в параметрах) промежутки времени.
Постараюсь реализовать аналогично на Си.
К сожалению на этом, пока все.
Продолжение записи читать Часть 2
comments powered by Disqus