Страница 1 из 2

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

Добавлено: Вт фев 26, 2013 10:20:05
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:
Изображение
Для ограничения тока через светодиод можно использовать параллельно включённые резистор и диод: резистор будет ограничивать вытекающий ток (когда порт будет анодом), а диод будет шунтировать его для втекающего тока (когда порт — общий катод).

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

Добавлено: Вт фев 26, 2013 10:45:12
Engineer_Keen
Gudd-Head писал(а): Сколькими светодиодами можно управлять с помощью одного 8-ми битного порта микроконтроллера/ПЛИС без применения каких-либо микросхем? 16-ю, скажете вы? Пятьюдесятью шестью, скажу я :)
Семьюдесятью двумя, говорят на EE, правда с дополнительными транзисторами, но все же без микросхем :wink:

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

Добавлено: Вт фев 26, 2013 10:52:54
Gudd-Head
Эээ... Вы про это?
Изображение

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

Добавлено: Вт фев 26, 2013 10:55:16
Engineer_Keen
Неее, про это:
Изображение
N=n*(n+1)

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

Добавлено: Вт фев 26, 2013 10:59:24
Gudd-Head
Engineer_Keen писал(а):Неее, про это:
А вы уверены что это прокатит для 8-ми портов? :wink:

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

Добавлено: Вт фев 26, 2013 11:01:17
Engineer_Keen
Не знаю, больше 4х не проверял :oops: :)))

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

Добавлено: Вт фев 26, 2013 11:15:15
Pe3ucTop
Всё конечно прикольно, даже видел реализацию 125 светодиодов на 12 пинов (далеко идти не надо саит марсохода), НО :
- такая реализация почти неподходит для промышленных 8*8 матриц светодиодов, т.к. у всех диодов соединён общий катод или анод. Можно конечно чередовать матрицы, но всё равно получить в таком случает трёхкратное (6-ти кратное) уменьшение количества пинов нереально.

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

Добавлено: Вт фев 26, 2013 11:17:20
Gudd-Head
Pe3ucTop писал(а):неподходит для промышленных 8*8 матриц светодиодов
Тут речь про дискретные светодиоды :) Возможно даже использование мощных.

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

Добавлено: Вт фев 26, 2013 12:13:50
HHIMERA
"Не взлетит!"(С) :))
Количество геморроя превышает разумные пределы...
По хорошему... всё легко решается двумя портами, но с двумя портами и стандартные матрицы 8х8 прилепить можно... без головняка... :))
Однако можно умощнить вывод с сохранением третьего состояния. Например, вот такой схемой на четырёх транзисторах и двух диодах, предложенной Goldsmith:
74hc04 с рисунка убрать надобно... а то народ по незнанию его и прилепит... и "не робит, мля!"... :))
Да и... в коллектор Q2 сопротивление ~150 Ом поставить надобно... если типа рулить по схеме ОК...

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

Добавлено: Вт фев 26, 2013 12:27:16
Gudd-Head
Да где ж тут геморрой? :)

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

Добавлено: Вт фев 26, 2013 12:28:33
Engineer_Keen
Если только в возможности запутаться при сборке :)))

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

Добавлено: Вт фев 26, 2013 12:31:28
HHIMERA
Gudd-Head писал(а):Да где ж тут геморрой? :)
В количестве навесных элементов... :))

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

Добавлено: Вт фев 26, 2013 12:37:36
ploop
Опять жмёмся на копеечные 595е? :)))

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

Добавлено: Вт фев 26, 2013 12:47:30
Gudd-Head
ploop писал(а):Опять жмёмся на копеечные 595е?
Ставить 7 микросхем? а к ним ещё 56 транзисторов для увеличения тока? :)

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

Добавлено: Вт фев 26, 2013 12:53:54
HHIMERA
ploop писал(а):Опять жмёмся на копеечные 595е? :)))
Угу... Интересно, кто нибудь успел собрать девайс по схеме Goldsmith???
Сколько светодиодов ушло "в мир иной"??? :)))

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

Добавлено: Вт фев 26, 2013 14:57:04
ArtemKuchin
Все бы хорошо, только вот 8*12=96 добавочных элементов выходит. Может быть оно лаже и работает, но хотелось вот такое "умощнение" проводить более компактно. А нет ли в мире готовой чипульки, которая как раз этот тип умощненния и делает?

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

Добавлено: Вт фев 26, 2013 15:04:57
Gudd-Head
Ну ХЗ :dont_know:
В виде готовой микры я ничего не видел.
Мне видится 2 варианта:
1. Использовать компараторы. Тогда на каждый вывод потребуется 2 резистора, 2 транзистора и 2 компаратора. Компараторы взять неск-ко штук в 1 корпусе.
2. Попробовать "расщепить" каждый вывод на 2: логический сигнал ("0" или "1") и сигнал разрешения (Hi-Z или Push-Pull) и использовать обычные буферы с разрешением.

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

Добавлено: Вт фев 26, 2013 15:12:55
ploop
Так есть же драйверы 8х8 матриц?

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

Добавлено: Вт фев 26, 2013 15:16:10
Gudd-Head
ploop писал(а):Так есть же драйверы 8х8 матриц?
Так там вроде по-другому светодиоды подключены?

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

Добавлено: Вт фев 26, 2013 15:17:58
ploop
Там обычной матрицей. По сути это расширитель портов с I2C (на 16 штук) с динамикой внутри. Блин, никак не нагуглю, где-то натыкался.