Подключаем сдвиговый регистр 74hc595 Ардуино

СОДЕРЖАНИЕ ►
Сдвиговый регистр 74hc595 Arduino используется для управления семисегментного индикатора и светодиодами. Назначение у сдвиговых регистров велик, один из самых популярных способов применения — умножение выходов Arduino (занимаем 3 пина, а получаем 8). Рассмотрим на примерах с программами и схемами, как использовать 74hc595 для подключения светодиодов и семисегментного индикатора 5161as.
Как работает сдвиговый регистр 74hc595
Чтобы понять принцип работы микросхемы 74hc595, следует рассмотреть распиновку сдвигового регистра 74hc595, которая изображена на картинке ниже. Контакты DS, ST_CP и SH_CP — служат для управления и подключаются к любым выходам платы Arduino. Контакты Q0 — Q7 — это выходы (разряды) сдвигового регистра. С помощью отправки байта с Ардуино можно менять состояние разряда (HIGH или LOW).

Контакты VCC и GND — это питание регистра;
Контакт MR — сброс (не активен);
Контакт OE подключается к GND;
Контакт Q7` предназначен для последовательного соединения регистров.
Как подключить 74hc595 к плате Arduino
Для этого занятия нам потребуется:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- 74HC595 / КР1564ИР52 сдвиговый регистр;
- макетная плата;
- светодиоды и резисторы;
- семисегментный индикатор;
- провода «папа-папа».

Скетч. Тестирование 74hc595 сдвигового регистра
Мы кратко рассмотрели 74hc595 описание на русском. Но чтобы полностью разобраться в назначении и принципе его работы — следует подключить регистр или его российский аналог КР1564ИР52 к Ардуино Уно, согласно схеме и загрузить следующий скетч. Программа позволяет попеременно включать/выключать восемь светодиодов, используя лишь 3 цифровых пина микроконтроллера Arduino.
#define dataPin 10 // пин подключен к входу DS #define latchPin 11 // пин подключен к входу ST_CP #define clockPin 12 // пин подключен к входу SH_CP void setup() { // устанавливаем режим работы пинов OUTPUT pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); // ставим HIGH на "защёлку", чтобы регистр не принимал сигнал digitalWrite(latchPin, HIGH); } void loop() { digitalWrite(latchPin, LOW); // ставим LOW на "защёлку" shiftOut(dataPin, clockPin, LSBFIRST, B01010101); // отправляем байт в двоичном виде digitalWrite(latchPin, HIGH); // ставим HIGH на "защёлку" delay(1000); // задержка в 1 секунду digitalWrite(latchPin, LOW); // ставим LOW на "защёлку" shiftOut(dataPin, clockPin, LSBFIRST, B10101010); // отправляем байт в двоичном виде digitalWrite(latchPin, HIGH); // ставим HIGH на "защёлку" delay(1000); // задержка в 1 секунду }
Пояснения к коду:
- пока защелка регистра ST_CP (подключен к latchPin) находится в состоянии HIGH — регистр не принимает сигнал с микроконтроллера;
- данные отправляют в двоичном виде, где каждый из 8 битов отвечает за свой разряд. «1» — разряд переходит в состояние HIGH, «0» — в состояние LOW.
Скетч. Сдвиговый регистр 74hc595 и светодиоды
В следующем примере используем функцию bitWrite(x, n, b), которая позволяет изменять состояние указанного бита переменной. x — переменная, у которой необходимо изменить бит; n — это номер бита, состояние которого необходимо изменить (начинается с крайнего правого бита), b — новое значение бита (0 или 1). Схема со светодиодами остается прежней, меняется только программа.
#define dataPin 10 // пин подключен к входу DS #define latchPin 11 // пин подключен к входу ST_CP #define clockPin 12 // пин подключен к входу SH_CP byte byteToSend = 0; // создаем пустой байт B00000000 void setup() { // устанавливаем режим работы пинов OUTPUT pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); // ставим HIGH на "защёлку", чтобы регистр не принимал сигнал digitalWrite(latchPin, HIGH); } void loop() { for (byte bitPos = 0; bitPos < 8; bitPos++) { byteToSend = 0; // обнуляем байт, чтобы выключить светодиод bitWrite(byteToSend, bitPos, HIGH); digitalWrite(latchPin, LOW); // ставим LOW на "защёлку" shiftOut(dataPin, clockPin, LSBFIRST, byteToSend); digitalWrite(latchPin, HIGH); // ставим HIGH на "защёлку" delay(100); } for (byte bitPos = 0; bitPos < 8; bitPos++) { byteToSend = 0; // обнуляем байт, чтобы выключить светодиод bitWrite(byteToSend, bitPos, HIGH); digitalWrite(latchPin, LOW); // ставим LOW на "защёлку" shiftOut(dataPin, clockPin, MSBFIRST, byteToSend); digitalWrite(latchPin, HIGH); // ставим HIGH на "защёлку" delay(100); } }
Пояснения к коду:
- в цикле for Arduino меняется переменная bitPos от 0 до 8. С помощью функции
bitWrite(byteToSend, bitPos, HIGH);
изменяется байт в двоичном виде, который отправляется на регистр. При bitPos=0 получим B00000001, при bitPos=1 — B00000010, при bitPos=2 — B00000100 и т.д.; MSBFIRST
иLSBFIRST
меняет направление сигнала.
Скетч. Сдвиговый регистр 74hc595 и индикатор

В следующем примере подключим семисегментного индикатора. Сдвиговый регистр позволяет не только упростить схему сборки с платой Ардуино, но и делает проще программу. После сборки схемы, размещенной на картинке выше, загрузите программу для индикатора и 74hc595. В коде идет перебор цифр на индикаторе с нуля до пяти. Продолжить программу самостоятельно не составит для вас большого труда.
#define dataPin 10 // пин подключен к входу DS #define latchPin 11 // пин подключен к входу ST_CP #define clockPin 12 // пин подключен к входу SH_CP void setup() { // устанавливаем режим работы пинов OUTPUT pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); // ставим HIGH на "защёлку", чтобы регистр не принимал сигнал digitalWrite(latchPin, HIGH); } void loop() { digitalWrite(latchPin, LOW); // цифра один shiftOut(dataPin, clockPin, LSBFIRST, B00110000); digitalWrite(latchPin, HIGH); delay(1000); digitalWrite(latchPin, LOW); // цифра два shiftOut(dataPin, clockPin, LSBFIRST, B01101101); digitalWrite(latchPin, HIGH); delay(1000); digitalWrite(latchPin, LOW); // цифра три shiftOut(dataPin, clockPin, LSBFIRST, B01111001); digitalWrite(latchPin, HIGH); delay(1000); digitalWrite(latchPin, LOW); // цифра четыре shiftOut(dataPin, clockPin, LSBFIRST, B00110011); digitalWrite(latchPin, HIGH); delay(1000); digitalWrite(latchPin, LOW); // цифра пять shiftOut(dataPin, clockPin, LSBFIRST, B01011011); digitalWrite(latchPin, HIGH); delay(1000); }
Пояснения к коду:
- в схеме не используется контакт Q0 регистра, поэтому байт
B00110000
всегда начинается с нуля, так как разряд не используется.
Заключение. Сегодня мы рассмотрели характеристики, назначение и описание сдвигового регистра 74hc595 Arduino. Привели несколько примеров со схемами, рабочими программами с подробными комментариями для управления с помощью регистра светодиодами и семисегментного индикатора 5161as. В своих следующих проектах на Ардуино мы обязательно будем применять эту микросхему.
Подборка на тему: Подключаем сдвиговый регистр 74hc595 Ардуино
Записи похожие на: Arduino сдвиговый регистр 74hc595
- Робот паук на Ардуино с ИК пультом
- Адресная светодиодная лента Ардуино
- Библиотека FastLED Ардуино
- Балтийский научно-инженерный конкурс
Проекты похожие на: Arduino сдвиговый регистр 74hc595
Добавить комментарий