Сдвиговый регистр 74HC595 и arduino

Тетрис на arduino

В этой статье я приведу несколько реальных примеров, где может пригодиться сдвиговый регистр, а также постараюсь объяснить как его использовать.

Зачем нужен сдвиговый регистр 74HC595

Как всем известно, arduino имеет достаточно много пинов, которые можно использовать в разработке, но бывают проекты, для которых недостаточно существующих пинов, и тогда на помощь приходят сдвиговые регистры. Они дают возможность значительно увеличить количество выходов, так задействовав всего 3 штуки, на выходе мы получим 8 дополнительных. Не сложно подсчитать, что мы с помощью одного сдвигового регистра 74HC595 мы получим 5 дополнительных пинов. А так же у 74HC595 есть прекрасная возможность выстраивать каскады, то есть при подключении двух регистров получим уже 16 выходов, заняв всего 3 пина на ардуино. Каскады можно выстраивать и из большего количество сдвиговых регистров.

Чтобы понимать, куда реально можно использовать регистры, можно посмотреть готовый проект – «гоночки» из коллекции игр тетриса, его посмотреть можно в видео ниже. В качестве дисплея я использовал светодиодную матрицу размеров 8х8. Матрица имеет 16 выходов и с помощью двух сдвиговых регистров удалось сэкономить кучу пинов на ардуине, которые пригодились для обработки кнопок.

Пример использования 74HC595

В качестве более простого примера можно рассмотреть использование только одного 74HC595, через который можно управлять 8 светодиодами, реализацию можно посмотреть на видео:

Ниже на двух картинках изображена распиновка 74HC595 и схема подключения из видео.

Сдвиговый регистр 74HC595 и arduino. Схема

Что использовалось в проекте

Распиновка 74HC595

Сдвиговый регистр 74HC595 и arduino. Datasheet

В этой схеме задействованы все ножки 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);
}
Рассказать друзьям:


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

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

*