Як я можу керувати багатьма світлодіодами лише за допомогою декількох контактів на мікрофоні?


10

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


Я не бачив. Можливо, дублюється: electronics.stackexchange.com/questions/9860/…
Daniel Grillo

3
Не забувайте порівнювати свої варіанти з витратами на придбання мікроконтролера, що трохи пізніший. Також зверніть увагу на портові та загальні обмеження струму.
joeforker

Коли я деякий час тому почав працювати з мікрофонами, це питання, яке я хотів, було легко знайти з чіткими відповідями. Мені вдалося дізнатися про чарліплекс і успішно реалізувати його, але я хотів відтворити тут питання з чудовою якістю відповідей SE-спільноти.
JYelton

1
@joeforker Ви маєте рацію, вартість мікрофону з більшою кількістю штифтів була досить мінімальною, вважаючи, що мій проект був одноразовим. Я подумав в один момент про використання мікрофона з приблизно 20 введеннями вводу для виконання завдання, але однією з моїх цілей був дуже маленький слід друкованої плати. Також дивовижний прикметник pinnier !
JYelton

Відповіді:


18

Існує кілька методів, за допомогою яких можна керувати великою кількістю світлодіодів від декількох штифтів вводу-виводу.

Найпростішим є стандартне мультиплексування відображення рядків / стовпців. За допомогою цієї техніки ви можете керувати світлодіодами з штифтами IO. Математично, робочий цикл: н(n/2)2n

1minimum(unique row patterns, unique column patterns)

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

Трохи складнішим є Charlieplexing . За допомогою цієї методики ви можете керувати світлодіодами з штифтами IO. Лише світлодіоди можуть світитися одночасно з цією методикою. Математично, робочий цикл:n n - 1n2nnn1

1minimum simultaneous sets

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

Останній метод, про який я зазначу, - це використовувати регістр зсуву або розширювач IO. За допомогою двох штифтів (або необроблений інтерфейс даних / тактових годин, I2C, або односпрямований SPI) ви можете керувати довільно великою кількістю світлодіодів. Коефіцієнт дії для будь-якого шаблону становить 100%, але швидкість оновлення обернено пропорційна кількості світлодіодів. Це найдорожчий метод. Для 15 світлодіодів, ймовірно, буде дешевше просто оновити до мікрографа з такою кількістю штифтів IO.


+1, щоб трохи пояснити аспект робочого циклу. У другому реченні про Charlieplexing, ти мав на увазі "привід n ^ 2-n LED з n штифтами IO?"
JYelton

Charlieplexing можна зробити дуже подібним до мультиплексування, якщо він просто опускає по одному світлу з кожного ряду. Насправді, можливо, «відновити» це світло, додавши діод, хоча, якщо драйвери стовпців не мають постійний струм, то це може відповідати яскравості інших.
supercat

11

n×(n1)n

Приклад:

Шість світлодіодів на 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

Схема Charlieplexing з 3 вихідними штифтами


Дякуємо вам за вихідний набір контактних даних, а також за корисну схему.
JYelton

1
Інший спосіб малювання схематичного виглядає як сітка NxN, але лише ведення стовпців та заміна первинної діагоналі шортами рядків-стовпців.
supercat

значить я не можу ввімкнути їх усі відразу? Чи означає це, що якщо я хочу їх увімкнути відразу, я повинен зробити достатньо часу, щоб задурити очі?
MaNyYaCk

@MaNyYaCk Так. Ти правий.
Даніель Грілло

8

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

За допомогою шарліплексу ви можете керувати n * (n-1) світлодіодами з n контактів.

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


Чи можете ви детальніше розглянути, якими будуть розширювачі вводу / виводу?
JYelton

3
Розширювач вводу / виводу - це зовнішня мікросхема, яка містить штифти і регістри вводу / виводу. Для спілкування з ними можна використовувати стандартну шину зв'язку, наприклад I2C або SPI.
mjh2007

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

Дякую - я повинен створити проект, який використовує розширювачі вводу / виводу, щоб змусити мене вивчити їх використання.
JYelton


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. У них є вбудований контрольний пристрій і вам потрібен лише один контактний контакт, щоб керувати якомога більше світлодіодів. Звичайно, тоді вам знадобиться адекватне окреме джерело живлення LED.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.