Подключение 74HC595 к Arduino
Сдвиговый регистр
74HC595 к Arduino Uno: DS на D11 (MOSI), SHCP на D13 (SCK), RCLK на D10. Одна микросхема даёт 8 выходов на трёх выводах платы.
Схема подключения 74HC595 к Arduino
| 74HC595 | Arduino Uno |
|---|---|
| DS | D11 |
| QA | Светодиод led1, вывод A |
| QB | Светодиод led2, вывод A |
| QC | Светодиод led3, вывод A |
| QD | Светодиод led4, вывод A |
| QE | Светодиод led5, вывод A |
| QF | Светодиод led6, вывод A |
| QG | Светодиод led7, вывод A |
| QH | Светодиод led8, вывод A |
| RCLK | D10 |
| SHCP | D13 |
| VCC | 5V |
| GND | GND |
Схема из примера «Arduino Uno: восемь выходов из трёх проводов».
Выводы 74HC595
| Вывод | Назначение |
|---|---|
| DS | вход данных (SER) |
| QA | выход 0 |
| QB | выход 1 |
| QC | выход 2 |
| QD | выход 3 |
| QE | выход 4 |
| QF | выход 5 |
| QG | выход 6 |
| QH | выход 7 |
| RCLK | защёлка: переносит биты на выходы |
| SHCP | такт сдвига (SRCLK) |
| VCC | питание |
| GND | общий провод |
Код для Arduino
#include <SPI.h>
// Восемь светодиодов на трёх проводах.
//
// Регистр принимает байт последовательно и раскладывает его по восьми
// выходам. Выводов у платы это экономит пять, а регистров можно
// поставить цепочкой сколько угодно — каждый следующий добавляет
// восемь выходов и ни одного вывода платы.
//
// Выводы здесь не выбираются. Аппаратный SPI у Uno разведён жёстко:
// MOSI это 11, SCK это 13, а MISO на 12 — регистру он не нужен, тот
// ничего не отвечает. У ESP32 те же роли лежат на 23 и 18, и схема
// оттуда сюда не переносится.
//
// Защёлка (RCLK) — обычный вывод, здесь 10. Пока она внизу, выходы
// держат прошлое значение, сколько бы байтов ни прошло по шине; импульс
// вверх выставляет их разом. Без неё выходы моргали бы промежуточными
// состояниями при каждом сдвиге.
const int LATCH = 10;
void show(byte bits) {
digitalWrite(LATCH, LOW);
SPI.transfer(bits);
digitalWrite(LATCH, HIGH);
}
void setup() {
pinMode(LATCH, OUTPUT);
SPI.begin();
// Регистр быстрый, но провода на макетке — нет. Восьмая доля от
// 16 МГц — два мегагерца, и это работает на любой сборке.
SPI.setClockDivider(SPI_CLOCK_DIV8);
Serial.begin(9600);
}
void loop() {
// Бегущий огонь: единица едет по разрядам.
for (int i = 0; i < 8; i++) {
show(1 << i);
delay(120);
}
// И обратно.
for (int i = 6; i > 0; i--) {
show(1 << i);
delay(120);
}
// Двоичный счёт — то, ради чего регистр обычно и ставят: одно число
// становится состоянием восьми выходов.
for (int n = 0; n < 16; n++) {
show(n);
delay(150);
}
}
Скетч можно править и запускать в симуляторе без платы и установки среды.
Что учесть на Arduino
- Микросхемы соединяют каскадом: Q7′ (вывод 9) первой идёт на DS следующей, SHCP и RCLK общие, получаются 16, 24 и больше выходов.
- Аппаратный SPI Uno занимает D11 и D13: не используйте их под другое.
В железе
У настоящей микросхемы есть ещё OE (разрешение выходов — на GND) и MR (сброс — на VCC). Оставленные в воздухе, они дают случайное поведение. И резистор — на каждый светодиод.
Частые ошибки при подключении к Arduino
- Не дёрнуть защёлку: данные сдвинулись в регистр, но выходы не изменились, RCLK нужно перевести в HIGH после передачи.
- Светодиоды без резисторов на выходах: ток ограничен только ключами микросхемы, выходы перегреваются.
- Выходы не меняются — нет импульса на RCLK: данные сдвинулись, но не защёлкнулись.
- Восемь светодиодов по 20 мА — 160 мА через микросхему при допустимых 70. Берите ток 5–8 мА или ставьте транзисторы.
- OE и MR не подключены — микросхема ведёт себя случайно.
- Порядок битов перевёрнут — замените MSBFIRST на LSBFIRST, а не перепаивайте светодиоды.
Ещё по теме
- плата Подключение 74HC595 к ESP32
- деталь 74HC595: подключение к ESP32 и Arduino
- калькулятор Резистор для светодиода
Другие детали для Arduino
HC-SR04DHT22 (AM2302)BME280DS3231SSD1306 OLED 0,96″LCD 1602 с I2CMAX7219TM1637Модуль релеKY-040Клавиатура 4×4HX711ФоторезисторМодуль microSDRGB-светодиодСервопривод SG90Шаговый двигательКнопкаПотенциометрПьезопищалкаСветодиодПолзунковый переключательHC-SR501TTP223Датчик влажности почвыMQ-2LM35Джойстик KY-023DHT11HTU21D