Восемь светодиодов в ряд уже стоят на макетке, а у Uno кончились цифровые пины: экран забрал свою четвёрку, кнопки свою, гирлянде не досталось ничего. Лекарство стоит копейки — сдвиговый регистр 74HC595, микросхема в DIP-16 корпусе, которая разворачивает три провода в восемь выходов. Даташит описывает её как 8-битный регистр с последовательным входом, параллельным выходом и защёлкой, и каждое слово здесь рабочее: байт заезжает по одному проводу бит за битом, восемь ножек отдают его нагрузке, момент переключения выбираете вы. Как одиночный светодиод выживает на макетке, мы разбирали в уроке про светодиод; здесь задача плотнее — ужать целую гирлянду в три пина.
Три аббревиатуры работают в связке. DS — вход для битов: сюда по одному заезжает байт. SHCP — такт сдвига: каждый фронт проталкивает бит с DS внутрь и сдвигает предыдущих на позицию дальше. STCP — защёлка: фронтом на ней внутреннее состояние копируется на восемь выходов разом, и нагрузка не видит промежуточной каши. Внутри корпуса сидят два регистра, сдвиговый и выходной, и парность — то, ради чего берут именно 595: без защёлки светодиоды мигали бы в такт перекладыванию битов, а с ней картинка обновляется одним движением. Заодно это ответ на вопрос, зачем вообще парность: половина байта может ползти по проводам, а старый кадр на нагрузке стоит колом, пока вы не щёлкнете защёлкой.
Тройка уроков идёт по нарастающей: концепт и распиновка здесь, байты и бегущая волна во втором уроке, индикатор в третьем. Макетка собирается по обычным правилам — узел за узлом, как в переносе схемы на плату. Но у DIP-16 корпуса две ножки просят особого обращения, и о них я скажу до таблицы пинов: без этих перемычек регистр выглядит мёртвым, хотя собран безупречно.
Цикл выдачи байта и две перемычки
Полный цикл короткий. Стягиваете STCP в низ — защёлка заперта, нагрузка спит. Восемь раз повторяете пару: кладёте бит на DS, даёте фронт на SHCP — бит заезжает, предыдущие сдвигаются. Фронт на STCP — и весь байт разом встаёт на выходы Q0-Q7. Сдвиг и защёлка разделены не для красоты: пока новый байт ползёт по сдвиговому регистру, старый честно горит на выходах, и гирлянда не мигает мусором.
Со скоростью спокойно. shiftOut построен на digitalWrite, а тот на Uno тянется около 5 микросекунд, так что байт перекладывается за сотню с небольшим. Для светодиодов и индикаторов запас чудовищный — глаз ничего не заметит. Если однажды через регистры поедет матрица или лента, вспомните про аппаратный SPI: DS и SHCP, посаженные на MOSI (D11) и SCK (D13), прогоняют тот же байт за пару микросекунд. Даташит разрешает тактировать 595 на десятках мегагерц — узкое место живёт в программе, не в кремнии, и это редкий случай, когда микросхема заметно быстрее платы под ней. Механику битовых сдвигов я разбираю в уроке про битовые операции; без неё паттерны писать тяжело.
Теперь две перемычки, о которых обещал. MR на выводе 10 — сброс сдвигового регистра, активный по низкому уровню: сажается на 5 В, иначе регистр вечно в нулях. OE на выводе 13 — разрешение выходов, тоже активное по низу: его место на земле, иначе выходы зависают в третьем состоянии и ничего не засветится. Эти два провода — половина историй формата «собрал по картинке, тишина»: висящий вход CMOS-микросхемы — не ноль и не единица, а антенна, и поведение сборки зависит от настроения.
// Двоичный счётчик 0-255 на восьми выходах 74HC595.// DS -> D11, SHCP -> D12, STCP -> D8; MR -> 5 В, OE -> GND.const int DS = 11;const int SHCP = 12;const int STCP = 8; void show(byte pattern) { digitalWrite(STCP, LOW); // защёлка заперта shiftOut(DS, SHCP, MSBFIRST, pattern); // байт по битам, старший первым digitalWrite(STCP, HIGH); // фронт: байт разом на Q0-Q7} void setup() { pinMode(DS, OUTPUT); pinMode(SHCP, OUTPUT); pinMode(STCP, OUTPUT); Serial.begin(9600);} void loop() { for (int i = 0; i <= 255; i++) { show(i); Serial.println(i, BIN); delay(300); }}С перемычками в голове можно смотреть на корпус. Ножки у DIP-16 считаются против часовой стрелки от ключа-выемки: слева-внизу единица, слева-вверху шестнадцатая. Моя рабочая карта — в таблице; DS я сажаю на D11, чтобы однажды переехать на SPI без перепайки. Если корпус без маркировки, ключом служит выемка или точка у первой ножки, а направление отсчёта проверяется прозвонкой между восьмой ножкой и шиной земли за десять секунд.
Про ток — сразу, чтобы не пересобирать потом. Каждый выход по даташиту держит до 25 мА в пике, но сквозь корпус, через ножки питания, разрешено около 70 мА суммарно. Восемь красных светодиодов по 220 Ом тянут за сотню, если горят все разом: регистр работает на пределе и греется. На демо-стендах я ставлю 330 Ом — по (5 − 2) / 330 ≈ 9 мА на светодиод, 72 мА на все восемь, аккурат на границе; для статичных шильдиков поднимаю до 470. Расчёт по шагам — в уроке про бюджет проекта; для регистра в него добавляется одна строка — потолок корпуса, про который обычные пины Uno даже не спрашивают.
Симулятор ниже показывает механику по битам: движок не эмулирует ни shiftOut, ни саму микросхему, поэтому регистр собран прямо в скетче — из переменной, сдвигов и печати в монитор. Ручка A0 задаёт байт-замысел, каждое нажатие кнопки D2 — один такт SHCP, светодиод D12 играет роль вывода QH. На реальной плате эти такты генерирует shiftOut, а восемь выходов — ножки корпуса.
| Вывод | Имя | Куда на макетке |
|---|---|---|
| 14 | DS | биты байта: любой цифровой пин, у меня D11 — он же MOSI |
| 11 / 12 | SHCP / STCP | такт сдвига и защёлка: D12 и D8, любые цифровые |
| 10 / 13 | MR / OE | MR — на 5 В, OE — на GND, обе перемычки обязательны |
| 15, 1-7 / 9 | Q0-Q7 / QH | восемь выходов на нагрузку; QH — на DS следующего регистра в каскаде |
В мониторе видны ровно те события, что на реальной плате идут по двум проводам: бит на DS и содержимое сдвигового регистра после такта. Светодиод показывает, какой бит выдавлен наружу — в каскаде он уехал бы соседней микросхеме. Проверьте себя: выставьте ручкой замысел на 11110000 и доведите дело до защёлки — тактов всегда ровно восемь, байт есть байт, сколько его ни режь.
Строку reg= читайте справа налево: Serial печатает двоичный вид без ведущих нулей, и 1 после первого такта — это 00000001, где единица стоит на младшем, только что заехавшем месте. К восьмому такту старший бит байта, заехавший первым, оказывается в дальнем конце очереди — то же правило, что задаст порядок байтов в каскаде из раздела ниже: механизм один, меняется только длина очереди.
Если строки читаются туго, начните с урока про отладку через Serial — там про то, как печатать лог, который хватает глазами. Дальше по тройке — тот же байт против восьми светодиодов и первая настоящая волна.
Каскад: два регистра, те же три провода
Каскад — то, за что 595 и любят. Вывод QH — «последний вагон» сдвигового регистра: бит, который выдавливается наружу при заходе нового. Соедините его с DS второй микросхемы — и обе превратятся в один шестнадцатибитный регистр с общей защёлкой. Программа меняется минимально: два shiftOut подряд, затем один фронт STCP — и шестнадцать выходов обновляются за один кадр.
Классическая путаница — порядок байтов. Первым отправляется байт для дальнего регистра: пока вы перекладываете второй, первый уезжает по цепочке дальше. Перепутаете — светодиоды «поменяются местами», и искать это в железе бесполезно, порядок живёт в коде. Те же три пина Arduino обслуживают хоть два корпуса, хоть восемь — пины не кончаются, кончается другое. Первый байт я обычно отдаю динамике — гирлянде, второй — статичному статусу из светодиодов: глазу приятно, где движется, а служебные биты стоят ровно и обновляются той же одной защёлкой.
Питание. На форуме Амперки считали цепочку из 28 регистров на 220 светодиодов: блок 5 В и 5 ампер, и это с честными резисторами. Счёт простой — каждый корпус даёт те самые 70 мА потолка, минус то, что горит одновременно; умножьте на количество корпусов и сравните с источником. Где я сам останавливаюсь: после третьего корпуса. Дальше байты в loop перекладываются дольше, чем рисуются, и честнее взять драйвер вроде MAX7219, который закрывает и ток, и мультиплексирование, и держит яркость сам.
- 1. Чем по смыслу занимается STCP, если SHCP уже сдвинул биты?
- 2. Что будет на выходах, если ножку MR (pin 10) оставить висеть вместо 5 В?
- 3. Куда подключается вывод QH (pin 9) при каскаде двух 595?
- 4. Сколько примерно на Uno занимает shiftOut одного байта?
- 5. Почему восемь светодиодов по 220 Ом, зажжённые разом, — плохая идея для 595?
- 74HC595 — сдвиговый регистр с защёлкой: биты заходят по DS, двигаются фронтом SHCP, фронтом STCP байт разом встаёт на Q0-Q7
- MR (pin 10) — на 5 В, OE (pin 13) — на GND: без этих перемычек сборка выглядит мёртвой
- shiftOut на Uno перекладывает байт примерно за 100 мкс; SPI на MOSI/SCK делает то же за пару микросекунд
- Каскад: QH первой микросхемы на DS второй, два shiftOut, одна защёлка, первым уходит байт дальнего корпуса
- Потолок корпуса — около 70 мА: восемь светодиодов просят резисторы 330-470 Ом или транзисторные ключи
Частые вопросы по теме урока
- Чем по смыслу занимается STCP, если SHCP уже сдвинул биты?
- SHCP двигает биты внутри сдвигового регистра, нагрузка этого не видит. Фронт STCP копирует готовый байт на выходной регистр — восемь выходов обновляются разом. копирует содержимое сдвигового регистра на выходы
- Что будет на выходах, если ножку MR (pin 10) оставить висеть вместо 5 В?
- MR активен по низкому уровню: без перемычки на 5 В сброс прожимает сдвиговый регистр в нули. Висящий CMOS-вход — антенна, поведение станет зависеть от наводок. регистр уходит в сброс: на Q0-Q7 нули
- Куда подключается вывод QH (pin 9) при каскаде двух 595?
- QH отдаёт наружу бит, выдавленный при заходе нового. Соединение QH первой микросхемы с DS второй превращает пару корпусов в один 16-битный регистр. на DS следующего регистра
- Сколько примерно на Uno занимает shiftOut одного байта?
- shiftOut построен на digitalWrite по ~5 мкс на вызов: байт — сотня микросекунд с небольшим. Тот же байт через SPI на MOSI/SCK проходит за пару микросекунд. порядка 100 микросекунд
- Почему восемь светодиодов по 220 Ом, зажжённые разом, — плохая идея для 595?
- Восемь красных светодиодов по 220 Ом дают больше сотни миллиампер сквозь ножки питания — даташит разрешает около 70. Отсюда резисторы 330-470 Ом. суммарный ток корпуса выше допустимых 70 мА