Последовательное управление 25 светодиодами с одного контакта

У меня есть микроконтроллер с одним доступным цифровым выводом.

Как я могу управлять 25 светодиодами?

Светодиоды адресуются отдельно или вы хотите включать/выключать их все одновременно?
Светодиоды предназначены для отдельного доступа. Микроконтроллер не предназначен для их питания, он просто определяет их состояние. Кроме того, под «цифровым портом» я подразумеваю пин.

Ответы (9)

I2C IO Expander : - Некоторые накладные расходы протокола, но его можно расширить до очень большого (тысячи) количества светодиодов.

Простой регистр сдвига — очень простой интерфейс, светодиоды могут мигать при обновлении, если часы регистра сдвига работают недостаточно быстро. Использование регистра сдвига с двойной буферизацией исправит это.

Спасибо, это именно то, что я искал, но не знал, как они называются.
Для этого потребуется как минимум одна булавка, хотя. Разве сдвиговые регистры не требуют как минимум двух контактов для часов и данных?
@blalor - Да, но эти два контакта предназначены для совместного использования несколькими устройствами I2C.
I2C тоже две линии.
Dallas 1-wire нужен только один контакт, расширяется до N устройств.

Сдвиговый регистр и I2C — это хорошо, но только если есть хотя бы 2 свободных контакта. Оптимальным решением считаю удлинитель портов Dallas 1-wire DS2408 . Код для доступа к устройствам Dallas 1-wire не так уж сложен, и в Интернете есть множество примеров.

Вы можете использовать несколько DS2408, подключенных к одному контакту, или реализовать больше логики после одного DS2408, в зависимости от того, что вы хотите.

I2C можно использовать, если нет свободных контактов, при условии, что ваша шина I2C используется как таковая и нет конфликтов адресов.

Имея всего 1 вывод ввода-вывода, вы можете использовать 1-проводной расширитель/сдвиговый регистр или добавить другое устройство к шине I2C, как уже указывалось. Единственное, что еще не было упомянуто, это возможность добавления еще одного ведомого устройства к вашему SPI-порту.

SPI называется 4-проводным протоколом. У вас есть две линии данных, линия синхронизации и линия выбора (а также общая земля, но это обычно не учитывается). Однако первые три являются общими для всех устройств на шине, поэтому каждое устройство после первого занимает только еще одну дорожку/провод. SPI также увеличивает вашу шину до полного дуплекса, но это не имеет значения для этого приложения.

Я бы просто соединил несколько регистров сдвига вместе. (Конечно, это уменьшает частоту, с которой вы можете переключать светодиоды..)

Если у вас действительно есть только 1 контакт, шина Dallas 1-wire выглядит наиболее очевидной. Однако, поскольку это только вывод, есть более дешевые решения. Последовательная ШИМ-шина, по которой передаются как данные, так и часы, легко настраивается; см., например , страницу Романа Блэка, о которой также упоминал davidcary. Вам нужны только сдвиговые регистры с последовательным входом и параллельным выходом, такие как 74VHC164 , которые вы можете каскадировать для любого количества выходов (один '164 имеет 8 выходов).
В этом решении светодиоды управляются статически.

Если у вас есть другие вводы-выводы, которыми вы можете поделиться, например, SPI или I2C, вы можете выбрать более роскошные решения, такие как MAX6950 от Maxim . MAX6950 имеет управление миганием и яркостью, а также ограничение скорости нарастания, и это лишь некоторые из функций. Светодиоды мультиплексированы, что означает, что вам нужен только один 16-контактный драйвер.

Ответ, вероятно, «серия сдвиговых регистров», но можете ли вы уточнить свой вопрос? Какой микроконтроллер? Что вы подразумеваете под «цифровым портом»? Одна булавка?

Спасибо, я сделал уточнение, и сдвиговые регистры - это то, что я ищу. Спасибо.

25 светодиодов в зависимости от размера могут потреблять много энергии для одного цифрового вывода ввода-вывода на микроконтроллере. Вместо того, чтобы управлять ими напрямую, вам, вероятно, следует использовать простой переключатель на полевых транзисторах (чтобы ввод-вывод был привязан к затвору) для управления питанием цепи светодиодов.

В зависимости от вашего приложения, существуют другие более надежные способы сделать это. Но добавление фета, вероятно, заставит вас работать быстрее.

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

Что касается индивидуального управления 25 светодиодами с помощью одного порта ввода-вывода. Как предлагали другие, вы можете использовать несколько сдвиговых регистров. Существуют более сложные решения, связанные с обменом данными с другой ИС с использованием последовательного протокола (например, I2C).

Роман Блэк описывает систему shift1 , позволяющую независимо управлять любым количеством светодиодов с одного вывода микроконтроллера.

@Fake Name, @Tim, @pingswept — все предлагают объединить несколько регистров сдвига вместе, вывод данных DO на одном выводе данных на контакт ввода данных DI на следующем. 74HC595 подойдет. (Возможно , какой-то другой чип будет работать немного лучше ).

(@reemrevnivek, с таким гирляндным SPI, каждое устройство после первого не требует больше контактов на микроконтроллере, вопреки тому, что многие утверждают - зачем вы их слушаете? :-).

Обычно для этого требуется 4 контакта на микроконтроллере — MISO, MOSI, SCLK и защелка. Поскольку вы выполняете только вывод, вам не нужен входной контакт MISO.

Роман Блэк выяснил, что при очень тщательной синхронизации на одном выходе микроконтроллера и с некоторой тщательной настройкой аналоговой схемы один вывод микроконтроллера может управлять простой на вид аналоговой схемой, которая отделяет общий SCLK, DI вывод первой микросхемы в цепочке (MOSI) и общий сигнал защелки.

Затем этот микроконтроллер может управлять 25 светодиодами с одного контакта.

Вы можете подключить другой микроконтроллер через этот единственный контакт и общаться с ним через 1wire (или по вашему собственному протоколу, если вам нужна высокая скорость). Затем этот другой микроконтроллер имеет дело со светодиодами.