Как я могу управлять многими светодиодами с помощью нескольких контактов на моем микро?


10

Я использую Atmel ATtiny13, который имеет 6-контактный ввод / вывод. Я хотел бы контролировать около 15 светодиодов, но не уверен, как все подключить. Кажется, без мультиплексирования я смог бы управлять только 6 светодиодами одновременно. Я ограничен только 6 светодиодами из-за размера микроконтроллера?


Я не видел. Возможно, продублировано: electronics.stackexchange.com/questions/9860/…
Даниэль Грилло,

3
Не забудьте сравнить ваши варианты со стоимостью покупки немного заостренного микроконтроллера. Также обратите внимание на порт и общие ограничения тока.
Joeforker

Когда я начал работать с micros некоторое время назад, я хотел бы, чтобы этот вопрос было легко найти с четкими ответами. Мне удалось узнать о charlieplexing и успешно реализовать его, но я хотел воссоздать вопрос здесь с превосходным качеством ответов сообщества SE.
Джелтон

1
@joeforker Вы правы, стоимость микро с большим количеством контактов была довольно минимальной, учитывая, что мой проект был разовым. В какой-то момент я подумал об использовании микро с примерно 20 выводами ввода / вывода для выполнения этой работы, но одной из моих целей было очень маленькое использование печатной платы. Кроме того, удивительный прилагательное пиннир !
Джелтон

Ответы:


18

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

Самым простым является стандартное мультиплексирование отображения строк / столбцов. С помощью этой техники вы можете управлять светодиодами с помощью выводов ввода / вывода. Математически, рабочий цикл: н(n/2)2n

1minimum(unique row patterns, unique column patterns)

Это означает, что этот метод имеет рабочий цикл 100%, когда все светодиоды горят (или все строки или все столбцы идентичны), и рабочий цикл когда необходимо зажечь диагональную линию (или все строки разные ). Вы гарантируете 100% рабочий цикл только при освещении каждого светодиода или одного светодиода (или нулевого светодиода, но это не так уж много значит).1/n

Чуть сложнее Чарлиплекс . С помощью этой техники вы можете управлять светодиодами с помощью выводов ввода / вывода. Только светодиодов могут гореть одновременно с этой техникой. Математически, рабочий цикл:n n - 1n2nnn1

1minimum simultaneous sets

где одновременный набор представляет собой уникальную группу светодиодов, которая имеет общий анод или общий катод. (Это не было доказано, это именно то, к чему я пришел после обдумывания проблемы в течение минуты. Если рабочий цикл важен для вас, вы захотите рассмотреть это дальше.) Это гораздо более сложный расчет как интеллектуально и в вычислительном отношении, чем эквивалентный расчет для стандартного мультиплексирования. Фактически, вы получаете рабочий цикл когда все светодиоды горят, но некоторые (только некоторые) схемы из n-1 или меньше светодиодов могут иметь рабочий цикл 100%. Вам гарантирован только 100% рабочий цикл при освещении 1 светодиодом.1/n

Последний метод, который я упомяну, это использование регистра сдвига или расширителя ввода-вывода. С двумя контактами (либо интерфейсом необработанных данных / тактового сигнала, I2C, либо однонаправленным SPI) вы можете управлять произвольно большим количеством светодиодов. Рабочий цикл для любого шаблона составляет 100%, но частота обновления обратно пропорциональна количеству светодиодов. Это самый дорогой метод. Для 15 светодиодов, вероятно, будет дешевле перейти на микро с таким большим количеством выводов ввода-вывода.


+1 для объяснения немного об аспекте рабочего цикла. Во втором предложении о Чарлиплексировании вы имели в виду «управлять n ^ 2-n светодиодами с n выводами IO?»
JYelton

Чарлиплексирование может быть сделано очень похоже на мультиплексирование, если один просто пропускает один свет из каждого ряда. На самом деле, может быть возможно «восстановить» этот свет, добавив диод, хотя, если драйверы колонок не являются выходами постоянного тока, сделать так, чтобы он соответствовал яркости других, может быть трудно.
суперкат

