Управление туевой хучей (матрицей) светодиодов

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 20093
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Навеяно микросхемой IS31FL3731 http://www.issi.com/pdf/31FL3731.pdf

Сколькими светодиодами можно управлять с помощью одного 8-ми битного порта микроконтроллера/ПЛИС без применения каких-либо микросхем? 16-ю, скажете вы? Пятьюдесятью шестью, скажу я :)
Если между любыми двумя (из N) портами МК/ПЛИС подключить 2 светодиода встречно-параллельно, то всего получится N·(N-1) = 8·7 = 56 светодиодов. Получится вот такая матрица:
Изображение
Индикация, естественно, динамическая. Коэффициент мультиплексирования 1/8. Изображение может выводится как построчно по схеме с «общим катодом» (ОК), так и по столбцам по схеме с «общим анодом» (ОА).
Для поджига одного светодиода необходимо установить порт, к которому он подключен катодом (строку) на вывод лог. «0», анодом (столбец) — на вывод лог. «1», остальные порты перевести в третье состояние (ввод).
Кстати, нумерация светодиодов на картинке не очень информативна: С1-1 подключен между СА1 и СА2, а светодиод С1-2 между СА1 и СА3. Применительно к МК я бы обозначил светодиоды так:
Изображение
И нумерация от 0 до 7, и видно какой светик куда подключен (первая цифра показывает к какому порту подключен катод, вторая — анод). Коты постарше заметят, что это похоже на индексы элементов квадратной матрицы 8×8, у которой «удалили» главную диагональ и «сдвинули» две половины.
Допустим, мы хотим вывести изображение. Для его хранения хватит 7 байт (хранить по столбцам), однако проще отвести 8 байт и хранить по строкам, дополнив 7 бит не несущим информации, например, старшим «нулём». Итак, у нас есть 8 байт, содержащие 56 бит изображения. Пусть это будет вот такая «рожица»:
Изображение
Соответственно, в памяти хранится:
0b00001000 (№1)
0b00110110 (№2)
0b00100010 (№3)
0b01010101 (№4)
0b01000001 (№5)
0b00101010 (№6)
0b00110110 (№7)
0b00001000 (№8)
Изображение (кадр) выводится за 8 шагов, на каждом i-том шаге только один i-тый порт (i-тая строка) устанавливается на вывод лог. «0», остальные 7 — лог. «1» или третье состояние. Поэтому перед непосредственным выводом изображения в порт его необходимо преобразовать, либо хранить уже готовым для вывода. Второй вариант плох тем, что пропадает возможность «двигать» изображение и хранимая информация «не наглядна». Суть преобразования — вставка «0» (не замена, а именно вставка, т.е. со сдвигом) в i-тый бит информационного байта на i-том шаге.
Гениально (на мой взгляд) компактный код предложил Kavka:

Код: Выделить всё

ldi    mask, 0b11111111; загружаем маску
shift:; цикл
    ld     data, X; загружаем откуда-то (флэш/ОЗУ) инф. байт
    mov    tmp, data; копируем
    and    tmp, mask; делаем лог. «И» копии и маски
    add    data, tmp; складываем инф. байт с его маскированной копией
    st     X+, data; результат сохраняем
    lsl    mask; сдвигаем максу влево
    brne   shift; условие выхода из цикла — обнуление маски!
В результате получим:
0b00010000 (№1)
0b01101100 (№2)
0b01000010 (№3)
0b10100101 (№4)
0b10000001 (№5)
0b01001010 (№6)
0b00110110 (№7)
0b00001000 (№8)
Всё. Это можно выбрасывать в порт (PORTX) и направление порта (DDRX), не забывая устанавливать в «1» соответствующий битик DDR:
Изображение
На выходе должно получиться так:
Изображение
По даташитам AVRки выдерживают суммарный ток 200 мА при максимальном токе на пин 40 мА. 200 мА на 7 одновременно горящих светодиодов будет 28.5 мА, а с учётом мультиплексирования максимальное время горения будет 1/8, т.е. максимальный средний ток через светодиод будет 3.5 мА.
Однако можно умощнить вывод с сохранением третьего состояния. Например, вот такой схемой на четырёх транзисторах и двух диодах, предложенной Goldsmith:
Изображение
Для ограничения тока через светодиод можно использовать параллельно включённые резистор и диод: резистор будет ограничивать вытекающий ток (когда порт будет анодом), а диод будет шунтировать его для втекающего тока (когда порт — общий катод).
Вложения
3StateAmp.gif
(3.96 КБ) 1792 скачивания
05.GIF
(8.97 КБ) 1219 скачиваний
04.GIF
(13.54 КБ) 1155 скачиваний
03.GIF
(4.25 КБ) 1043 скачивания
02.GIF
(10.28 КБ) 1222 скачивания
01.GIF
(34.66 КБ) 1752 скачивания
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Gudd-Head писал(а): Сколькими светодиодами можно управлять с помощью одного 8-ми битного порта микроконтроллера/ПЛИС без применения каких-либо микросхем? 16-ю, скажете вы? Пятьюдесятью шестью, скажу я :)
Семьюдесятью двумя, говорят на EE, правда с дополнительными транзисторами, но все же без микросхем :wink:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 20093
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Эээ... Вы про это?
Изображение
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Неее, про это:
Изображение
N=n*(n+1)
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 20093
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Engineer_Keen писал(а):Неее, про это:
А вы уверены что это прокатит для 8-ми портов? :wink:
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Не знаю, больше 4х не проверял :oops: :)))
Реклама
Прорезались зубы
Сообщения: 231
Зарегистрирован: Пт ноя 16, 2007 13:52:44
Откуда: Рига, Латвия

