Багато виходів за допомогою зсувного регістру 74HC595, Апаратна платформа Arduino

Багато виходів за допомогою зсувного регістру 74HC595

Розглянемо типову ситуацію, коли потрібно більше виходів (пінів), ніж може запропонувати контролер Arduino. І тут найпростіший вихід — використовувати зсувний регістр. У цьому прикладі використовується 74HC595.

74HC595 - восьмирозрядний зсувний регістр з послідовним введенням, послідовним або паралельним виведенням інформації, з тригером-засувкою і трьома станами на виході.

Тобто цей регістр дозволяє контролювати 8 виходів, використовуючи всього кілька виходів на самому контролері. При цьому кілька таких регістрів можна послідовно об'єднувати для каскадування. Інші відповідні регістри можна пошукати за комбінацією "595" та "596" у серійному номері. Наприклад, STP16C596 може керувати 16 світлодіодами одночасно без використання додаткових резисторів.

У цій схемі використовується принцип послідовної синхронізованої передачі сигнаналів. Необхідні значення сигналу (біти HIGH або LOW) передаються в регістр один за одним, при цьому регістр отримує сигнал, що синхронізує, який змушує його вважати сигнал з входу. Коли байт (1 байт = 8 біт) рахований, значення всіх 8 біт розподілені на виходах. Тобто передаємо регістр сигнали послідовно, на виходах регістру маємо паралельно 8 сигналів.

74HC595 може віддавати сигнали як паралельно, а й послідовно. Це необхідно при об'єднанні кількох регістрів для отримання 16 і більше виходів. У цьому випадку перші 8 біт сигналу передаються на наступний регістр для паралельного виведення на ньому, про це буде більш детально розказано в другому прикладі.

Три можливі стани на виході, згадані вище, означають, що вихід регістру може мати не тількилогічний нуль або одиницю (HIGH або LOW), але і бути у високоомному (високоімпедансному) стані - коли вихід відключений від схеми. У високоомне стан може бути переведений окремий вихід, лише всі виходи регістру разом. Якщо ми говоримо про управління світлодіодами, це може бути корисним у випадку, коли ми хочемо переключити управління ними на інший контролер. У прикладі нижче цей стан не використовується і досить рідко може бути корисним.

Розпинування входів/виходів регістру

виходів
Піни 1-7, 15Q0 "Q7Паралельні виходи
Пін 8GNDЗемля
Пін 9Q7"Вихід для послідовного з'єднання регістрів
Пін 10MRСкидання значень регістру. Скидання відбувається при отриманні LOW
Пін 11SH_CPВхід для тактових імпульсів
Пін 12ST_CPСинонізація ("заскочування") виходів
Пін 13OEВхід для перемикання стану виходів із високоомного до робочого
Пін 14DSВхід для послідовних даних
Пін 16Vccживлення

Приклад з одним регістром

  • GND (пін 8) на землю
  • Vcc (пін 16) до живлення 5В
  • OE (пін 13) на землю
  • MR (пін 10) до живлення 5В

Отже, ми запитали регістр та зробили усі виходи активними. Це дещо спрощений спосіб підключення, тому що в момент подачі живлення на схему на виходах будуть випадкові значення. Можна контролювати пін MR та OE безпосередньо з Arduino, щоб обнулити входи та/або підключити виходи в потрібний момент. Для спрощення схеми тамінімізації кількості задіяних виходів Arduino ми будемо використовувати більш просту схему, оскільки значення регістрів та висновків будуть перезаписані, як тільки програми почне працювати.

допомогою

З'єднуємо з Arduino:

  • DS (пін 14) з 11-м цифровий вихід Arduino (на схемі синій провід)
  • SH_CP (пін 11) з 12-им цифровим виходом (жовтий провід)
  • ST_CP (пін 12) з 8-им (зелений провід)

Далі ці виходи в тексті та коді іменуються dataPin, clockPin та latchPin відповідно. Зверніть увагу на конденсатор 0.1 мікрофарада на latchPin, він мінімізує шум у схемі при подачі "защіпного" імпульсу.

регістру

Підключаємо світлодіоди до виходів регістра 74HC595, катод (коротка ніжка) світлодіода підключається до загальної землі, а анод (довга ніжка) через обмежувальний резистор 220-ОМ до виходів регістра. При використанні регістрів відмінних від 74HC595 слід звіритися з документацією та перевірити схему підключення. До деяких регістрів світлодіоди підключаються навпаки – катод до виходів.

регістру

багато

Нижче наведено код трьох програм. Перша, Hello world, виводить значення байта від 0 до 255. Друга по одному включає світлодіоди. Третя циклічно проходить масивом.

багато
регістру
Розуменню коду можуть допомогти "тимчасова діаграма сигналів" регістру та "таблиця логіки". Коли clockPin переглинається з LOW на HIGH, регістр зчитує значення з DS піна. У міру зчитування дані записуються у внутрішню пам'ять. Коли latchPin перемикається з LOW на HIGH, дані "замикаються", тобто передаються на виходи регістру, включаючи світлодіоди.

Приклад використання каскаду зсувних регістрів

У цьому прикладі підключаються два регістри, доводячи кількість виходів до 16, при цьому наArduino, як і раніше, задіяно ту ж кількість виходів.

Підключаємо другий регістр до живлення та загальної землі так само, як і перший.

зсувного

Далі DS вхід (пін 14) підключається до виходу Q7' (пін 9) першого регістра (синій провід). А SH_CP (пін 11) та ST_CP (pin 12) підключаються паралельно регістру до відповідних входів першого регістра. Жовтий та зелений провід відповідно.

допомогою

До виходів другого регістру підключаємо зелені світлодіоди.