Сдвиговый регистр 74HC595 на Arduino: 3 пина → 8 выходов
Светодиодная шкала, бегущая волна, матрица 8 на 8 — и вот Uno кончилась: цифровых пинов четырнадцать, половина уже занята экраном и кнопками. Сдвиговый регистр 74HC595 решает это арифметикой: три пина Arduino управляют восемью выходами регистра, а каскадом из двух корпусов — шестнадцатью, из трёх — двадцатью четырьмя.
Ниже — распиновка, разбор shiftOut по тактам, зачем нужна защёлка STCP и скетч бегущей волны. В нашем симуляторе регистр ничего не стоит: как только скетч вызывает shiftOut, карточка с восемью светодиодами Q0-Q7, статусом защёлки и битовым дампом собирается сама — виден каждый такт.
Зачем 595, когда есть pinMode
Восемь обычных светодиодов съедают восемь пинов — классический пример в уроке про светодиодную шкалу выживает только потому, что больше ничего не подключено. Добавьте экран, кнопки и датчики — пины закончились. 74HC595 переводит выходы в «последовательный» формат: вы толкаете биты по одному проводу данных, тактируете вторым, а защёлкиваете картинку третьим. Восемь выходов Q0-Q7 отдают по 20 мА каждый — светодиоду с резистором хватает. А на входах экономят парный чип 74HC165, но это другая история.
Пины 74HC595: что куда подключать
| Пин | Название | Роль | Куда на Arduino |
|---|---|---|---|
| DS (SER) | данные | сюда попадает бит на каждом такте | D8 |
| SHCP (SRCLK) | такт сдвига | сдвигает внутренний регистр на 1 бит | D9 |
| STCP (RCLK) | защёлка | фронт HIGH выкладывает байт на выходы | D10 |
| Q0-Q7 | выходы | 8 линий на нагрузку | светодиоды через 220 Ом |
| OE, MR | выход и сброс | OE на GND — выходы активны, MR на 5 В | GND и 5V |
| VCC, GND | питание 2-6 В | — | 5V и GND |
shiftOut изнутри: восемь тактов и защёлка
shiftOut(пин данных, пин такта, MSBFIRST, байт) делает ровно восемь тактов: на каждом — очередной бит на DS и фронт такта на SHCP. MSBFIRST толкает старший бит первым, LSBFIRST — младшим; перепутаете порядок — байт ляжет зеркально: 0b10110001 при не том порядке читается на выходах как 0b10001101. Пока STCP держится низким, выходы Q0-Q7 не трогаются: старая картинка горит, пока вы сдвигаете новую. Фронт HIGH на STCP защёлкивает накопленный байт на выходы — картинка меняется одним мгновением, без мелькания промежуточных битов. Это главное, что делает 595 удобным: сдвиг и показ разделены.
Скетч: бегущая волна на восьми выходах
В симуляторе расставлять ничего не надо: shiftOut сам собирает карточку регистра, связав пины данных и такта с первого вызова. На живой макетке для той же волны понадобятся регистр, восемь светодиодов и восемь резисторов 220 Ом — сами диоды и прочая мелочёвка лежат в палитре «Макетка», если захотите собрать стенд с обычными OUTPUT-ножками и сравнить число занятых пинов.
const byte PIN_DS = 8; // DS — данныеconst byte PIN_SHCP = 9; // SHCP — такт сдвигаconst byte PIN_STCP = 10; // STCP — защёлка int volna = 0b00000001; // горящий бит void vyvod(int b) { digitalWrite(PIN_STCP, LOW); // готовим защёлку shiftOut(PIN_DS, PIN_SHCP, MSBFIRST, b); // 8 тактов, старший бит первым digitalWrite(PIN_STCP, HIGH); // фронт: байт на выходах Q0-Q7} void setup() { pinMode(PIN_DS, OUTPUT); pinMode(PIN_SHCP, OUTPUT); pinMode(PIN_STCP, OUTPUT); Serial.begin(9600);} void loop() { vyvod(volna); Serial.print("volna: "); Serial.println(volna, BIN); volna = volna << 1; // бит уезжает влево if (volna > 0b10000000) volna = 0b00000001; delay(400);}В карточке регистра дамп пройдёт по кругу 0b00000001 → 0b00000010 → … → 0b10000000 → снова 0b00000001, и те же числа в двоичном виде напечатает монитор порта. К битовым сдвигам и маскам этот скетч подводит идеально: язык битовых операций разобран в уроке про побитовые операции.
Каскад двух 595 и чего регистр не умеет
Каскад — главная магия 595: выход QH' первого корпуса подключается к DS второго, такты общие, и два байта уезжают паровозиком по одному проводу. Защёлка тоже общая: сдвинули шестнадцать бит — щёлкнули STCP — обе картинки обновились разом. Честная оговорка про симулятор: карточка в нём показывает один регистр, и последний сдвинутый перед защёлкой байт — тот, что вы увидите; каскадную разводку проверяйте на макетке, семантика там ровно та же. Чего 595 не умеет: ШИМ на выходах (только вкл/выкл), входов нет — только выход, и суммарный ток корпуса ограничен, поэтому восемь ярких светодиодов питайте аккуратно. Для диммирования и лент существуют драйверы с ШИМ на каждом канале — но это уже следующий уровень.