Как сделать лпд

Обновлено: 08.07.2024

RGB LED Pixels - цифровая система состоящая из RGB-светодиодов (полноцветных), где у каждого светодиода имеется свой контроллер. Т.о. для каждого пикселя (RGB-светодиода) можно задать свой цвет, что позволяет создавать различные светодиодные решения. Подобным образом устроена цифровая RGB-светодиодная лента.
В каждом RGB LED-модуле или пикселе (в дальнейшем будем придерживаться данной терминологии, подразумевая, что это один полноцветный светодиод), контроллер управления (драйвер LED) и сам светодиод помещены в силиконовый водонепроницаемый корпус.

В данной статье мы рассмотрим 2 типа самых популярных на сегодняшний день RGB LED пикселей: диаметром 12мм и 20мм. И тот и другой тип имеют подобные чипы контроллеров, но содержат разные светодиоды и отличаются формой.

Итак, немного характеристик RGB LED-модулей:
- диаметр пикселей 12мм и 20мм
- 4-х проводная шина
- в 20мм пока что используется контроллер LPD6803. 12мм могут идти с контроллером WS2801 или LPD6803
- в LPD6803 (даташит) используется 15 битный цвет (5 бит на каждый цвет)
- в WS2801 (даташит) используется 24 бит (8 бит на цвет)
- питание 5В, потребление максимум 60мА на 1 пиксель (когда на максимум выставлены все цвета, т.е. отображается белый цвет)
- 2-пин SPI-подобный протокол связи

Теперь, небольшое видео иллюстрирующее работу 12мм RGB LED пикселей:

20мм RGB LED пиксели

20мм RGB LED пиксели

Силиконовые корпуса у этих пикселей немного больше 20мм, но если будете сверлить отверстия под них, то само отверстие лучше просверлить точно 20мм, RGB-пиксель точно туда войдет и будет плотно сидеть. В этих пикселях используются RGB-светодиоды 5050и они ярче чем 12мм пиксели. Однако, у них не очень хорошее смешивание цветов: если приглядеться, то можно увидеть составляющие цветов одного RGB-пикселя.

Максимальный ток потребления одного RGB модуля составляет 60мА, по 20мА на каждый цвет.

12мм RGB LED пиксели

12мм RGB LED пиксели

12мм пиксели немного вытянутее чем их 20мм собратья. В них используются 8мм светодиоды, которые менее яркие чем те, которые стоят в 20мм RGB-модулях. Но зато у них отличное смешивание цветов!

Энергопотребление точно такое же, как и у 20мм пикселей.

Расстояние между пикселями

Между собой RGB-пиксели соединены при помощи 4-х жильного плоского кабеля. Расстояние между ними разное, к примеру у рассматриваемых 20мм модулей оно составляет 63мм, а у 12мм расстояние составляет 90мм. Естественно, его можно увеличить, разрезав стандартный кабель и удлинив его на необходимое расстояние.

Расстояние между 16мм и 20мм RGB LED модулями

Применение

На представленных ниже видео, вы можете посмотреть различное применение RGB LED Pixels:

Контроллеры RGB LED

В каждом корпусе RGB-пикселя содержится микрочип - драйвер управления RGB-светодиодом. В основном сейчас используются WS2801 или LDP6803. Работают чипы очень просто - последовательные данные принимаются на одну ножку чипа, обрабатываются и транзитом выходят на другую ножку чипа. В чипе LPD6803 используется последовательность из 16 бит (15 бит данные цвета и 1 стартовый бит), в WS2801 задействовано 24 бита данных.

Т.о. если необходимо записать данные в 10 RGB LED пикселей, то необходимо передать последовательность из 10 * 16 или 24 бит.

Теперь рассмотрим различия между этими двумя драйверами.

LPD6803
Данный чип позволяет вручную управлять ШИМ яркостью цвета. Чем быстрее будет ШИМ, тем цвета в RGB LED будут более смазанные, однако частота ШИМ не может быть очень быстрой из-за задержки в чипах.
Следует заметить, что частота тактирования ШИМ такая же как и у данных, что позволяет сэкономить нам один вывод МК. Это хорошо, но к примеру на Arduino реализуется только при помощи прерывания.