11

n×(n1)n

Exemple:

Шесть светодиодов на 3 выводах:

PINS        LEDS
0 1 2   1 2 3 4 5 6
0 0 0   0 0 0 0 0 0
0 1 Z   1 0 0 0 0 0
1 0 Z   0 1 0 0 0 0
Z 0 1   0 0 1 0 0 0
Z 1 0   0 0 0 1 0 0
0 Z 1   0 0 0 0 1 0
1 Z 0   0 0 0 0 0 1
0 0 1   0 0 1 0 1 0
0 1 0   1 0 0 1 0 0
0 1 1   1 0 0 0 1 0
1 0 0   0 1 0 0 0 1
1 0 1   0 1 1 0 0 0
1 1 0   0 0 0 1 0 1
1 1 1   0 0 0 0 0 0

Схема Чарлиплексирования с 3 выходными контактами


Спасибо за набор выводных выводов, а также за полезную схему.
Джелтон

1
Другой способ рисования схемы - это сетка NxN, но только для столбцов и замены первичной диагонали шортами столбцов строк.
суперкат

значит я не могу включить их всех сразу? Означает ли это, что если я хочу включить их всех сразу, мне нужно делать достаточно времени, чтобы обмануть глаза?
MaNyYaCk

@MaNyYaCk Да. Ты прав.
Даниэль Грилло

8

Без мультиплексирования (прямой привод) вы ограничены 6 светодиодами.

С помощью Charlieplexing вы можете управлять n * (n-1) светодиодами из n контактов.

С расширителями ввода / вывода или сдвиговыми регистрами вы можете управлять практически неограниченным количеством светодиодов.
Пример: MCP23008 8-битный расширитель ввода / вывода I2C


Можете ли вы рассказать, какими будут расширители ввода / вывода?
Джелтон

3
Расширитель ввода / вывода - это внешняя микросхема, содержащая выводы и регистры ввода / вывода. Вы можете использовать стандартную коммуникационную шину, такую ​​как I2C или SPI, для связи с ними.
mjh2007

+1 С TLC594 от TI можно управлять большим количеством светодиодов ( focus.ti.com/lit/ds/symlink/tlc5940.pdf ), но это может быть излишним для многих рабочих мест. search.digikey.com/scripts/DkSearch/...
Kenny

Спасибо - я должен разработать проект, который использует расширители ввода / вывода, чтобы заставить меня изучить их использование.
Джелтон


2

Вот пример чарлиплексирования, которое я построил.

Это симулятор луча маяка, использующий серию из 12 светодиодов, которые объединены в 4 GPIO, чтобы провести луч света вокруг диска. Здесь есть видео об этом .

Проект основан на PIC, я использую PIC12f683, который также является 8-контактным uP и может считаться сопоставимым с 8-контактным AVR.

Интенсивность светодиода определяется прерыванием, которое обеспечивает 32-ступенчатую ШИМ на частоте около 60 Гц. Только два светодиода могут гореть одновременно, давая 50% -ую нагрузку на каждый светодиод, так как это было все, что мне было нужно. Это также дает хороший компромисс между частотой обновления ШИМ и разрешением.

Кодирование для использования charlieplexing на самом деле довольно просто, если вы придерживаетесь «классического» метода освещения только одного светодиода в любой момент времени с очень высокой частотой обновления. Сначала я разрабатываю необходимые PORT и TRIS (специальные регистры) на бумаге, а затем сохраняю результаты в статическом массиве. Чтобы зажечь светодиод x, PIC просто должен найти значение по индексу массива [x] и записать их непосредственно в PORT (с небольшой маскировкой, чтобы сохранить состояние других выводов, не используемых в charliplex).

В моем проекте только 12 светодиодов, а не 15 или максимум 20, которые позволят 5 GPIO, так как я хотел оставить один запасной GPIO для будущего развития.

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

Полный исходный код и схемы доступны на моем блоге.


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.