Главная Новости

Как подключить сдвиговый регистр 74HC595 к Arduino

Опубликовано: 27.08.2018

видео Как подключить сдвиговый регистр 74HC595 к Arduino

Видео урок 2 — Подключаем сдвиговый регистр 74НС595 к Arduino. «Бегущие» огни

1 Описание и назначение сдвигового регистра 74HC595

Сдвиговый регистр 74HC595 и ему подобные используются в качестве устройств преобразования последовательных данных в параллельные, а также может использоваться как «защёлка» для данных, удерживая заданное состояние.



Схема выводов («распиновка») приведена на рисунке слева.

Назначение выводов сдвигового регистра 74HC595 и внешний вид в выводном корпусе DIP-16

Назначение выводов микросхемы 74HC595 такое.

Обозначение вывода Назначение
Q0…Q7 выходы параллельных данных;
GND земля (0 В);
Q7' выход последовательных данных;
MR сброс ведущего устройства (активный низкий);
SHCP вход тактовых импульсов сдвигового регистра;
STCP вход тактовых импульсов «защёлки»;
OE разрешение вывода (активный низкий);
DS вход последовательных данных;
VCC питание +5 В.

Конструктивно микросхема выполняется в нескольких типах корпусов; я буду использовать микросхему в выводном корпусе DIP-16, т.к. его проще использовать с макетной платой (бредбордом).


Семисегмент и сдвиговый регистр 74HC595

2 Краткое описание интерфейса SPI

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


Сдвиговый регистр 74HC595 используем для циферблата Ардуино

Среда разработки для Arduino имеет встроенную библиотеку работы по интерфейсу SPI. При её применении используются цифровые выводы с 10 по 13 на платах Arduino Uno и Arduino Nano; также они продублированы и выведены на отдельный разъём ICSP:

Выводы Arduino, отведённые под SPI Обозначение вывода Назначение
SCLK вывод тактовых импульсов SPI;
MOSI данные от ведущего – к ведомому;
MISO данные от ведомого к ведущему;
SS выбор ведомого.

3 Подключение сдвигового регистра74HC595 к Arduino

Давайте соберём схему, которая показана на рисунке.

Схема подключения сдвигового регистра 74HC595 к Arduino

Думаю, тут всё понятно. Единственный комментарий – справа на монтажной плате – ряд из 8-ми штырьков (разъём типа PLS), с которых удобно снимать параллельные данные сдвигового регистра.

Я также подключу ко всем ножкам микросхемы регистра сдвига логический анализатор. С помощью него мы увидим, что же происходит на физическом уровне, какие сигналы куда идут, и разберёмся, что они означают. У меня получилось так, как показано на фотографии.

Подключение сдвигового регистра 74HC595 к Arduino

4 Тестовый скетч для изучения работы регистра сдвига

Напишем вот такой скетч и загрузим в память Arduino. Здесь мы по циклу будем записывать два числа – 210 и 0 – в сдвиговый регистр с небольшими временными интервалами между ними. Да, только и всего.

#include <SPI.h> // подключаем библиотеку void setup() { SPI.begin(); // инициализируем SPI pinMode(PIN_SPI_SS, OUTPUT); } void loop() { digitalWrite(PIN_SPI_SS, LOW); // выбор регистра сдвига SPI.transfer(210); // передаём число "210" в сдвиговый регистр digitalWrite(PIN_SPI_SS, HIGH); // конец передачи delay(10); // задержка 10 мсек digitalWrite(PIN_SPI_SS, LOW); SPI.transfer(0); digitalWrite(PIN_SPI_SS, HIGH); delay(90); }

Переменная PIN_SPI_SS – это внутренняя стандартная константа, которая соответствует выводу "10" Ардуино при использовании его в качестве ведущего устройства интерфейса SPI, который мы тут используем.

В принципе, мы могли бы с таким же успехом использовать любой другой цифровой вывод Arduino; тогда пришлось бы его объявить и не забыть задать режим работы – OUTPUT.