WS2801
Этот контроллер более функциональный, помимо 24 битного цвета здесь используется встроенный ШИМ. Это экономит ресурсы управляющего микроконтроллера и в нем уже можно обойтись без прерываний.

Питание

Как уже было сказано выше, каждый RGB-светодиод может потреблять до 60мА от 5В источника питания. Соответственно при 20 RGB-пикселях максимальный ток потребления составит уже 1.2А, а при 25 - 1.5А. Естественно, это когда все светодиоды горят белым цветом (при белом цвете горят все 3 составляющие RGB светодиода).
Для такого количества пикселей необходимо использовать как минимум источник питания 5В, 2А. А можно поступить проще и воспользоваться старым ATX-блоком питания от компьютера (см. распиновку ATX) который обеспечивает ток до 30А. Не забудьте соединить вместе "земли" блока питания и вашего контроллера.

Подключение

Отличительной особенностью рассматриваемых RGB модулей является то, что они с цифровым управлением, а это значит, что для управления используется всего 2 провода (clock и data) и можно подключать столько RGB-пикселей, сколько вам нужно. Плюс 2 провода питания.

Однако не стоит забывать, что это не общая шина, где все пиксели включены в параллель. Проводники питания (5В и GND) включены везде параллельно, а вот управляющие линии в каждый RGB-пиксель подключены в "вход", соответственно выходящие линии к "выход", т.е. в разрыв.

Подключение RGB LED пикселей

Когда будете подключать к микроконтроллеру, то обратите внимание, чтобы к МК подключался вход "input" от RGB-пикселя. Для этого, обычно на платке подключения присутствуют стрелочки. К примеру на рисунке выше, большая стрелка в верхнем правом углу - это выход, а напротив нее, слева, находится вход. Далее, все остальные RGB LED пиксели подключаются от выхода к входу.

Рассмотрим практический пример подключения и использования с контроллером Arduino. Максимальный ток, который может обеспечить плата Arduino, составляет 500мА, поэтому необходимо использовать внешний более мощный источник питания.

Для RGB-пикселей с использованием контроллера LPD6803 красный провод необходимо подключить к +5В блоку питания, зеленый - к цифровому выводу 3 контроллера Arduino, желтый - к 2 цифровому выводу и наконец синий провод к минусу блока питания и GND контроллера Arduino.
Цвета проводников, при использования контроллера WS2801 могут отличаться! Поэтому перед подключением внимательно изучите инструкцию.

Подключение RGB LED пикселей к Arduino

12мм RGB-модули бывают как на контроллере WS2801, так и на старом LPD6803. Отличить их просто - для этого достаточно прочитать надпись на плате.

Надпись на плате WS2801

Учтите, что цвета проводом для контроллера WS2801 могут отличаться!

Программа для LPD6803

Учитывая то, что управление ШИМ чипа и линию данных можно обьединить, программа очень проста. В библиотеке используется прерывание, которое вызывается каждые несколько миллисекунд. Если данные пришли, то они пересылаются, если нет, то на выходе Arduino сохраняются импульсы, чтобы поддерживать частоту ШИМ. Для прерывания используется Timer 1.
Код программы базируется на bliptronics, саму библиотеку и пример можно скачать с GitHub.

Немного разъяснений по использованию библиотеки и strandtest.pde. Инициализация объекта происходит вызова процедуры с 3 параметрами: количеством RGB LED пикселей, указанием вывода data и clock.

Следующим этапом происходит вызов setup():

setCPUmax() - конфигурирует Timer1 для выдачи прерывания, чтобы обеспечить работу ШИМ, контроллера RGB LED. Значение может быть от 0 до 100.

begin() - начинает работу прерываний

show() - обновляет состояние всех RGB-пикселей. Данную функцию необходимо вызывать после того, как сделаны все установки для цветов и теперь их необходимо отобразить. Функция обновляет все RGB LED за раз, даже если вы обновили цвет только одного пикселя. Т.к. данные передаются сразу для всех RGB LED.

