Бегущий огонек. как лучше организовать?

arNewbie
Offline
Зарегистрирован: 12.12.2011

 [оффтоп]Принимайте в свои ряды новобранца =)[/оффтоп]

Вопрос больше по теории. Хочу сделать бегущий огонёк (~ки) - а-ля капля.. из примерно 100 светодиодов.

Первое, и пока единственное что пришло в голову - сдвиговые регистры, но этож их надо 12+ шт (75hc595) и жгут проводов.. (

У меня опыта в инженерии нет, может кто решал подобные задачи? или есть более подходящие м/схемы ?

Спасибо заранее )

whoim
Offline
Зарегистрирован: 03.11.2011

 Добрый. Велкам. Может, по типу "решетки" ? Точнее матрицы, примерно как матричная клавиатура?

ctimas
ctimas аватар
Offline
Зарегистрирован: 13.12.2011

Приветствую, сейчас решаю задачу со сдвиговыми регистрами но не такую, я бы сделал на них соединяя последний выход регистра не только со светодиодом но и со входом следующего, вот и получится что можно будет упровлять по 3 контактам(data, clock, mr(reset)) но опятьже это решение справедливо для бегущего огонька в одну сторону)))))

arNewbie
Offline
Зарегистрирован: 12.12.2011

Спасибо большое за ответы! 

2 ctimas:

Как раз о последоветельном соединении и думал (8 регистров + 64резистора (если будут гореть несколько одновременно)) =)  А на счет направления движения - в данном случае не важно - хочу сделать что-то вроде капающих капель. Но  посмотрел описание 74hc595 - действительно только в одну сторону пихает биты.. могли бы сделать флаг указывающий куда добавлять - в начало или конец :)

 2 whoim:

Вариант:) Но в случае решетки получится многовато проводов.. При 64 сд и 2 регистрах получится минимум 13-14 проводов в сечении, и 16 штук если вывести всё управление на одну плату :(

В случае последовательных регистров (если разместить их на линейке) получится 4 провода + висящие регистры :)

ctimas
ctimas аватар
Offline
Зарегистрирован: 13.12.2011

2 arNewbie

мой проект это 3Д куб 8х8х8 уже сделал 4 этажа, на выходных учился работать с регистром 74HC164N и делал бегущий огонек, но у меня было 8 диодов, задача была заставить его бежать сначала в одну сторону потом в другую. в одну сторону было просто его заставить, я описал как, просто записываю 1 а потом двигаю её по регистру, собсно так и огонек бежит в нужную сторону. в противоположную было интересней, тут я поставил на общий провод диодов(минус) транзистор который подключил к ардуине и подавая на него 1 я зажигал диоды подавая 0 я их гасил, и в обратную сторону горело так:
1) гашу все диоды
2) сбрасываю регистр
3) записываю значения в регистр
4) зажигаю диоды.

внутри ардуины представил диоды в виде одномерного массива типа boolean и где true тот диод и загорался, соответственно двигая true в массиве я заставлял гореть те диоды которые нужны... сейчас пишу программу уже с расчетом на куб.

впринципе я думаю стоит попробовать такую схему и у вас, я думаю быстродействия вполне хватит чтобы не создавалось впечатления что диоды у вас моргают.

arNewbie
Offline
Зарегистрирован: 12.12.2011

C регистром разобрался, и этот монстр даже работает! ))

Вопрос таков: а как сделать плавное затухание ?

Хочу создать эффект шлейфа, когда первый горит на 100%, второй на 50, третий на 25 например.

Аппаратно - конденсотор на каждый диод ? (64шт)

Программно - каков алгоритм?

(Счейчас 4 линейки огней по 16 диодов. 1 линейка огней - 2 группы по 8 диодов. Одна нога у них парралельно на 74HC595, вторая - у каждой группы на порт контроллера. т.к. горит только один диод в еденицу времени то пока все ок.)

whoim
Offline
Зарегистрирован: 03.11.2011

 программно - теоретически - управляющий выход с МК должен быть ШИМ, то есть должен уметь не только включать-выключать пин, а также задавать ему некое "напряжение", по аналогии с аналоговым входом. Это функция anallogWrite, не все ноги ее умеют ессно.

Как я понимаю, ряд ног у тебя служит для адресации сдвигового регистра - то есть формирования "пути" от МК до конкретного светодиода. Вот тут и кроется трабла - как только ты переключишь адресацию на другой светодиод, предыдущий потухнет. Если я все правильно понимаю конечно.

arNewbie
Offline
Зарегистрирован: 12.12.2011

вы все правильно поняли. Общая схема подключения (в наличии только 1 регистр:( ) :


 

Перебор идет по блокам: заполняем рег + 1 блок; рег + второй блок; рег + 3 и т.д. в цикле.

4 линии, на куждую по 2-байтной переменной. В зависимости от значения бита включаем СД. Побитовым смещением двигаем 1-ку :)

Пока как вариант только один вижу - для каждой линии хранить по массиву байт длиной в 16.

Каждый эелемент массива, соотвественно, значение яркости (количества зажиганий) и дикрементировать его.

 

Думал может кто уже делал это и есть карта грабель, или схема велосипеда :)

whoim
Offline
Зарегистрирован: 03.11.2011

не все выходы атмеги есть ШИМ

step962
Offline
Зарегистрирован: 23.05.2011

whoim пишет:

 программно - теоретически - управляющий выход с МК должен быть ШИМ, то есть должен уметь не только включать-выключать пин, а также задавать ему некое "напряжение", по аналогии с аналоговым входом. Это функция anallogWrite, не все ноги ее умеют ессно.

"Программно-теоретически" ШИМ представляет собой именно "включение-выключение" вывода с некоторой частотой и самое главное - с определенной скважностью,  которая и позволяет изменять Uэфф в диапазоне 0...Uпит. Если память мне не изменяет, Arduino-функция генерирует ШИМ-сигнал с неизменной частотой около 500 Гц.

Нет никаких непреодолимых причин для пограммной генерации ШИМ-сигнала такой частоы и скважностью 0-100% с шагом 1% - достаточно, используя  прерывание по таймеру, настроенному на 20 мкс (т.е. 500*100=50 кГц) , производить включение-выключение нужных ног в соответствии с задумкой. Необходимо лишь уложиться примерно в 300 машинных команд (на 16-МГц контроллере за 20 мкс успевает выполниться 320 команд, но что-то необходимо оставить на вход-выход из прерывания).

Для рассматриваемой задачи вовсе не обязательно мигать светодиодами 500 раз в сек - вполне возможно снизить эту частоту до магического значения 25 циклов/сек. Тогда у контроллера останется достаточно времени и для других дел...

 

ЗЫ: Память мне не изменила - действительно 500 Гц (ну, или по-русски)