Светодиодный матричный дисплей с разной яркостью
До сих пор я видел в проектах, связанных со светодиодными матрицами, что яркость полностью контролируется. Это означает, что яркость всего экрана может быть как уменьшена, так и увеличена. Как можно отображать только часть дисплея с большей яркостью, чем остальная матрица? Благодарю, если кто-нибудь предоставит некоторую псевдологику для достижения этого.
@Ram, 👍0
Обсуждение4 ответа
Короткий ответ: скорее всего, на аппаратном уровне это невозможно.
Единственный способ сделать это – изменить рабочий цикл каждого отдельного светодиода в матрице (процент времени включения по сравнению со временем выключения).
Устройство должно поддерживать это. Отредактируйте свой вопрос, указав номер модели светодиодной матрицы, которую вы используете, и ее технические характеристики.
(Обратите внимание, что если вы используете простую сетку светодиодов и адресацию строк/столбцов, вы можете использовать ШИМ, чтобы получить некоторый контроль над яркостью, но вы, вероятно, уже используете мультиплексирование светодиодов, что приводит к изменению яркости в зависимости от Светодиод более сложный.)
Есть два варианта:
- Используйте драйвер матрицы, поддерживающий различную яркость на пиксель, или:
- Быстро отображать различное расположение пикселей в быстрой последовательности. Пиксели, которые горят чаще, ярче.
Вариант 1 фактически выполняет вариант 2 в аппаратном обеспечении.
Теория проста: для одного светодиода вы можете изменять яркость с помощью ШИМ, который очень быстро включает и выключает светодиод. Чем дольше он горит, тем ярче выглядит.
То же самое можно сделать с матрицей пикселей. Вместо того, чтобы иметь дело с одним пикселем, вы, по сути, имеете дело с серией «изображений». Каждое «изображение» имеет разную комбинацию пикселей. Чем больше «изображений» у вас есть, тем больше вариаций яркости пикселей вы можете получить.
Например, если вы сначала отобразите кадр:
. . . . . . . . . . # # # # . . . # . . . . # . . # . . . . # . . # . . . . # . . # . . . . # . . . # # # # . . . . . . . . . .
и изображение:
. . . . . . . # . . # # # # # . . # . . . # # . . # . . # . # . . # . # . . # . . # # . . . # . . # # # # # . . # . . . . . . .
тогда вы получите яркую круглую форму с более тусклой косой чертой.
Единственная проблема с этим методом — мерцание. Ваша матрица должна очень быстро обновляться. Чем больше «изображений» вы должны отобразить последовательно, тем больше они будут мерцать и тем быстрее вам придется обновлять матрицу, чтобы компенсировать это.
Яркость светодиода обычно регулируется продолжительностью свечения данного светодиода. Светодиод, который горит 70 мс и выключается на 30 мс, будет ярче, чем светодиод, который горит всего 30 мс и выключается на 70 мс.
Итак, ответ заключается в том, чтобы сократить время, в течение которого светодиод горит, и уменьшить время, в течение которого светодиод выключен только для тех светодиодов на вашем дисплее, которые должны быть тусклыми.
Обычно это называется рабочим циклом светодиода. В Arduino функция встроенного процессора ШИМ или широтно-импульсного модулятора обычно используется для создания сигнала рабочего цикла. для светодиода.
Зависит от того, из каких светодиодов сделана ваша матрица. Одним из вариантов было бы сделать его из «умных» светодиодов в каждом месте, таких как WS2812B. Это чип и 3 светодиода в одном корпусе, обычно SMD-корпус размером 5050, но они также могут быть в корпусах со сквозными отверстиями, а также могут быть встроены в платы (например, посмотрите на Sparkfun и Adfruit). Последовательные данные отправляются со значением 0-255 для каждого светодиода, затем микросхема управления управляет 3 светодиодами с заданным уровнем ШИМ - 0/255 для выключения, 128/255 для 1/2, например, 255/255 на полную. Данные передаются от устройства к устройству для их загрузки, поэтому, например, матрице 8x8 потребуется 8x8x3 = 192 байта данных, отправляемых для загрузки дисплея. После этого Arduino больше не нужно ничего делать, пока матрица не изменится. WS2812B требует причудливой синхронизации для отправки данных 0/1 в комбинированной линии данных / тактового сигнала, варианты — библиотека Neopixel или библиотека FastLed.h для Arduino, чтобы отправлять данные со скоростью до 800 кГц. Существует также другая версия чипа, в которой используются отдельные линии синхронизации и данных. SPI.transfer, я думаю, может использоваться для еще более быстрой отправки данных. Я не помню артикул этого устройства навскидку, я им не пользовался.
Для готовых модулей 8x8 с использованием одноцветных светодиодов, как описано в других ответах, часто используется MAX7219 с 15 уровнями яркости, доступными для всего дисплея.
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Допустим, матрица сделана из простой сетки светодиодов (монохромных), а для управления дисплеем используется метод мультиплексирования сдвиговыми регистрами. Согласен, яркостью можно управлять по скважности, если она одинарная. Мой вопрос заключается в том, как добиться разной яркости в матричной светодиодной матрице с помощью методов ШИМ / рабочего цикла. Например, если я хочу отображать время в формате ЧЧ:ММ, в котором часть дисплея ЧЧ будет ярче, чем часть ММ., @Ram