Генератор эффектов от GetChiper

14 Января 2012 К комментариям

Мне приглянулся один из проектов: 12-ти канальный генератор эффектов на ATtiny2313 на сайте GetChip.net.

(Автор блога хорошо преподносит свои мысли и предоставляет подробную информацию для повторения своих конструкциях.)

Вначале я хотел просто повторить данную конструкцию, но потом решил клонировать его на микроконтроллере серии STM8.

По правилам этикета спросил разрешения у автора:

image

Выбор микроконтроллера

Схема очень простая, большого функционала от микроконтроллера не требуется.

Думаю можно взять любой микроконтроллер из серии STM8.

Я решил остановить свой выбор на базовой линейке STM8S.

В свое время я купил плату STM8S-Discovery, а за ней и кучку микроконтроллеров STM8S103K3T6C, т.к. по характеристикам (и особенно по цене – 22 рубля 18 копеек) они лучше всего подходили на замену ATmega8.

На сегодняшний день они по прежнему являются самыми дешевыми из серии STM8S в наших краях, правда цена подросла до 23 рублей 18 копеек. (Попутно замечу, что ATtiny2313 стоит у нас 69 рублей 48 копеек).

Вот собственно и весь выбор. :)

Особого смысла в сравнении микроконтроллеров по характеристикам не вижу.

Однако сразу использовать STM8S103K3T6C не получится, так как нужно время на изготовления платы, а “руки чешутся” уже сейчас :)

Поэтому за основу возьмем плату STM8S-Discovery, а после перенесем проект на STM8S103K3T6C.

Клонирование

Изначально программа для микроконтроллера ATtiny2313 написана в графической среде программирования Algorithm Builder, очень специфичное программирование :)

Вот например как выглядит код для работы с EEPROM памятью:

image

Algorithm Builder доступен только для AVR, в связи с чем напрямую клонировать не представляется возможным и придётся писать почти с нуля.

Мне привычнее писать на Си.

Формирование ШИМ

В устройстве реализован ШИМ программно, всего 12 каналов.

Параметры ШИМ: 100 Гц, 8 бит.

В моем понимании 8 бит это 256 возможных значений яркости, однако у автора реализовано всего девять ступеней яркости, возможно в будущем будут реализованы все 256 значений.

Для формирования временных отрезков ШИМ лучше всего использовать таймер.

Определим длительность одного шага ШИМ:

1 / (100 Гц * (9 - 1)) = 1,25 мс (800 Гц)

Округлив длительность до 1 мс (1кГц), можно “возложить” на таймер ещё одну задачу - отсчет миллисекундных интервалов (формирование задержек в основной программе с точность до +- 1мс).

Частота ШИМ в этом случае будет равна 125 Гц.

Ограничение уровней сильно снижает нагрузку на микроконтроллер и думаю можно смело организовать каналов сто :)

Световые программы

Формат записи следующий:

image

Пример одной программы:

image

Как видим не очень оптимально, возможно запас на будущее, пока оставим как есть.

Перечень эффектов:

  • Work – отработка программы изменения яркости для каждого канала отдельно (см. Направление изменения яркости);
  • Jump – отработка программы скачкообразного изменения яркости для каждого канала отдельно (см. Направление изменения яркости);
  • Strobo – со случайным периодом и случайной длительностью включается стробоскопический эффект на всех каналах;
  • Move – эффект сдвига. Плавно и случайно меняется скорость и направление сдвига;
  • Bright – плавное и случайное изменение яркости всех каналов;
  • Blink – Случайное мерцание всех каналов.

Я пока не совсем понимаю работу всех эффектов.

Диспетчер задач

Реализация каждого эффекта вынесена в отдельную задачу.

Для управления (выполнения) реализован диспетчер задач, вот его код:

image

и пример одной задачи (Jump):

image

Если я правильно понял логику работы диспетчера, то его назначение вызывать задачи (подпрограммы) через установленные (заданные в параметрах) промежутки времени.

Постараюсь реализовать аналогично на Си.

К сожалению на этом, пока все.

Продолжение записи читать Часть 2


Categories: Проекты Tags: GetChiper

comments powered by Disqus