Подключение к ESP32 семисегментного индикатора с помощью регистра сдвига 74HC595


Все современные микроконтроллеры имеют определенное число контактов ввода/вывода общего назначения (IO pins), но в некоторых случаях как, например, подключение семисегментного индикатора (дисплея), этого числа контактов может быть недостаточно. В этих случаях для увеличения числа доступных контактов хорошим выбором является использование регистра сдвига 74HC595. Данный регистр принимает данные в последовательной форме и выдает их на выход в параллельной форме. Он требует всего 3 контакта для управления. Ранее на нашем сайте мы уже рассматривали подключение регистра сдвига 74HC595 к платам Arduino и Raspberry Pi.

Внешний вид подключения к ESP32 семисегментного индикатора с помощью регистра сдвига 74HC595

Таким образом, мы можем использовать всего 3 выходных контакта микроконтроллера и соединить каскадом 2 или более регистров сдвига чтобы получить в результате 16 или 24+ выходных контактов. В данной статье мы рассмотрим подключение трех регистров сдвига 74HC595 к трем контактам модуля ESP32, а к выходам регистров сдвига подключим три семисегментных индикатора. Программировать модуль ESP32 мы будем с помощью Arduino IDE.

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

  1. ESP32 Devkit v4.0 (купить на AliExpress).
  2. Семисегментный индикатор с общим катодом – 3 шт.
  3. Регистр сдвига 74HC595 – 3 шт. (купить на AliExpress).
  4. Резистор 680 Ом – 24 шт. (купить на AliExpress).
  5. Источник питания 5 В.
  6. Макетная плата.
  7. Соединительные провода.
  8. Кабель micro-USB.

Внешний вид платы ESP32 Devkit v4.0

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

Схема подключения к модулю ESP32 3-х семисегментных индикаторов с помощью регистров сдвига 74HC595 представлена на следующем рисунке.

Схема подключения к модулю ESP32 3-х семисегментных индикаторов с помощью регистров сдвига 74HC595Регистр сдвига 74HC595 подключен к модулю ESP32. Его контакт данных (data pin) подключен к контакту 14 модуля, контакт синхронизации (Clock pin) подключен к контакту 12 модуля, а контакт затвора/стробирующего импульса (Latch или strobe pin) подключен к контакту 4 модуля.

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

Регистр сдвига 74HC595

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

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

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

Далее перейдем к рассмотрению программы для ESP32.

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

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

Вначале в программе нам необходимо задать тип семисегментного индикатора – у нас он с общим катодом, поэтому переменной commonCathode мы присваиваем значение true. А если бы у нас семисегментный индикатор был с общим анодом, то этой переменной необходимо было бы присвоить значение false.

В следующем фрагменте кода мы запрограммируем цифры и символы, которые мы хотим отображать на семисегментных индикаторах в 8-битном формате – он в точности равен значению выходных контактов регистров сдвига, с которых и осуществляется управление сегментами семисегментных индикаторов.

В следующих строках объявим контакты модуля ESP32, к которым подключены контакты регистра сдвига.

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

В функции void loop() у нас будет две части. В первой из них будут инкрементироваться цифры, а в другой цифры будут декрементироваться. Но независимо от этого всегда перед пересылкой данных в регистр сдвига необходимо на его контакт latch подавать уровень LOW, а после окончания передачи данных на этот контакт необходимо подавать уровень High.

Данные будут передаваться между состояниями Low и High контакта latch регистра сдвига.

Если у нас семисегментный индикатор с общим катодом, то для вывода на него цифр мы будем использовать код:

Данная функция shiftOut использует побитовый (поразрядный оператор) чтобы продвигать данные последовательно через контакт clock регистра сдвига. Первыми передаются младшие (двоичные) разряды (LSB), сначала они подаются на первый регистр сдвига 74HC595, а затем передаются на следующий регистр сдвига 74HC595. Третий семисегментный индикатор не программируется и подключен для того, чтобы наблюдать за тем, что первая цифра передалась на последний семисегментный индикатор. Если семисегментный индикатор будет с общим анодом, то в функции shiftOut необходимо будет использовать оператор инвертирования чтобы инвертировать выходные значения.

Тестирование работы проекта

Схема проекта собрана на двух макетных платах. После загрузки кода программы в модуль ESP32 на семисегментных индикаторах должны начать отображаться цифры как показано на следующем рисунке.

Тестирование работы проекта

Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы (скетча)

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

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

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

Ваш адрес email не будет опубликован.