Сообщение Pe3ucTop »

Всё конечно прикольно, даже видел реализацию 125 светодиодов на 12 пинов (далеко идти не надо саит марсохода), НО :
- такая реализация почти неподходит для промышленных 8*8 матриц светодиодов, т.к. у всех диодов соединён общий катод или анод. Можно конечно чередовать матрицы, но всё равно получить в таком случает трёхкратное (6-ти кратное) уменьшение количества пинов нереально.
Друг Кота
Аватара пользователя
Сообщения: 20093
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Pe3ucTop писал(а):неподходит для промышленных 8*8 матриц светодиодов
Тут речь про дискретные светодиоды :) Возможно даже использование мощных.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

"Не взлетит!"(С) :))
Количество геморроя превышает разумные пределы...
По хорошему... всё легко решается двумя портами, но с двумя портами и стандартные матрицы 8х8 прилепить можно... без головняка... :))
Однако можно умощнить вывод с сохранением третьего состояния. Например, вот такой схемой на четырёх транзисторах и двух диодах, предложенной Goldsmith:
74hc04 с рисунка убрать надобно... а то народ по незнанию его и прилепит... и "не робит, мля!"... :))
Да и... в коллектор Q2 сопротивление ~150 Ом поставить надобно... если типа рулить по схеме ОК...
Последний раз редактировалось HHIMERA Вт фев 26, 2013 12:34:57, всего редактировалось 2 раза.
"Я не даю готовых решений, я заставляю думать!"(С)
Друг Кота
Аватара пользователя
Сообщения: 20093
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Да где ж тут геморрой? :)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Если только в возможности запутаться при сборке :)))
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

Gudd-Head писал(а):Да где ж тут геморрой? :)
В количестве навесных элементов... :))
"Я не даю готовых решений, я заставляю думать!"(С)
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Опять жмёмся на копеечные 595е? :)))
Друг Кота
Аватара пользователя
Сообщения: 20093
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

ploop писал(а):Опять жмёмся на копеечные 595е?
Ставить 7 микросхем? а к ним ещё 56 транзисторов для увеличения тока? :)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

ploop писал(а):Опять жмёмся на копеечные 595е? :)))
Угу... Интересно, кто нибудь успел собрать девайс по схеме Goldsmith???
Сколько светодиодов ушло "в мир иной"??? :)))
"Я не даю готовых решений, я заставляю думать!"(С)
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2277
Зарегистрирован: Вс апр 20, 2008 23:34:26
Откуда: Москва

Сообщение ArtemKuchin »

Все бы хорошо, только вот 8*12=96 добавочных элементов выходит. Может быть оно лаже и работает, но хотелось вот такое "умощнение" проводить более компактно. А нет ли в мире готовой чипульки, которая как раз этот тип умощненния и делает?
Долой идиотизм!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 20093
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Ну ХЗ :dont_know:
В виде готовой микры я ничего не видел.
Мне видится 2 варианта:
1. Использовать компараторы. Тогда на каждый вывод потребуется 2 резистора, 2 транзистора и 2 компаратора. Компараторы взять неск-ко штук в 1 корпусе.
2. Попробовать "расщепить" каждый вывод на 2: логический сигнал ("0" или "1") и сигнал разрешения (Hi-Z или Push-Pull) и использовать обычные буферы с разрешением.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Так есть же драйверы 8х8 матриц?
Друг Кота
Аватара пользователя
Сообщения: 20093
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

ploop писал(а):Так есть же драйверы 8х8 матриц?
Так там вроде по-другому светодиоды подключены?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Там обычной матрицей. По сути это расширитель портов с I2C (на 16 штук) с динамикой внутри. Блин, никак не нагуглю, где-то натыкался.
Ответить

Вернуться в «Разные вопросы по МК»