И напоследок, рассмотрим пример функции colorWipe. Функция создает подобие бегущего огня с изменением цвета. Это обычный цикл с инкрементированием пикселей (для подсчета общего количества пикселей удобно пользоваться функцией numPixels()) и установкой цвета от (инкремент i) к c. В данном случае цвет сохраняется в 16 битной переменной. Затем, записанные данные передаются в RGB LED дисплей для отображения, командой show(). И в конце цикла, небольшая задержка.

Снизу, приведена функция Color(), которая преобразовывает 8 битные Red, Green и Blue цвета в один 15-битный RGB-цвет для контроллера LED. Т.о. максимальное десятичное значение для каждого цвета составляет 31.

Пример вызова функции полного заполнения каждым цветом, с паузой 50мс между заполнением.

Программа для WS2801

Программа для данного контроллера аналогична LPD6803, но немного проще, т.к. нам не требуется постоянно выдавать сигнал от прерывания для ШИМ.

И пробежимся немного по основным функциям. Для начала, необходимо создать объект strip. Для этого, происходит вызов конструктора объекта с указанием количества RGB LED и пинами data и clock.

Далее, идет процедура setup():

begin() - производит начальную инициализацию библиотеки и выключает все RGB LED пиксели

show() - так же как и в примерах LPD6803 выше обновляет состояние всех RGB LED

И наконец рассмотрим пример функции colorWipe(). Она работает таким же образом как и в примере с LPD6803, но отличие заключается в том, что здесь используется 32 битная переменная для хранения цвета. Перед передачей данных, 32 битный цвет необходимо преобразовать к 24 битному значению при помощи функции Color(). Максимальное десятичное значения для каждого цвета составляет 255.

Напоследок, небольшой пример применения:

none Опубликована: 2011 г. 0 1


Вознаградить Я собрал 0 0

Одним из свойств pdq и lpd является то что они поддерживают печать по сети на принтер, физически подключенный к другой машине. С помощью правильной комбинации фильтров и разнообразных утилит, вы можете печатать используя lpr на принтера во всех видах сетей.

Для того чтобы разрешить удаленным машинам печатать на ваш принтер используя протокол LPD, вы должны перечислить эти машины в файле /etc/hosts.equiv или /etc/hosts.lpd . (Заметим, что hosts.equiv имеет список машин несколько с другим эффектом; будьте уверены что вы знаете что вы делаете если перечисляете машины в этом файле). Вы можете разрешить только определенным пользователям на других машинах печатать на ваш принтер используя атрибут rs ; читайте справочную страницу lpd для более детальной информации об этом.

Используя pdq

Используя PDQ, вы определяете принтер с типом интерфейса "bsd-lpd". Этот интерфейс берет в качестве аргумента имя удаленного сервера и имя очереди печати; помощник определения принтера запросит у вас эти параметры.

С помощью lpd

Для того чтобы печатать на другую машину вы должны сделать примерно такую запись в /etc/printcap :

Заметим что все равно есть директория очереди на локальной машине обслуживаемая lpd . Если удаленная машина занята или отключена, то задание с локальной машины будет находиться в очереди до тех пор пока оно не сможет быть послано.

С помощью rlpr

Вы также можете использовать rlpr для послания задания печати прямо в очередь удаленной машины без мороки с настройкой lpd для выполнения этой задачи. Это в большинстве случаев полезно в ситуациях когда вы печатаете на множество принтеров только время от времени. Из анонса rlpr :

Rlpr использует TCP/IP для посылки заданий печати на сервера с lpd, находящиеся где угодно в сети.

В отличии от lpr, он не требует чтобы удаленный принтер был явно известен машине с которой вы хотите печатать, (например в /etc/printcap ) и таким образом является значительно белее гибким и требующим меньше администрирования.

rlpr может использоваться везде где мог бы использоваться традиционный lpr, и он является совместимым с традиционным BSD lpr.

