Управление светодиодами методом bit bang

Я провожу исследование светодиодных чипов RGB, которыми MCU может управлять с помощью одного контакта. Я нашел этот светодиодный чип, и кажется, что управление светодиодами не так, как я думал. Я понимаю аппаратную часть, программная сторона - это проблема.

В техническом описании чипа, на странице 6, вы можете найти главу четвертый формат передачи данных.

Мои вопросы таковы: почему D2 имеет только второй 24 бит, третий 24 бит, в то время как D3 имеет только третий 24 бит и почему D4 не имеет битов? Что мне делать, когда я закончу с "обновлением светодиодов"?

Я думал, что управление светодиодами можно сделать так:

  • Допустим, у меня есть пять светодиодов для управления. Каждый светодиод имеет красный, зеленый и синий цвета, и каждый цвет является 8-битным. Пять раз по три-это массив в 15 байт.
  • Первые три байта в массиве предназначены для последнего светодиодного чипа. При отправке данных старший бит(бит 7) будет идти первым.
  • После первых трех байтов MCU остановится на X микросекунд. После задержки новые три байта подтолкнут старые три байта ко второму светодиодному чипу.
  • После того как MCU завершит отправку данных, он оставит контакт данных низким.

Спасибо!

, 👍0

Обсуждение

первые 24 бита предназначены для первого светодиодного чипа ... каждый светодиодный чип делает то же самое... после сброса он берет на себя ответственность за первые 24 бита данных, поступающих на его входной вывод, и передает остальные биты на свой выходной вывод, @jsotola

Этот протокол очень похож на протокол чипов WS2812. Для этого есть библиотеки. Поиск “Neopixel”., @Edgar Bonet

@EdgarBonet Да, но я хочу сделать собственную библиотеку для этого, так как Neopixel и FastLED слишком тяжелы для моих нужд., @Pararera


1 ответ


Лучший ответ:

1

Вам нужно отправить биты 5x24 без паузы. Если затем вы держите линию на низком уровне более 80us, это интерпретируется всеми драйверами светодиодов как сигнал сброса. Это явно не указано в таблице данных (по крайней мере, я ее не нашел), но я предполагаю, что сигнал сброса означает, что в это время все драйверы будут выводить полученные значения на светодиоды. Таким образом, вы можете одновременно зажечь все светодиоды с соответствующими данными.

Картина, на которую вы ссылаетесь, объясняет автоматическое каскадирование данных. Первая строка-это то, что вы на самом деле посылаете с вашего микроконтроллера, а также то, что видит первый светодиодный драйвер в строке. Затем этот драйвер будет потреблять первые 24 бита, которые он видит. После этого он переадресует остальные данные следующему драйверу светодиода. Теперь это будет потреблять первые 24 бита, которые он видит (таким образом, вторые 24 бита, которые вы отправили). Третий светодиодный драйвер сделает то же самое. Но поскольку в этом примере вы отправляете данные только для 3 светодиодов, никакие данные не пересылаются. Затем происходит импульс сброса, и в какой-то момент времени вы отправляете новый набор данных.

Таким образом, каждая строка представляет собой то, что соответствующий светодиодный драйвер увидит из данных, которые вы отправляете. D1 видит все данные. Каждый следующий светодиодный драйвер будет видеть на 24 бита меньше. D4 ничего не увидит, так как в этом примере вы посылаете только 3x24 бита.

,

Почему они используют паузу после каждых 3x24 бит?, @Pararera

Потому что в примере есть только 3 светодиода. Вы делаете паузу, когда отправляете все данные, потому что пауза более 80us приведет к тому, что светодиоды фактически активируют значения, которые вы отправляете. Вы можете отправлять сколько угодно данных, но в конце вам нужно сделать паузу, чтобы фактически вывести данные на светодиоды, @chrisl