Бегущий огонек. как лучше организовать?
- Войдите на сайт для отправки комментариев
Пнд, 12/12/2011 - 20:08
[оффтоп]Принимайте в свои ряды новобранца =)[/оффтоп]
Вопрос больше по теории. Хочу сделать бегущий огонёк (~ки) - а-ля капля.. из примерно 100 светодиодов.
Первое, и пока единственное что пришло в голову - сдвиговые регистры, но этож их надо 12+ шт (75hc595) и жгут проводов.. (
У меня опыта в инженерии нет, может кто решал подобные задачи? или есть более подходящие м/схемы ?
Спасибо заранее )
Добрый. Велкам. Может, по типу "решетки" ? Точнее матрицы, примерно как матричная клавиатура?
Приветствую, сейчас решаю задачу со сдвиговыми регистрами но не такую, я бы сделал на них соединяя последний выход регистра не только со светодиодом но и со входом следующего, вот и получится что можно будет упровлять по 3 контактам(data, clock, mr(reset)) но опятьже это решение справедливо для бегущего огонька в одну сторону)))))
Спасибо большое за ответы!
2 ctimas:
Как раз о последоветельном соединении и думал (8 регистров + 64резистора (если будут гореть несколько одновременно)) =) А на счет направления движения - в данном случае не важно - хочу сделать что-то вроде капающих капель. Но посмотрел описание 74hc595 - действительно только в одну сторону пихает биты.. могли бы сделать флаг указывающий куда добавлять - в начало или конец :)
2 whoim:
Вариант:) Но в случае решетки получится многовато проводов.. При 64 сд и 2 регистрах получится минимум 13-14 проводов в сечении, и 16 штук если вывести всё управление на одну плату :(
В случае последовательных регистров (если разместить их на линейке) получится 4 провода + висящие регистры :)
2 arNewbie
мой проект это 3Д куб 8х8х8 уже сделал 4 этажа, на выходных учился работать с регистром 74HC164N и делал бегущий огонек, но у меня было 8 диодов, задача была заставить его бежать сначала в одну сторону потом в другую. в одну сторону было просто его заставить, я описал как, просто записываю 1 а потом двигаю её по регистру, собсно так и огонек бежит в нужную сторону. в противоположную было интересней, тут я поставил на общий провод диодов(минус) транзистор который подключил к ардуине и подавая на него 1 я зажигал диоды подавая 0 я их гасил, и в обратную сторону горело так:
1) гашу все диоды
2) сбрасываю регистр
3) записываю значения в регистр
4) зажигаю диоды.
внутри ардуины представил диоды в виде одномерного массива типа boolean и где true тот диод и загорался, соответственно двигая true в массиве я заставлял гореть те диоды которые нужны... сейчас пишу программу уже с расчетом на куб.
впринципе я думаю стоит попробовать такую схему и у вас, я думаю быстродействия вполне хватит чтобы не создавалось впечатления что диоды у вас моргают.
C регистром разобрался, и этот монстр даже работает! ))
Вопрос таков: а как сделать плавное затухание ?
Хочу создать эффект шлейфа, когда первый горит на 100%, второй на 50, третий на 25 например.
Аппаратно - конденсотор на каждый диод ? (64шт)
Программно - каков алгоритм?
(Счейчас 4 линейки огней по 16 диодов. 1 линейка огней - 2 группы по 8 диодов. Одна нога у них парралельно на 74HC595, вторая - у каждой группы на порт контроллера. т.к. горит только один диод в еденицу времени то пока все ок.)
программно - теоретически - управляющий выход с МК должен быть ШИМ, то есть должен уметь не только включать-выключать пин, а также задавать ему некое "напряжение", по аналогии с аналоговым входом. Это функция anallogWrite, не все ноги ее умеют ессно.
Как я понимаю, ряд ног у тебя служит для адресации сдвигового регистра - то есть формирования "пути" от МК до конкретного светодиода. Вот тут и кроется трабла - как только ты переключишь адресацию на другой светодиод, предыдущий потухнет. Если я все правильно понимаю конечно.
вы все правильно поняли. Общая схема подключения (в наличии только 1 регистр:( ) :
Перебор идет по блокам: заполняем рег + 1 блок; рег + второй блок; рег + 3 и т.д. в цикле.
4 линии, на куждую по 2-байтной переменной. В зависимости от значения бита включаем СД. Побитовым смещением двигаем 1-ку :)
Пока как вариант только один вижу - для каждой линии хранить по массиву байт длиной в 16.
Каждый эелемент массива, соотвественно, значение яркости (количества зажиганий) и дикрементировать его.
Думал может кто уже делал это и есть карта грабель, или схема велосипеда :)
не все выходы атмеги есть ШИМ
программно - теоретически - управляющий выход с МК должен быть ШИМ, то есть должен уметь не только включать-выключать пин, а также задавать ему некое "напряжение", по аналогии с аналоговым входом. Это функция anallogWrite, не все ноги ее умеют ессно.
"Программно-теоретически" ШИМ представляет собой именно "включение-выключение" вывода с некоторой частотой и самое главное - с определенной скважностью, которая и позволяет изменять Uэфф в диапазоне 0...Uпит. Если память мне не изменяет, Arduino-функция генерирует ШИМ-сигнал с неизменной частотой около 500 Гц.
Нет никаких непреодолимых причин для пограммной генерации ШИМ-сигнала такой частоы и скважностью 0-100% с шагом 1% - достаточно, используя прерывание по таймеру, настроенному на 20 мкс (т.е. 500*100=50 кГц) , производить включение-выключение нужных ног в соответствии с задумкой. Необходимо лишь уложиться примерно в 300 машинных команд (на 16-МГц контроллере за 20 мкс успевает выполниться 320 команд, но что-то необходимо оставить на вход-выход из прерывания).
Для рассматриваемой задачи вовсе не обязательно мигать светодиодами 500 раз в сек - вполне возможно снизить эту частоту до магического значения 25 циклов/сек. Тогда у контроллера останется достаточно времени и для других дел...
ЗЫ: Память мне не изменила - действительно 500 Гц (ну, или по-русски)