Основная мощь rlpr заключается в удаленной печати откуда угодно куда угодно без учета как система на которую вы хотите печатать была настроена. Rlpr может работать как фильтр, как и традиционный lpr, так что клиенты выполняемые на удаленной машине такие как netscape, xemacs, и т.п., могут печатать на вашу локальную машину с небольшими усилиями.

Rlpr доступен с Metalab .

Существует "Printing to Windows mini-HOWTO" в котором находится больше информации чем в данном документе.

Используя PDQ

Нет предопределенного интерфейса smb, что я сознаю, но он может достаточно легко создан используя модель, заданную интерфейсом appletalk на базе пакета Netatalk. Некоторые люди создали его и выслали его для включения в дистрибутив!

Прочитайте раздел о Windows/LPD в следующих разделах данного документа для дополнительных советов как сделать данный драйвер.

From LPD

Запись в /etc/printcap выглядит примерно так:

Вы должны прочитать документацию внутри скрипта smbprint для более детальной информации о настройке

Вы также можете использовать программу smbclient для посылки файла прямо на сервис печати SMB без вовлечения в этот процесс lpd . Смотрите справочные страницы.

Набор программ ncpfs включает утилиту названную nprint , которая обеспечивает те же самые возможности как и smbprint , но для NetWare. Вы можете получить ncpfs с Metalab. Информация из записи в LSM для пакета версии 0.16:

С помощью ncpfs вы можете монтировать тома вашего сервера netware под Linux. Вы также можете печатать в очереди печати netware и перенаправлять очереди печати netware на систему печати Linux. Вам необходимо ядро версии 1.2.x или 1.3.54 и выше. ncpfs НЕ работает с любыми ядрами 1.3.x ниже 1.3.54.

From LPD

Для того чтобы заставить nprint работать через lpd, вам нужно написать маленький скрипт для печати потока стандартного ввода на принтер NetWare, и установить его как if -фильтр для очереди печати lpd. Вы получите что-то подобное этому:

nprint-script может выглядеть примерно так:

Пакет netatalk включает что-то подобное nprint и smbclient . Другие имеют документированные процедуры для печати на и с сетей Apple много лучше чем я представлял; Смотрите Linux Netatalk-HOWTO.

Используя PDQ

PDQ включает в поставку объявление интерфейса, который называется "appletalk". Он использует пакет Netatalk для печати на подключенный к сети принтер Apple. Просто выберите этот интерфейс при использовании помощника добавления принтера в xpdq.

Принтеры HP и некоторые другие принтера идут с интерфейсом на который вы можете печатать прямо, используя протокол lpd. Вы должны следовать инструкциям, которые идут с вашим принтером или его сетевым адаптером, но в главном такие принтера являются "работающим" lpd., и обеспечивают одну или более очередь на которые вы можете печатать. Например HP может работать с printcap подобным:

Принтера HP Laserjet с интерфейсами Jet Direct iв общем поддерживают две встроенных очереди lpd -- "raw", которая принимает PCL (и возможно Postscript) и "text", которая принимает чистый ascii (и автоматически справляется с лестничным эффектом). Если у вас JetDirect Plus3 трех-портовый принтер, то очереди называются "raw1", "text2", и так далее.

Заметим, что компания ISS обнаружила набор атак denial of service (DoS), которые могут завесить интерфейсы HP Jetdirect. Большинство из них датируется началом осени 98.

В средах большого масштаба, особенно в больших средах где некоторые принтера не поддерживают PostScript, может быть полезно создать выделенный сервер печати на который все машины будут печатать и на котором все задания ghostscript будут запущены. Это позволит вам приостанавливать очереди печати или переорганизовывать их используя команды topq и lprm.

Чтобы сделать это, установить очередь на вашей машине, которая указывает на оборудованный ethernet принтер HP LJ (как показано выше). Затем укажите для всех клиентов вашей LAN, чтобы они печатали на очередь печати Linux (например lj-5 как в вышеприведенном примере).