Подавая на этот вывод LOW, мы активируем наш сдвиговый регистр на приём/передачу. После передачи мы снова поднимаем напряжение в HIGH, и обмен заканчивается. Включим схему в работу и посмотрим, что покажет логический анализатор.

5 Временная диаграмма работы микросхемы 74HC595

Общий вид временной диаграммы – на рисунке. Голубой пунктирной линией показаны 4 линии SPI, красной пунктирной – 8 каналов параллельных данных регистра сдвига. Точка A на шкале времени – это момент передачи в регистр сдвига числа "210", B – момент записи числа "0", C – завершение текущей итерации цикла и начало новой.

Временная диаграмма работы микросхемы 74HC595

Как видно, от А до B – 10,03 миллисекунд, а от B до С – 90,12 миллисекунд, почти как мы и задали в скетче. Небольшая добавка в 0,03 и 0,12 мс – время передачи последовательных данных от Arduino, поэтому мы тут имеем не ровно 10 и 90 мс.

Рассмотрим подробнее участок A.

Обратите внимание на временной масштаб. Теперь это микросекунды, а на предыдущем были миллисекунды. То есть это сильно укрупнённый по сравнению с первой диаграммой участок.

Диаграмма передачи числа "11010010" по SPI

В первом канале сверху – длинный импульс с нулевым уровнем, которым Arduino инициализирует передачу по линии SPI - ENABLE – выбор ведомого. В это время начинают генерироваться тактовые импульсы SPI - CLOCK (см. второй сверху канал). Для передачи одного байта генерируется 8 тактовых импульсов.

Третий канал сверху – SPI - MOSI – данные, которые мы передаём от Arduino к сдвиговому регистру. Это наше число "210" в двоичном виде – "1101 0010".

После завершения передачи линия SPI - ENABLE поднимается в высокое состояние, и мы видим, что сдвиговый регистр выставил на своих 8-ми ножках значение "1101 0010". Я выделил это в голубой пунктирной линией и подписал значения для наглядности.

Теперь обратим внимание на участок B.

Диаграмма передачи числа "00000000" по SPI

Опять всё начинается с выбора ведомого и генерирования 8-ми тактовых импульсов (первый и второй каналы сверху). Данные на линии SPI - MOSI теперь – "0000 0000" (3-ий сверху канал). То есть мы записываем в этот момент в регистр число "0". Но пока передача не закончена, в регистре по прежнему хранится значение "1101 0010", которое мы выставили ранее. Оно выводится на параллельные выводы Q0..Q7 (8 нижних каналов на рисунке), а также, при наличии тактовых импульсов в линии SPI - CLOCK , выдаётся в линию SPI - MISO (см. 4-ый канал сверху) c последовательного выхода регистра Q7', что мы тут и видим.

6 Подключение нескольких регистров сдвига к Arduino

Если подключить несколько сдвиговых регистров таким образом, чтобы линии CLOCK (SCLK на рисунке ниже), MOSI и MISO у них были общие, а ENABLE ( SS на рисунке) каждой микросхемы подключались к разным цифровым выводам Arduino, то можно независимо обращаться к каждому из сдвиговых регистров, активизируя низким уровнем соответствующий из них, и записывать в регистры данные и считывать из них данные. Такое подключение называется независимым .

Независимый и каскадный типы подключений по интерфейсу SPI

Независимое подключение ведомых SPI устройств (например, регистров 74HC595) к ведущему (например, Arduino) изображено на левой части рисунка. Думаю, это уже достаточно просто для нас, так как оно почти ничем не отличается от подключения одного сдвигового регистра. Поэтому давайте рассмотрим другой тип подключения – каскадный.

7 Каскадное подключение регистров сдвига к Arduino

Продолжение следует...

Таким образом, мы детально изучили вопрос информационного обмена между ведущим устройством, в роли которого выступил Arduino, и сдвиговым регистром 74HC595. Научились подключать сдвиговый регистр, записывать в него данные и считывать из него данные.

rss