В этой статье я приведу несколько реальных примеров, где может пригодиться сдвиговый регистр, а также постараюсь объяснить как его использовать.
Зачем нужен сдвиговый регистр 74HC595
Как всем известно, arduino имеет достаточно много пинов, которые можно использовать в разработке, но бывают проекты, для которых недостаточно существующих пинов, и тогда на помощь приходят сдвиговые регистры. Они дают возможность значительно увеличить количество выходов, так задействовав всего 3 штуки, на выходе мы получим 8 дополнительных. Не сложно подсчитать, что мы с помощью одного сдвигового регистра 74HC595 мы получим 5 дополнительных пинов. А так же у 74HC595 есть прекрасная возможность выстраивать каскады, то есть при подключении двух регистров получим уже 16 выходов, заняв всего 3 пина на ардуино. Каскады можно выстраивать и из большего количество сдвиговых регистров.
Чтобы понимать, куда реально можно использовать регистры, можно посмотреть готовый проект – «гоночки» из коллекции игр тетриса, его посмотреть можно в видео ниже. В качестве дисплея я использовал светодиодную матрицу размеров 8х8. Матрица имеет 16 выходов и с помощью двух сдвиговых регистров удалось сэкономить кучу пинов на ардуине, которые пригодились для обработки кнопок.
Пример использования 74HC595
В качестве более простого примера можно рассмотреть использование только одного 74HC595, через который можно управлять 8 светодиодами, реализацию можно посмотреть на видео:
Ниже на двух картинках изображена распиновка 74HC595 и схема подключения из видео.
Что использовалось в проекте
- Arduino (я использовал arduino nano, но можно любую другую). Покупал тут: arduino nano
- 1 Сдвиговый регистр 74HC595. Покупал тут: сдвиговые регистры 10 штук
- 8 резисторов сопротивлением 300 Ом. Покупал тут:набор резисторов 700 шт. От 10 Ом до 1 МОм
- 8 светодиодов. Покупал тут: 100 светодиодов, 10 разных цветов
- несколько соединительных проводов. Покупал тут: соединительные провода
Распиновка 74HC595
В этой схеме задействованы все ножки 74HC595, кроме ноги номер 9, она будет использована при подключении нескольких сдвиговых регистров, когда будем строить каскады.
Скетч для использования 74HC595
И теперь приведу код, который управляет нашей схемой, скачать его можно тут: скачать.
//Пин подключен к SH_CP входу 74HC595 int clockPin = 6; //Пин подключен к ST_CP входу 74HC595 int latchPin = 7; //Пин подключен к DS входу 74HC595 int dataPin = 8; void setup() { //устанавливаем режим OUTPUT pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { // зажигаем по одному светодиоды по порядку for (int numberPin = 0; numberPin < 8; numberPin++) { setShiftPin(numberPin); delay(500); } // зажигаем все светодиоды digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, 255); digitalWrite(latchPin, HIGH); delay(1000); // зажигаем светодиоды через один digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, B10101010); digitalWrite(latchPin, HIGH); delay(1000); // выключаем все светодиоды digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, 0); digitalWrite(latchPin, HIGH); delay(1000); } void setShiftPin(int numPin){ int arrayPins[] = {1, 2, 4, 8, 16, 32, 64, 128}; digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, arrayPins[numPin]); digitalWrite(latchPin, HIGH); }