Некоторые сетевые принтера HP по всей видимости не нуждаются в установке страницы заголовка (banner page) посылаемой клиентом; вы можете отключить внутренне генерируемую страницу заголовка зайдя на принтер с помощью telnet, нажав два раза return, набрав "banner: 0" и затем "quit". Существуют другие настройки, которые вы можете изменить тем же способом; наберите "?" для просмотра списка установок.

На старые принтера HP

Некоторые принтера (и печатающие сетевые "черные ящики") поддерживают только никуда не годные маленькие непротокольные соединения включая чистые TCP соединения. Примечательными в этой категории являются ранние модели карт JetDirect (включая некоторые карты JetDirectEx). В основном для печати на принтер вы должны открыть соединение TCP на принтер на указанный порт (обычно 9100 или 9100, 9101 и 9102 для трех-портовых принтеров) и запихнуть свое задание печати в принтер. LPRng имеет встроенную поддержку для выдачи заданий печати на произвольные порты TCP, но при использовании BSD lpd это не так легко. Это может быть выполнено на Perl:

Интерфейс PDQ использующий netcat должен выглядеть примерно так:

В случае отсутствия этой программы, она может быть реализована другими способами, например на языке Perl, используя нижеприведенную программу. Или для большей производительности используйте программу netcat ("nc"), которая выполняет то же самое. Большинство дистрибутивов должны иметь эту программу в своем составе.

Одна странность старых версий lpd в том что if не запускается для удаленных принтеров. (Версии после 0.43 или примерно такой имеют изменения внесенные на FreeBSD, так что они всегда работают). Если вам нужно выполнить if , вы можете сделать это установив двойную очередь и перенаправляя задание. Как пример рассмотри такой printcap :

в свете этого скрипт filter-lj-5 будет выглядеть так:

Опция -U lpr работает только если lpr запущен как демон, и она правильно устанавливает имя имя автора задания при его перенаправлении. Вы должны вероятно использовать более надежный метод получения имени пользователя, так как в некоторых случаях оно не является пятым аргументом. Смотрите справочную станицу printcap .

Печать из под клиента Windows (или OS/2) на сервер Linux прямо поддерживается через SMB используя пакет SAMBA, который также поддерживает разделение вашей файловой системы Linux с клиентами Windows.

Samba включает в себя довольно полную документацию. Вы можете либо настроить magic-фильтр на машине с Linux и печатать на нее в формате PostScript или установить специфичные для принтера драйвера на всех машинах с Windows и обрабатывать очередь без фильтрации. Полагаясь на драйвера Windows вы можете в некоторых случаях получить более качественный вывод, но это дает больше административной нервотрепки если у вас много машин с Windows. Так что сначала попробуйте PostScript.

Используя PDQ, вы должны настроить Samba для запуска команды pdq с соответствующими аргументами вместо команды lpr, которая выполняется по умолчанию. Я верю, что Samba будет запускать pdq с правами соответствующего пользователя, так что он должен работать нормально. Существует несколько настроек Samba, которые вы должны выставить для правильной работы:

этот параметр должен указывать на "фальшивый" файл, в котором вы должны перечислить доступные принтера. Все что нужно указать, это короткие и длинные сервера для каждого из принтера, один на каждую строку:

Короткое имя будет использоваться как имя принтера в команде печати:

Этот параметр должен быть установлен во что-нибудь подобное следующему pdq -P %p %s ; rm %s .

Для этого параметра пока нет хорошего значения. Буферизованные задания PDQ будут сниматься после истечения времени, так что если принтер не работает, то все нормально. Но если вы просто решили отменить свое намерение, то вы можете использовать программу xpdq для отмены заданий, но это неприменимо для Windows. Просто вствьте сюда ничего не делающую команду, такую как true. Если вы используете lpd или lprng в качестве основы, то соответствующая команда lprm должна нормально работать. Я не уверен, что Samba может идентифицировать номер задания в очереди lpr для запущенных pdq заданий.

