Подключение светодиодной матрицы
- Войдите на сайт для отправки комментариев
Коллеги, подскажите пожалуйста.
Планируется девайс с массивом из 4 светодиодных матриц 8х8 (типа таких: http://www.seeedstudio.com/depot/datasheet/SZ012388K9.pdf - 8х8 двухцветные)
Управление планируется мегой. Подключить их планирую следующим образом - "ряды" (8 штук, через одну ULN) к выходам с ШИМ (чтобы можно было яркость регулировать).
"Столбцы" (8х4=32) - через 4 сдвиговых регистра 74HC595 - это для одного цвета, такую конструкцию надо будет повторить (поскольку матрицы - двухцветные).
Вопросы:
1. Не попалю-ли выходы свдиговых регистров, если так подключать?
2. Сработает идея с подключением "рядов" к ШИМ? Или яркость надо как-то иначе при динамической индикации регулировать?
3. Не будет ли слишком медленной работа с таким количеством сдвиговых регистров (4 штуки) для динамической индикации?
4. Нет ли чего лишнего (или недостающего)?
5. Токоограничительные резисторы куда ставить (в цепь "строк" или "столбцов")? - сам склонаюсь к "строкам", но пока это как-то "на ощущениях" (правда, есть сомнение - не будут ли при разных условиях светодиоды гореть с разной яркостью при таком подключении)...
6. Может, кто-то делал похожее? Поделитесь картой "граблей"?
К любому выходу 74HC595 одномоментно подключен только один светодиод, так что их выходы не погорят.
А вот в каждом ряду, в зависимости от картинки на дисплее может быть включено параллельно до 32 светодиодов, что дает ток до 640мА.
Отсюда два вывода -
1) резисторы к "рядам" подключать неправильно, ибо суммарный ток получается слишком разный в зависимости от изображения.
2)На вход каждого ряда обязательно поставить по транзистору (лучше имхо по дарлингтону, чтобы запас был) или полевику.
Кстати, ряды лучше подключать не по отдельности к шим выходам, а через думультиплексор - и выходы сэкономятся и проще будет расширять если что количество рядов.
Насчет медленной работы - для нормального отображения частота обновления экрана должна быть порядка 100 Гц или выше. 10 мс на одно отображение, около 1.25 на ряд.
Времени должно хватить, если вместо digitalWrite писать в регистры напрямую.
В этой теме подключали дисплей 16x32, который фактически так и устроен.
Но
Но вооще-то идеоологгически болеее верно использоввать спецциальную микросхему - драйвер матрицы. Я сейчас не помню навскидку названия, посмотрю позже, когда время будет, найду ссылку.
Насколько я помню, в названии фигурируют цифры 1632
тоже калдую щас над такой же матрицей....
через шим не подключал, не было такой задачи
подключил строки и ряды через три штуки 74hc595. резисторы подключал к рядам (к катодам красных и зеленых диодов), управлять получается...
на счет транзисторов к строкам не ставил... (под рукой не было собрал без ключей) работает, но по расчетам работает за гранью возможности (если зажечь в строке все диоды одной матрицы красные и зеленые - 16 штук подключенные через 470 ом, то не сложно засчитать ток через регистр - (5в-2в)/470оМ*16=100мА, максимальный ток регистра = 70мА) хотя над регистрами глумился зажигал сразу все диоды матрицы а это более чем 1/2 ампера... ниче живые, работают, не греются... ну это так... эксперементы...
в этой матрице не понрамилась нумерация выводов "катод зеленый", "катод красный", "анод" вникал как развести плату под нее.... видал другую матрицу у нее цокалевка поинтереснее 1-8 - катоды зеленого, с 9-12 аноды, с 13-24 катоды красного, удобнее подключать напрямую у регистрам, отправил в регистр какие диоды в строке зажечь они и засветились, тут немного замороченней..
Кстати, ряды лучше подключать не по отдельности к шим выходам, а через думультиплексор - и выходы сэкономятся и проще будет расширять если что количество рядов.
....
Но вооще-то идеоологгически болеее верно использоввать спецциальную микросхему - драйвер матрицы. Я сейчас не помню навскидку названия, посмотрю позже, когда время будет, найду ссылку.
Насколько я помню, в названии фигурируют цифры 1632
Да, я тут тоже "покурил" форумы, похоже правильнее использовать драйвер матрицы.
А что за мультиплексор? хотя-бы пример, чтобы понимать, что искать? Или как правильнее реализовать регулировку яркости?
Драйвер.
Демультиплексор. Три адресных входа для выбора ряда. Один вход для тактовой линии, один (на самом деле два, но второй здесь не нужен) вход для шимирования, один из восьми выходов включает нужный ряд. Для 16 рядов ищем не 3-to-8 а 4-to-16
Вот спасибо!
74HC138 - очень понравилась микросхемка. Только там нет тактовой линии (она там и не нужна совсем), а логикой на пинах CS1, CS2, CS3 очень удобно организовать регулировку яркости (достаточно завести ШИМ на CS1, а CS2, CS3 - посадить на землю).
Драйвер этот тоже шикарен, один корпус может рулить сразу всей матрицей 8*32 (правда, для одного цвета) - надо будет подумать (но транзисторов надо много).
Вообще, есть еще драйвера попроще, например MAX7219
Пока на текущий момент, пожалуй, лидирует следующий вариант:
1. Ряды подключаются через демультиплексор и ULN
2. Столбцы - через сдвиговые регистры
Динамическую индикацию производим по рядам (пробегаемся по рядам с 0 по 7, зажигая в столбцах нужные светодиоды).
Пока не придумал, как лучше: сделать для каждого цвета свой набор регистров или единый набор регистров для обоих цветов?
Насколько я знаю, есть два способа:
1)Сначала подключаются все красные цвета. Выход последнего красного регистра подключается на вход первого зеленого регистра. (Ну или красный и зеленый меняем местами). Тогда при управлении засылаем сначала все зеленые биты, потом все красные.
2)Красная и зеленая линии идут параллельно. По одному пину шлем красные биты, по второму - зеленые.
Первый подход экономит один пин на МК, во втором чуть пироще становится логика управления.
Из схем, которые я встречал - RGB обычно подключают по независимым линиям, RG - кто как, но чаще по одной.
PS: Десять минут назад принес с почты три вот таких матрицы. Они как раз на HT1632C сделаны. Буду экспериментитровать. Правда не с дуиной, а на Stellaris Launchpad'e. Но для дуины я даже библиотеку видел, которая работает с HT1632.
Продолжаем разговор.
Получил микросхемы - демультиплексор 74HC138, UDN2981A (эта связка будет "рулить" строками). Собираю простенький макетик (цель - "рулить" 8 светодиодами, символизирующими "ряды" в матрице), чтобы все предварительно проверить.
Подключение простейшее - три цифровых пина идут на адресные входы 74HC138, входы E1 и E2 - на землю, на E3 - заводим один из пинов с ШИМ (для регулировки яркости).
Выходы 74HC138 заводим на входы UDN.
Выходы UDN "нагужаем" светодиодами (катод светодиода на GND, анод - к выходу ULN).
Такое подключение обусловлено тем, что матрицы, которые будут использоваться в дальнейшем (и пока только едут) - выполнены по схеме с общим анодом.
И все в макете работает так, как требуется (выбирается нужный светодиод из линейки в зависимости от адреса, регулируется яркость его свечения с помощью ШИМ), но есть один "маленький" косячок.
Заключается он в том, что 74HC138 имеет инверсные выходы (т.е. все пины, кроме того, который соответствует "адресному" - в положении HIGH, и только "адресный" - LOW). UDN это положение вещей просто "транслирует" дальше.
В результате вся линейка светодиодов горит, за исключением "адресного".
Понятно, что между 74HC138 и UDN можно просто поставить элементы "логическое НЕ" (нашел в закромах К155ЛА3 - сделал 4 инвертора, подключил, как описал - работает как нужно), но это дополнительные корпуса (кстати, не нашел 8 элементов НЕ в одном корпусе).
Может, есть демультиплексор аналогичный 74HC138, но без инверсии на выходе? (в гугле не забанен, но пока слабо представляю, как там искать микросхемы с нужными параметрами)
Или какой-то еще вариант?
Добрый день. А max7219 не рассматриваете? Микруха не дорогая 5$ за пучек. Можно последовательно 8 шт включать.
рассматривал ее.. но там - " общим катодом" - не подходит
А если с max7219 так?
http://pdfserv.maximintegrated.com/en/an/AN1196.pdf
Или вот tlc5940
http://www.ti.com/lit/ds/symlink/tlc5940.pdf
за выходные успел проверить несколько своих гипотез.
http://www.youtube.com/watch?v=e9jpitH9mWQ
Выглядит, конечно, ужасно :) но суть:
1. линейка светодиодов - это один столбец большой результирующей матрицы
2. адресация строк сделана с помощью демультиплексора 74HC138 (3 пина)
3. работает регулировка яркости (1 пин ШИМ)
4. построена цепочка из 4 регистров сдвига 74HC595 для отображения соответствующих данных - работает отлично (реально будет 8 регистров сдвига - проверил программным путем - тоже работает без нареканий) - (3 пина)
5. отображение сделано на прерываниях (по переполнению таймера) - в основном цикле вообще ничего для отображения не крутится
P.S. похоже, специализированные контроллеры пока подождут. На "том, что есть" - вполне работает. Нужно дальше тестировать и оптимизировать.
P.P.S. битовые операции - очень мощная штука, понравилось! :)
Матрицы приехали. То, что было запрограммировано - с успехом отработало. Но.
Яркость получилась хиленькая (ну понятно, конечно, динамическая индикация, 8 строк, в лучшем случае это получается 1/8 от яркости полностью зажженного светодиода).
Как можно ее поднять?
Токоограничивающие резисторы вообще не ставил (кстати, может, все-таки поставить? но тогда яркость еще больше упадет...
Для питания анодов используется UDN. Может, ей дать питания побольше (например, 9 вольт). А сдвиговым регистрам от такого не сплохеет?
на udn дать то можно а вот сдвиговые.... вроде как 74-я серия она пятивольтовая...
у меня яркость вполне приличная без udn, матрица подключена напрямую к регистрам через сопротивления 470 ом
сниму видео, через 1/2 часика выложу
вот и видео
ого. Вот это яркость... у меня существенно слабее светит. Поделитесь скетчем (интересует, как вывод делаете?).
а матрицы такие же, как я ссылку указвал? или другие?
я вывожу так:
Собственно, тут все прозрачно. Ипользую порт L (mega2560). Работает, но как-то странно.
Первые тесты проводил на nano328 (порт D использовал) - все работало нормально, без приключений.
Сейчас пересобрал макет на mega2560... и грабли. Почти работает.. но выяснилось, что во-первых, ШИМ на мега - почему-то вдвое более медленный (490Гц, против 977Гц на 328 - и из-за этого регулировка яркости выглядит как жуткое мерцание), так еще и изредка (выглядит как "мерцание" предыдущей строки) - косячит с выбором строки.
Почему так - понять не могу...
Вопрос с яркостью матрицы пока снимается... UDN рабоатет не в своем режиме. Нужно ставить транзисторные ключи (спасибо, maksim).
щас нет возможности скинуть свой скетч
делал вывод с помощью вот этой команды
матрицы брал на ибее вот такие помоему это такие же как и у вас
ярокость такая без ключей напрямую к 74hc595 через сопротивления 470 ом. седня пришли ключи uln2803, не знаю ставить их или без них обойтись....
матрицы похожие, у вас чуть меньше по размеру, но такая же схемотехника. ULN для подключения не подойдут (потому, как на наших матрицах "общие аноды").
про аноды я тоже читал(((
матрица у меня действительно меньше (значительно меньше) 32 мм
управлять ими так же, доберусь до компа скетч выложу...
тоже есть нерешенные вопросы
вот и мой скетч..
оптимизировать конечно можно, избавится от степеней... скорость движения не знаю как регулировать...
PS поглядел даташит на uln2803. вроде как можно и нагрузку на массу вешать и на плюс... хотя гдето читал что грузить только к катодам...
В общем, движение идет! Уже вот что получается: http://www.youtube.com/watch?v=YcYIvSukPWQ
Потихоньку разбираюсь со своим проектом. В моем случае, самым правильным оказалось общие аноды матриц подключить с помощью транзисторов b772 (еще раз спасибо maksim).
Попутно решилась небольшая проблемка - на mega ШИМ оказался более медленным, чем на 328 (другие предделители стоят штатно).
Пока получается вот что (это горят "зеленые" и "красные" одновременно, могу включать произвольно):
Собственно, уже работает. С яркостью проблем нет. Токоограничительные резисторы в цепь регистров не поставил (к этому вопросу еще вернусь, думаю).
Но не без косяков. Вчера вечером запустил, сегодня с утра обнаружил "висящее" тело (на экране мусор, на ИК не реагируем). Перезагрузил - завелось. Почему так - пока не понимаю (может, есть идеи?)
И еще вчера обнаружил странную вещь, модуль RTC (DS1307) почему-то иногда (но довольно часто все-таки) выдает "крайние" состояния (2000 год или 2165 год и разный мусор в остальных параметрах даты/времени). Предполагаю, что это из-за того, что когда с модулем шел "диалог", сработало прерывание для динамической индикации и после возврата из прерывания - уже неудача.
у меня вот что получилось
остается с платой разобраться...
Одну проблему попборол (висящее тело), а вот с модулем часов пока не знаю, что делать...
Получается пока примерно так
Насколько я знаю, есть два способа:
1)Сначала подключаются все красные цвета. Выход последнего красного регистра подключается на вход первого зеленого регистра. (Ну или красный и зеленый меняем местами). Тогда при управлении засылаем сначала все зеленые биты, потом все красные.
2)Красная и зеленая линии идут параллельно. По одному пину шлем красные биты, по второму - зеленые.
Первый подход экономит один пин на МК, во втором чуть пироще становится логика управления.
Есть еще третий:
Регистры подключены последовательно, цвета подключены "через один" (т.е. красный-зеленый-красный-зеленый и т.п.).
В этом варианте трассировка платы должна получиться попроще (соответствующие пары регистров можно разместить прямо под соответствующей матрицей) и сделать трассировку одного "матричного блока", а потом просто поставить их друг-за другом нужное количество раз.
Но вот с логикой управления в этом варианте все не так хорошо (приходится учитывать чередование байт для разных цветов, особенно, когда требуется организовать какую-то "динамику" (типа "бегущей строки")).
Но это тоже решаемо (по ссылке выше видно).
Даташит на индикаторы внимательно читай. 7 вольт им мало.
Доделал схему с учетом всех имеющихся замечаний, да теперь яркость индикаторов могу регулировать тем же питанием от 6-12 вольт, но...фантомы никуда не исчезли...понимаете что такое фантомы да? то есть ненужные в текущий момент заметные на глаз слегка зажженые сегменты...Прошу помощи у гуру , что не так? Схема на данный момент такая...