Рейтинг@Mail.ru
Сдвиговый регистр 74HC595
Сдвиговый регистр 74HC595

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Подключение сдвигового регистра 74HC595 к Arduino
Подключение сдвигового регистра 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. Научились подключать сдвиговый регистр, записывать в него данные и считывать из него данные.

Последнее изменениеСреда, 08 Март 2017 19:37
(4 голосов)
Прочитано 5803 раз

Поделиться

Оставить комментарий

Убедитесь, что вы вводите (*) необходимую информацию, где нужно
HTML-коды запрещены

  1. Arduino это...
  2. Arduino это...
  3. Arduino это...
Отличный способ начать знакомство с электроникой, микроконтроллерами и программированием!
Замечательное средство для создания собственных электронных устройств, которые пригодятся в быту или для развлечения!
Уникальный конструктор, для которого разработаны десятки совместимых датчиков и модулей!
next
prev