Также PDQ не предоставаляет хорошего значения, которое можно поместить здесь. Распределенные системы не предлагают нормального решения для того, чтобы видеть очередь печати, но основанные на samba сервера должны иметь достойную схему. если вы используете lpd или lprng как основу, то соответствующая команда lpq c должна работать; вы просто не сможете увидеть задания, до того, как они будут отфильтрованы PDQ.

Пакет ncpfs включает демона называемого pserver, который может быть использован для обеспечения сервиса очередей печати NetWare. Как я понял эта система требует основанную на Bindery систему NetWare, т.е. 2.x, 3.x, или 4.x с разрешенным доступом к bindery.

Для более детальной информации о ncpfs и ее программе pserver смотрите FTP сервер ncpfs FTP.


Перепрограммируем рации на наши разрешенные частоты. Для этого нужен кабель программирования и программа. В комплекте с кабелем шел диск с ПО. Оттуда я установил драйвер CH340. Прошивка показана для модели рации Retevis RT22. С этим кабелем и программой можно перепрограммировать рации типа RT22, WLN, KD-C1, Zastone ZT-X6.




Сейчас перешил на PMR и LPD новые рации и будет теперь у меня 3 станции (одна старая Jet) с которыми можно общаться.
PMR-диапазон: 446.00000 МГц — 446.10000 МГц с шагом в 12.5 кГц. Максимально разрешенная выходная мощность передающих устройств не более 0,5 Вт. В России PMR-диапазон официально разрешили для нужд населения с 2005 года. Для общения на PMR диапазоне НЕ требуется специальной лицензии. PMR-связь очень доступна, так как в продаже имеется огромное количество дешёвых раций, работающих исключительно на PMR диапазоне. PMR диапазон имеет 8 каналов:
1 446.00625
2 446.01875 общепринятый автомобильный канал, аналог 15 канала дальнобойщиков CB-диапазона
3 446.03125
4 446.04375
5 446.05625
6 446.06875
7 446.08125
8 446.09375
LPD-диапазон: 433.075 МГц — 434.775 МГц с шагом в 25 кГц. Для общения на LPD диапазоне НЕ требуется специальной лицензии. LPD-связь так же очень доступна, так как в продаже имеется огромное количество дешёвых раций, работающих на LPD диапазоне.


RGB LED Pixels - цифровая система состоящая из RGB-светодиодов (полноцветных), где у каждого светодиода имеется свой контроллер. Т.о. для каждого пикселя (RGB-светодиода) можно задать свой цвет, что позволяет создавать различные светодиодные решения. Подобным образом устроена цифровая RGB-светодиодная лента.
В каждом RGB LED-модуле или пикселе (в дальнейшем будем придерживаться данной терминологии, подразумевая, что это один полноцветный светодиод), контроллер управления (драйвер LED) и сам светодиод помещены в силиконовый водонепроницаемый корпус.

В данной статье мы рассмотрим 2 типа самых популярных на сегодняшний день RGB LED пикселей: диаметром 12мм и 20мм. И тот и другой тип имеют подобные чипы контроллеров, но содержат разные светодиоды и отличаются формой.

Итак, немного характеристик RGB LED-модулей:
- диаметр пикселей 12мм и 20мм
- 4-х проводная шина
- в 20мм пока что используется контроллер LPD6803. 12мм могут идти с контроллером WS2801 или LPD6803
- в LPD6803 (даташит) используется 15 битный цвет (5 бит на каждый цвет)
- в WS2801 (даташит) используется 24 бит (8 бит на цвет)
- питание 5В, потребление максимум 60мА на 1 пиксель (когда на максимум выставлены все цвета, т.е. отображается белый цвет)
- 2-пин SPI-подобный протокол связи

Теперь, небольшое видео иллюстрирующее работу 12мм RGB LED пикселей:

20мм RGB LED пиксели

20мм RGB LED пиксели

Силиконовые корпуса у этих пикселей немного больше 20мм, но если будете сверлить отверстия под них, то само отверстие лучше просверлить точно 20мм, RGB-пиксель точно туда войдет и будет плотно сидеть. В этих пикселях используются RGB-светодиоды 5050и они ярче чем 12мм пиксели. Однако, у них не очень хорошее смешивание цветов: если приглядеться, то можно увидеть составляющие цветов одного RGB-пикселя.

