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


На первый взгляд, плата Raspberry Pi имеет достаточно много контактов ввода/вывода (GPIO pins), однако при подключении к ней ряда устройств, например, 3D принтера, этого количества контактов все равно может не хватить. В этих случаях для увеличения количества выходных контактов и может применяться регистр сдвига, который будет получать данные от Raspberry Pi в последовательной форме, а далее передавать их уже в параллельной форме. Используемый нами в этом проекте регистр сдвига является 8-битным, то есть он последовательно от Raspberry Pi будет получать 8 бит, а затем будет передавать эти 8 бит параллельно с помощью своих выходных контактов.

Внешний вид подключения регистра сдвига 74HC595 к Raspberry Pi

В качестве 8-битного регистра сдвига мы будем использовать микросхему 74HC595. Данная микросхема имеет 16 выводов. Мы будем использовать три контакта ввода/вывода (GPIO pins) платы Raspberry Pi для управления состоянием регистра сдвига. Помните о том, что выходные контакты регистра сдвига предназначены только для вывода данных и к ним нельзя подключить какие либо датчики либо считать их состояние с помощью Raspberry Pi. К выходным контактам регистра сдвига мы подключим светодиоды чтобы наблюдать за их состоянием.

Схема расположения контактов ввода/вывода (GPIO) на плате Raspberry Pi 2 показана на следующем рисунке. Более подробно об этих контактах вы можете прочитать в статье про мигание светодиода с помощью Raspberry Pi.

Распиновка контактов ввода/вывода (GPIO) платы Raspberry Pi

Каждый из 17 универсальных контактов ввода/вывода (GPIO) может выдерживать ток до 15mA. А суммарный ток от всех контактов ввода/вывода не должен превышать 50mA – таким образом, в среднем на каждый контакт будет приходиться ток примерно 3mA.

Расширенная распиновка контактов ввода/вывода (GPIO) платы Raspberry Pi

Необходимые компоненты

  1. Плата Raspberry Pi 2 Model B или другая аналогичная (купить на AliExpress).
  2. Резистор 220 Ом или 1 кОм – 6 шт. (купить на AliExpress).
  3. Светодиод – 8 шт. (купить на AliExpress).
  4. Конденсатор 0,01 мкФ (купить на AliExpress).
  5. Регистр сдвига 74HC595 (купить на AliExpress).
  6. Макетная плата.
  7. Соединительные провода.

Схема проекта

Схема подключения регистра сдвига 74HC595 к плате Raspberry Pi представлена на следующем рисунке.

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

Распиновка (назначение контактов) микросхемы регистра сдвига 74HC595 представлена на следующем рисунке. Расшифрованы контакты в таблице ниже.

Распиновка микросхемы регистра сдвига 74HC595

Наименование контактов Выполняемые функции
Q0 - Q7 Выходные контакты микросхемы (на рисунке обозначены красным прямоугольником), на них выдаются параллельно 8 бит данных. Мы к ним подключаем светодиоды.
Data Pin (DS) Контакт, на который мы передаем данные последовательно, бит за битом. Чтобы передать 1, мы с помощью подтягивающего резистора подаем на него напряжение высокого уровня (high), а чтобы передать 0 – мы подаем на него напряжение низкого уровня.
Clock Pin (SHCP) Контакт синхронизации. Каждый импульс на этом контакте заставляет регистр сдвига считать один бит с контакта Data Pin и сохранить его.
Shift Output (STCP) После приема 8 бит мы подаем импульс на этот контакт чтобы увидеть выход регистра сдвига.

Алгоритм работы

Алгоритм взаимодействия с регистром сдвига показан на следующем рисунке.

Алгоритм взаимодействия с регистром сдвига в нашем проекте

1. Сначала мы передаем один бит данных на контакт Data Pin.
2. После этого мы подаем импульс на Clock Pin, в результате этого регистр сдвига считывает бит данных с контакта Data Pin и сохраняет его.
3. Затем мы подаем второй бит данных на контакт Data Pin и импульс на Clock Pin, в результате чего регистр сдвига считывает второй бит данных с контакта Data Pin и сохраняет его. Этот процесс мы продолжаем до тех пор, пока не передадим регистру сдвига все 8 бит.
4. Когда все 8 бит приняты последовательно, один за одним, мы подаем импульс на контакт Shift Output (STCP) чтобы передвинуть (передать) все сохраненные 8 бит на 8 выходных контактов микросхемы.

Объяснение программы для Raspberry Pi

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

После того, как все необходимые соединения в схеме сделаны, мы можем подать питание на Raspberry Pi и после загрузки ее операционной системы можно начать писать программу в ней на Python. Подробнее о том, как это можно сделать, можно прочитать в статье про мигание светодиода с помощью Raspberry Pi.

В программе нам первым делом необходимо подключить (импортировать) библиотеку для работы с контактами ввода/вывода. Также мы импортируем эту библиотеку RPi.GPIO под именем “IO” (то есть переименовываем ее для использования в программе), то есть далее в программе всегда, когда мы захотим обратиться к контактам ввода/вывода, мы будем использовать слово ‘IO’.

Иногда контакты ввода/вывода (GPIO pins), которые мы собираемся использовать в программе, могут выполнять другие функции. В этом случае во время исполнения программы мы будем получать предупреждения (warnings). Следующей командой мы укажем плате Raspberry Pi на то, чтобы она игнорировала эти предупреждения и продолжала исполнение программы.

Мы можем обращаться к контактам ввода/вывода (GPIO pins) платы Raspberry Pi используя либо номер контакта на плате, либо его функциональный номер. В представленной выше распиновке контактов ввода/вывода можно увидеть, к примеру, что обозначение GPIO5 соответствует контакту PIN 29. То есть в зависимости от того, какой способ обращения к контактам мы выбрали, мы можем обращаться к рассмотренному контакту либо по номеру ‘29’, либо по номеру ‘5’. В данном проекте мы выберем способ обращения к контактам по их функциональным номерам, поэтому используем следующую команду:

Далее мы сконфигурируем контакты GPIO4, GPIO5 и GPIO6 в качестве цифровых выходов – с них будет осуществляться управление регистром сдвига.

Далее запишем команду цикла, который будет исполняться 8 раз.

Также в программе мы будем использовать команду "While 1:" – она будет формировать бесконечный цикл. Внутри этого цикла все команды будут исполняться непрерывно.

Исходный код программы

Программа снабжена подробными комментариями.

Видео, демонстрирующее работу проекта

(Проголосуй первым!)
Загрузка...
617 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *