Я использую Atmel ATtiny13, который имеет 6-контактный ввод / вывод. Я хотел бы контролировать около 15 светодиодов, но не уверен, как все подключить. Кажется, без мультиплексирования я смог бы управлять только 6 светодиодами одновременно. Я ограничен только 6 светодиодами из-за размера микроконтроллера?
microcontroller
led
multiplexer
JYelton
источник
источник
Ответы:
Есть несколько методов, которые можно использовать для управления большим количеством светодиодов от нескольких выводов ввода-вывода.
Самым простым является стандартное мультиплексирование отображения строк / столбцов. С помощью этой техники вы можете управлять светодиодами с помощью выводов ввода / вывода. Математически, рабочий цикл: н( н / 2 )2 N
Это означает, что этот метод имеет рабочий цикл 100%, когда все светодиоды горят (или все строки или все столбцы идентичны), и рабочий цикл когда необходимо зажечь диагональную линию (или все строки разные ). Вы гарантируете 100% рабочий цикл только при освещении каждого светодиода или одного светодиода (или нулевого светодиода, но это не так уж много значит).1 / n
Чуть сложнее Чарлиплекс . С помощью этой техники вы можете управлять светодиодами с помощью выводов ввода / вывода. Только светодиодов могут гореть одновременно с этой техникой. Математически, рабочий цикл:n n - 1N2- н N n - 1
где одновременный набор представляет собой уникальную группу светодиодов, которая имеет общий анод или общий катод. (Это не было доказано, это именно то, к чему я пришел после обдумывания проблемы в течение минуты. Если рабочий цикл важен для вас, вы захотите рассмотреть это дальше.) Это гораздо более сложный расчет как интеллектуально и в вычислительном отношении, чем эквивалентный расчет для стандартного мультиплексирования. Фактически, вы получаете рабочий цикл когда все светодиоды горят, но некоторые (только некоторые) схемы из n-1 или меньше светодиодов могут иметь рабочий цикл 100%. Вам гарантирован только 100% рабочий цикл при освещении 1 светодиодом.1 / n
Последний метод, который я упомяну, это использование регистра сдвига или расширителя ввода-вывода. С двумя контактами (либо интерфейсом необработанных данных / тактового сигнала, I2C, либо однонаправленным SPI) вы можете управлять произвольно большим количеством светодиодов. Рабочий цикл для любого шаблона составляет 100%, но частота обновления обратно пропорциональна количеству светодиодов. Это самый дорогой метод. Для 15 светодиодов, вероятно, будет дешевле перейти на микро с таким большим количеством выводов ввода-вывода.
источник
Exemple:
Шесть светодиодов на 3 выводах:
источник
Без мультиплексирования (прямой привод) вы ограничены 6 светодиодами.
С помощью Charlieplexing вы можете управлять n * (n-1) светодиодами из n контактов.
С расширителями ввода / вывода или сдвиговыми регистрами вы можете управлять практически неограниченным количеством светодиодов.
Пример: MCP23008 8-битный расширитель ввода / вывода I2C
источник
Как @ mjh2007 предложил с расширителем I2C. Но есть и такие, которые предназначены для управления светодиодами, что позволит избежать необходимости использования внешних ограничивающих ток резисторов.
источник
Вот пример чарлиплексирования, которое я построил.
Это симулятор луча маяка, использующий серию из 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 для будущего развития.
Во всяком случае ... Я просто подумал, что может быть полезным иметь рабочий пример, похожий на ваш запрос.
Полный исходный код и схемы доступны на моем блоге.
источник
Другим вариантом будет использование светодиодов Neopixel. Они имеют встроенную управляющую микросхему, и вам нужен только один контакт, чтобы контролировать столько светодиодов, сколько вам нужно. Конечно, тогда вам потребуется отдельный отдельный источник питания для светодиодов.
источник