Максимальный ток потребления одного RGB модуля составляет 60мА, по 20мА на каждый цвет.

12мм RGB LED пиксели

12мм RGB LED пиксели

12мм пиксели немного вытянутее чем их 20мм собратья. В них используются 8мм светодиоды, которые менее яркие чем те, которые стоят в 20мм RGB-модулях. Но зато у них отличное смешивание цветов!

Энергопотребление точно такое же, как и у 20мм пикселей.

Расстояние между пикселями

Между собой RGB-пиксели соединены при помощи 4-х жильного плоского кабеля. Расстояние между ними разное, к примеру у рассматриваемых 20мм модулей оно составляет 63мм, а у 12мм расстояние составляет 90мм. Естественно, его можно увеличить, разрезав стандартный кабель и удлинив его на необходимое расстояние.

Расстояние между 16мм и 20мм RGB LED модулями

Применение

На представленных ниже видео, вы можете посмотреть различное применение RGB LED Pixels:

Контроллеры RGB LED

В каждом корпусе RGB-пикселя содержится микрочип - драйвер управления RGB-светодиодом. В основном сейчас используются WS2801 или LDP6803. Работают чипы очень просто - последовательные данные принимаются на одну ножку чипа, обрабатываются и транзитом выходят на другую ножку чипа. В чипе LPD6803 используется последовательность из 16 бит (15 бит данные цвета и 1 стартовый бит), в WS2801 задействовано 24 бита данных.

Т.о. если необходимо записать данные в 10 RGB LED пикселей, то необходимо передать последовательность из 10 * 16 или 24 бит.

Теперь рассмотрим различия между этими двумя драйверами.

LPD6803
Данный чип позволяет вручную управлять ШИМ яркостью цвета. Чем быстрее будет ШИМ, тем цвета в RGB LED будут более смазанные, однако частота ШИМ не может быть очень быстрой из-за задержки в чипах.
Следует заметить, что частота тактирования ШИМ такая же как и у данных, что позволяет сэкономить нам один вывод МК. Это хорошо, но к примеру на Arduino реализуется только при помощи прерывания.

WS2801
Этот контроллер более функциональный, помимо 24 битного цвета здесь используется встроенный ШИМ. Это экономит ресурсы управляющего микроконтроллера и в нем уже можно обойтись без прерываний.

Питание

Как уже было сказано выше, каждый RGB-светодиод может потреблять до 60мА от 5В источника питания. Соответственно при 20 RGB-пикселях максимальный ток потребления составит уже 1.2А, а при 25 - 1.5А. Естественно, это когда все светодиоды горят белым цветом (при белом цвете горят все 3 составляющие RGB светодиода).
Для такого количества пикселей необходимо использовать как минимум источник питания 5В, 2А. А можно поступить проще и воспользоваться старым ATX-блоком питания от компьютера (см. распиновку ATX) который обеспечивает ток до 30А. Не забудьте соединить вместе "земли" блока питания и вашего контроллера.

Подключение

Отличительной особенностью рассматриваемых RGB модулей является то, что они с цифровым управлением, а это значит, что для управления используется всего 2 провода (clock и data) и можно подключать столько RGB-пикселей, сколько вам нужно. Плюс 2 провода питания.

Однако не стоит забывать, что это не общая шина, где все пиксели включены в параллель. Проводники питания (5В и GND) включены везде параллельно, а вот управляющие линии в каждый RGB-пиксель подключены в "вход", соответственно выходящие линии к "выход", т.е. в разрыв.

Подключение RGB LED пикселей

Когда будете подключать к микроконтроллеру, то обратите внимание, чтобы к МК подключался вход "input" от RGB-пикселя. Для этого, обычно на платке подключения присутствуют стрелочки. К примеру на рисунке выше, большая стрелка в верхнем правом углу - это выход, а напротив нее, слева, находится вход. Далее, все остальные RGB LED пиксели подключаются от выхода к входу.

