Проект 19: Чип 74HC595

Описание

74HC595 — это распространённый IO-чип, который управляет несколькими выходами с помощью небольшого количества управляющих пинов, что делает его идеальным для сценариев, где нужно управлять множеством светодиодов или других выходных устройств.

В этом проекте мы управляем включением и выключением 7 светодиодов через чип 74HC595, чтобы добиться эффекта бегущих огней.

Аппаратное обеспечение

1. Плата разработки UNO R3 (ch340) x1

2. Чип 74HC595 x1

3. Светодиод x7

4. Резистор 220 Ом x7

5. Макетная плата x1

6. Соединительные провода

Принцип работы

74HC595 имеет два 8-битных регистра (которые можно считать «контейнерами памяти»). Первый называется сдвиговым регистром, а второй — регистром хранения/захвата.

Каждый раз, когда 74HC595 получает тактовый импульс, происходят две вещи:

Биты, содержащиеся в сдвиговом регистре, сдвигаются влево на одну позицию. Значение бита 0 перемещается в бит 1, значение бита 1 — в бит 2 и так далее.

Бит 0 в сдвиговом регистре принимает текущее значение на пине DATA. На фронте тактового импульса, если пин DATA высокий, в сдвиговый регистр записывается 1, иначе 0.

Этот процесс продолжается, пока 74HC595 получает тактовые импульсы.

Когда пин захвата (latch) активируется, содержимое сдвигового регистра копируется в регистр хранения/захвата. Каждый бит регистра хранения связан с одним из выходных пинов IC QA-QH. В результате, при изменении значения в регистре хранения изменяется и выход.

Анимация ниже поможет лучше понять это.

/data/weboffice/tmp/webword_1554412927/upload_post_object_v2_980920564

Технические характеристики

8-битный последовательный ввод

8-битный последовательный или параллельный вывод

Регистр хранения с трёхсостоянием на выходах

Сдвиговый регистр с прямой очисткой

Частота сдвига до 100 МГц (типичная)

Распиновка

GND — это пин земли.

VCC — питание для сдвигового регистра 74HC595, должен быть подключён к 5В.

SER (Serial Input) — последовательный вход, используется для передачи данных в сдвиговый регистр по одному биту.

SRCLK (Shift Register Clock) — тактовый вход для сдвигового регистра, срабатывает по фронту сигнала. Это означает, что биты записываются при нарастающем фронте тактового сигнала.

RCLK (Register Clock / Latch) — очень важный пин. Когда он подтянут к HIGH, содержимое сдвигового регистра копируется в регистр хранения/захвата, который затем появляется на выходах. Таким образом, пин захвата можно рассматривать как последний шаг перед отображением результата на выходах.

SRCLR (Shift Register Clear) — пин сброса сдвигового регистра, который устанавливает все биты в ноль. Поскольку это активный LOW пин, для сброса его нужно подтянуть к LOW.

OE (Output Enable) — также активный LOW пин: при подтягивании к HIGH выходы отключаются (становятся в состояние высокого импеданса). При подтягивании к LOW выходы работают нормально.

QA–QH — выходные пины.

QH’ — выводит бит 7 сдвигового регистра. Это позволяет объединять несколько 74HC595 последовательно. Если подключить этот пин к пину SER другого 74HC595 и подать на оба одинаковый тактовый сигнал, они будут работать как один чип с 16 выходами. С помощью этой техники можно объединять сколько угодно чипов.

Схема подключения

1. Подключите пин VCC чипа 74HC595 к 5В на плате, а пин GND к земле на плате.

2. Подключите DS (пин 14) чипа 74HC595 к D11 на плате, SHCP (пин 11) к D12, а STCP (пин 12) к D13.

3. Подключите Q0-Q7 (пины 15, 1-6) чипа 74HC595 к анодам 7 светодиодов через резисторы 220 Ом, катоды светодиодов подключите к земле.

Img

Пример кода

/*

Electronics Learning Starter Kit for Arduino

Project 19

74HC595 Chip

Edit By Keyes

*/

const int DS = 11; // serial data input

const int SHCP = 12; // Shift register clock input

const int STCP = 13; // Latch clock input

void setup() {

pinMode(DS, OUTPUT);

pinMode(SHCP, OUTPUT);

pinMode(STCP, OUTPUT);

}

void loop() {

for (int i = 0; i < 7; i++) {

digitalWrite(STCP, LOW);

shiftOut(DS, SHCP, MSBFIRST, 1 << i); // Move data into the shift register by serial

digitalWrite(STCP, HIGH); // Output shift register data to the latch in parallel

delay(200);

}

}

Объяснение кода

Сначала в коде определяются три переменные пинов: DS, SHCP и STCP, которые используются для последовательного ввода данных, тактового сигнала сдвигового регистра и тактового сигнала регистра захвата соответственно. Эти пины сопоставлены с конкретными пинами на плате Arduino через цифровые определения.

const int DS = 11; // Serial data input

const int SHCP = 12; // Shift register clock input

const int STCP = 13; // Latch register clock input

Далее, в функции setup() все три пина устанавливаются в режим вывода, так как они будут использоваться для отправки сигналов в сдвиговый регистр.

void setup() {

pinMode(DS, OUTPUT);

pinMode(SHCP, OUTPUT);

pinMode(STCP, OUTPUT);

}

Основная логика цикла

В функции loop() код управляет последовательным включением светодиодов через цикл. Цикл выполняется семь раз, и каждый проход управляет состоянием одного светодиода через сдвиговый и захватный регистры.

void loop() {

for (int i = 0; i < 7; i++) {

digitalWrite(STCP, LOW);

shiftOut(DS, SHCP, MSBFIRST, 1 << i);

digitalWrite(STCP, HIGH);

delay(200);

}

}

Установка STCP в низкий уровень: Перед отправкой данных пин STCP устанавливается в низкий уровень, чтобы подготовить сдвиговый регистр к приёму данных.

digitalWrite(STCP, LOW);

Сдвиг данных: Функция shiftOut() используется для передачи данных бит за битом с пина DS в сдвиговый регистр. Параметр MSBFIRST указывает, что данные отправляются начиная с самого старшего бита. Операция 1 << i — это побитовый сдвиг, который задаёт только один бит в высокий уровень (1), остальные биты — в низкий (0). Эта операция эффективно управляет тем, какой светодиод загорается.

shiftOut(DS, SHCP, MSBFIRST, 1 << i);

Установка STCP в высокий уровень: После отправки данных пин STCP устанавливается в высокий уровень. Это действие вызывает копирование содержимого сдвигового регистра в регистр захвата, обновляя состояние светодиодов.

digitalWrite(STCP, HIGH);

Задержка: Вызов функции delay(200) удерживает каждый включённый светодиод включённым в течение 200 миллисекунд, позволяя пользователю чётко видеть последовательность включения светодиодов.

Результат проекта

После загрузки кода 7 светодиодов будут загораться последовательно, создавая эффект бегущей воды. С помощью чипа 74HC595 мы управляем 7 выходами всего через три пина Arduino, что значительно экономит пины.

P19