Рассмотрим практический пример подключения и использования с контроллером Arduino. Максимальный ток, который может обеспечить плата Arduino, составляет 500мА, поэтому необходимо использовать внешний более мощный источник питания.

Для RGB-пикселей с использованием контроллера LPD6803 красный провод необходимо подключить к +5В блоку питания, зеленый - к цифровому выводу 3 контроллера Arduino, желтый - к 2 цифровому выводу и наконец синий провод к минусу блока питания и GND контроллера Arduino.
Цвета проводников, при использования контроллера WS2801 могут отличаться! Поэтому перед подключением внимательно изучите инструкцию.

Подключение RGB LED пикселей к Arduino

12мм RGB-модули бывают как на контроллере WS2801, так и на старом LPD6803. Отличить их просто - для этого достаточно прочитать надпись на плате.

Надпись на плате WS2801

Учтите, что цвета проводом для контроллера WS2801 могут отличаться!

Программа для LPD6803

Учитывая то, что управление ШИМ чипа и линию данных можно обьединить, программа очень проста. В библиотеке используется прерывание, которое вызывается каждые несколько миллисекунд. Если данные пришли, то они пересылаются, если нет, то на выходе Arduino сохраняются импульсы, чтобы поддерживать частоту ШИМ. Для прерывания используется Timer 1.
Код программы базируется на bliptronics, саму библиотеку и пример можно скачать с GitHub.

Немного разъяснений по использованию библиотеки и strandtest.pde. Инициализация объекта происходит вызова процедуры с 3 параметрами: количеством RGB LED пикселей, указанием вывода data и clock.

Следующим этапом происходит вызов setup():

setCPUmax() - конфигурирует Timer1 для выдачи прерывания, чтобы обеспечить работу ШИМ, контроллера RGB LED. Значение может быть от 0 до 100.

begin() - начинает работу прерываний

show() - обновляет состояние всех RGB-пикселей. Данную функцию необходимо вызывать после того, как сделаны все установки для цветов и теперь их необходимо отобразить. Функция обновляет все RGB LED за раз, даже если вы обновили цвет только одного пикселя. Т.к. данные передаются сразу для всех RGB LED.

И напоследок, рассмотрим пример функции colorWipe. Функция создает подобие бегущего огня с изменением цвета. Это обычный цикл с инкрементированием пикселей (для подсчета общего количества пикселей удобно пользоваться функцией numPixels()) и установкой цвета от (инкремент i) к c. В данном случае цвет сохраняется в 16 битной переменной. Затем, записанные данные передаются в RGB LED дисплей для отображения, командой show(). И в конце цикла, небольшая задержка.

Снизу, приведена функция Color(), которая преобразовывает 8 битные Red, Green и Blue цвета в один 15-битный RGB-цвет для контроллера LED. Т.о. максимальное десятичное значение для каждого цвета составляет 31.

Пример вызова функции полного заполнения каждым цветом, с паузой 50мс между заполнением.

Программа для WS2801

Программа для данного контроллера аналогична LPD6803, но немного проще, т.к. нам не требуется постоянно выдавать сигнал от прерывания для ШИМ.

И пробежимся немного по основным функциям. Для начала, необходимо создать объект strip. Для этого, происходит вызов конструктора объекта с указанием количества RGB LED и пинами data и clock.

Далее, идет процедура setup():

begin() - производит начальную инициализацию библиотеки и выключает все RGB LED пиксели

show() - так же как и в примерах LPD6803 выше обновляет состояние всех RGB LED

И наконец рассмотрим пример функции colorWipe(). Она работает таким же образом как и в примере с LPD6803, но отличие заключается в том, что здесь используется 32 битная переменная для хранения цвета. Перед передачей данных, 32 битный цвет необходимо преобразовать к 24 битному значению при помощи функции Color(). Максимальное десятичное значения для каждого цвета составляет 255.

Напоследок, небольшой пример применения:

none Опубликована: 2011 г. 0 1


Вознаградить Я собрал 0 0

Читайте также: