МИКРОСХЕМА SN74HC595N

Урок 2 — Подключаем сдвиговый регистр 74НС595 к Arduino. «Бегущие» огни

МИКРОСХЕМА SN74HC595N

В данном уроке мы с вами подключим сдвиговый регистр 74HC595 к Arduino. Но все по порядку. Сперва рассмотрим что такое сдвиговый регистр и как он устроен.

74HC595 — восьмиразрядный (это означает, что он имеет 8 управляемых выходов) с последовательным вводом, последовательным или параллельным выводом информации, с триггером-защелкой.

VccПитание
Q0…Q7Параллельные выходы
DS или SER (Data Serial) Вход для последовательных данных
OEВход для переключения состояния выходов из высоко много в рабочее(активация при получении LOW)
ST_CP или RCK (STorage register Clock input, storage — хранилище) Синронизация(«защелкивание») выходов
SH_Cp или SCK (SHift register Clock input, shift — сдвиг) Вход для тактовых импульсов
MRСброс значений регистра (активация при получении LOW)
Q7SВыход для последовательного соединения регистров
GNDЗемля

При использовании 3 пинов Arduino можно получить 8 выходов к которым мы можем подключить не только светодиоды, но и например драйвер двигателя и пр.

Для примера работы сдвигового регистра 74HC595 подключим светодиоды.

Для урока нам понадобится:

– Arduino UNO или Arduino Nano

– Сдвигового регистра 74HC595

– Плата макетная беспаечная

– Резисторы 220 ОМ

-Соединительные провода папа-папа

-Светодиоды 3 или 5 мм.

Схема подключения сдвигового регистра к плате Arduino UNO.

Принципиальная схема подключения сдвигового регистра к плате Arduino UNO.

В видео уроке показан пример работы сдвигового регистра. Скетч управления бегущими огнями в среде Arduino IDE будит вот таким:

int dataPin = 10; //Пин подключен к DS входу 74HC595 int latchPin = 11; //Пин подключен к ST_CP входу 74HC595 int clockPin = 12; //Пин подключен к SH_CP входу 74HC595 void setup() { //устанавливаем режим OUTPUT pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { byte byteToSend = 0; //Создаем пустой байт B00000000 for (int bitPos = 0; bitPos < 8; bitPos++) { // В переменной хранится позиция изменяемого бита byteToSend = 0; // Обнуляем байт при каждом проходе bitWrite(byteToSend, bitPos, HIGH); // При bitPos=0 получим B00000001, при bitPos=1 - B00000010, при bitPos=2 - B00000100 и т.д. digitalWrite(latchPin, LOW); // устанавливаем синхронизацию "защелки" на LOW shiftOut(dataPin, clockPin, LSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым устанавливая значения на выходах delay(150); } for (int bitPos = 0; bitPos < 8; bitPos++) { // В переменной хранится позиция изменяемого бита byteToSend = 0; // Обнуляем байт при каждом проходе bitWrite(byteToSend, bitPos, HIGH); // При bitPos=0 получим B00000001, при bitPos=1 - B00000010, при bitPos=2 - B00000100 и т.д. digitalWrite(latchPin, LOW); // устанавливаем синхронизацию "защелки" на LOW shiftOut(dataPin, clockPin, MSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым устанавливая значения на выходах delay(150); } }

Скетч из видео урока вот такой:

int dataPin = 10; //Пин подключен к DS входу 74HC595 int latchPin = 11; //Пин подключен к ST_CP входу 74HC595 int clockPin = 12; //Пин подключен к SH_CP входу 74HC595 void setup() { //устанавливаем режим OUTPUT pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { byte byteToSend = 0; //Создаем пустой байт B00000000 for (int bitPos = 0; bitPos < 8; bitPos++) { // В переменной хранится позиция изменяемого бита byteToSend = 0; // Обнуляем байт при каждом проходе bitWrite(byteToSend, bitPos, HIGH); // При bitPos=0 получим B00000001, при bitPos=1 - B00000010, при bitPos=2 - B00000100 и т.д. digitalWrite(latchPin, LOW); // устанавливаем синхронизацию "защелки" на LOW shiftOut(dataPin, clockPin, LSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым устанавливая значения на выходах delay(150); } byteToSend = 0; // Обнуляем байт при каждом проходе for (int bitPos = 0; bitPos < 8; bitPos++) { // В переменной хранится позиция изменяемого бита // byteToSend = 0; // Обнуляем байт при каждом проходе bitWrite(byteToSend, bitPos, HIGH); // При bitPos=0 получим B00000001, при bitPos=1 - B00000010, при bitPos=2 - B00000100 и т.д. digitalWrite(latchPin, LOW); // устанавливаем синхронизацию "защелки" на LOW shiftOut(dataPin, clockPin, MSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым устанавливая значения на выходах delay(150); } } [attention type=yellow]

Как видно из примеров мы можем управлять выходами с сдвигового регистра по нашему усмотрении. И это только самые распространенные примеры. Вы можете сделать свои. Например включение светодиодов через один. Или сделать стробоскоп используя знания полученные в уроке: Полицейский стробоскоп своими руками на Arduino.

[/attention]

Придумать можно много интересных вариантов применения сдвигового регистра 74HC595 в проектах на Arduino.

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

Источник: https://portal-pk.ru/news/71-urok-2-%E2%80%94-podklyuchaem-sdvigovyi-registr-74ns595-k-arduino-.html

Arduino.ru

МИКРОСХЕМА SN74HC595N

Рассмотрим типичную ситуацию, когда вам нужно больше выходов (пинов), чем может предложить контроллер Arduino. В этом случае самый простой выход — использовать сдвиговый регистр. В данном примере используется 74HC595.

74HC595 — восьмиразрядный сдвиговый регистр с последовательным вводом, последовательным или параллельным выводом информации, с триггером-защелкой и тремя состояниями на выходе.

Другими словами этот регистр позволяет контролировать 8 выходов, используя всего несколько выходов на самом контроллере.

При этом несколько таких регистров можно объединять последовательно для каскадирования. Другие подходящие регистры можно поискать по комбинации “595” и “596” в серийном номере.

Так, например, STP16C596 может управлять 16 светодиодами одновременно без использования дополнительных резисторов.

В данной схеме используется принцип синхронизированной последовательной передачи сигнаналов.

Необходимые значения сигнала (биты HIGH или LOW)  передаются в регистр один за другим, при этом регистр получает синхронизирующий сигнал, который заставляет его считать сигнал с входа.

Когда байт (1 байт = 8 бит) считан, значения всех 8 бит распределены по выходам. То есть передаем в регистр сигналы последовательно, на выходах регистра имеем параллельно 8 сигналов.

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

Три возможных состояния на выходе, упомянутые выше, означают, что выход регистра может иметь не только логический ноль или единицу (HIGH или LOW), но и быть в высокоомном (высокоимпедансном) состоянии — когда выход отключен от схемы.

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

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

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

Пины 1-7, 15Q0 ” Q7Параллельные выходы
Пин 8GNDЗемля
Пин 9Q7″Выход для последовательного соединения регистров
Пин 10MRСброс значений регистра. Сброс происходит при получение LOW
Пин 11SH_CPВход для тактовых импульсов
Пин 12ST_CPСинронизация (“защелкивание”) выходов
Пин 13OEВход для переключения состояния выходов из высокоомного в рабочее
Пин 14DSВход для последовательных данных
Пин 16VccПитание

Пример с одним регистром

Подключим:

  • GND (пин 8) на землю
  • Vcc (пин 16) к питанию 5В
  • OE (пин 13) на землю
  • MR (пин 10) к питанию 5В

Итак, мы запитали регистр и сделали все выходы активными. Это несколько упрощенный способ подключения, так как в момент подачи питания на схему на выходах будут случайные значения.

Можно контролировать пин MR и OE непосредственно с Arduino, чтобы обнулить входы и/или подключить выходы в нужный момент.

Для упрощения схемы и минимизации количества задействованных выходов Arduino мы будем использовать более простую схему, так как значения регистров и выводов будут перезаписаны, как только программы начнет работать. 

Соединяем с Arduino:

  • DS (пин 14) с 11-ым цифровой выход Arduino (на схеме синий провод)
  • SH_CP (пин 11) с 12-ым цифровым выходом (желтый провод)
  • ST_CP (пин 12) c 8-ым (зеленый провод)

Далее эти выходы в тексте и коде именуются dataPin, clockPin и latchPin соответственно. Обратите внимание на конденсатор 0.1 микрофарада на latchPin, он минимизирует шум в схеме при подаче “защелкивающего” импульса.

Подключаем светодиоды к выходам регистра 74HC595, катод (короткая ножка) светодиода подключается к общей земле, а анод (длинная ножка) через ограничительный 220-ОМ резистор к выходам регистра. При использовании регистров отличных от  74HC595 следует свериться с документацией и проверить схему подключения. К некоторым регистрам светодиоды подключаются наоборот — катод к выходам.

Схема подключения

Ниже приведен код трех программ. Первая, “Hello world”, выводит значения байта от 0 до 255. Вторая  по одному включает светодиоды. Третья циклически проходит по массиву.

Пониманию кода могут помочь “временная диаграмма сигналов” регистра и “таблица логики”. Когда clockPin переглючается с LOW на HIGH, регистр считывает значения с DS пина. По мере считывания данные записываются во внутреннюю память. Когда latchPin  переключается с LOW на HIGH, данные “защелкиваются”, то есть передаются на выходы регистра, включая светодиоды.

 Код примера 1.1

//**************************************************************//// Name : shiftOutCode, Hello World // Author : Carlyn Maw,Tom Igoe, David A. Mellis // Date : 25 Oct, 2006 // Modified: 23 Mar 2010 // Version : 2.0 // Notes : Программа использует один сдвиговый регистр 74HC595 // : для вывода значений от 0 до 255 //**************************************************************** //Пин подключен к ST_CP входу 74HC595int latchPin = 8;//Пин подключен к SH_CP входу 74HC595int clockPin = 12;//Пин подключен к DS входу 74HC595int dataPin = 11; void setup() { //устанавливаем режим OUTPUT pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT);} void loop() { // отсчитываем от 0 до 255 и отображаем значение на светодиоде for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) { // устанавливаем синхронизацию "защелки" на LOW digitalWrite(latchPin, LOW); // передаем последовательно на dataPin shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay); //"защелкиваем" регистр, тем самым устанавливая значения на выходах digitalWrite(latchPin, HIGH); // пауза перед следующей итерацией delay(500); }}

Код примера 1.2

/* Shift Register Example for 74HC595 shift register Created 22 May 2009 Created 23 Mar 2010 by Tom Igoe */ //Пин подключен к ST_CP входу 74HC595int latchPin = 8;//Пин подключен к SH_CP входу 74HC595int clockPin = 12;//Пин подключен к DS входу 74HC595int dataPin = 11; void setup() { //устанавливаем режим OUTPUT pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); Serial.begin(9600); Serial.println(“reset”);} void loop() { if (Serial.available() > 0) { // Символы от '0' до '9' // представлены в ASCII таблице значения от 48 до 57. int bitToSet = Serial.read() – 48; // Записываем HIGH в позицию соответствующую bitToSet registerWrite(bitToSet, HIGH); }} // Этот метот записывает байт в регистрvoid registerWrite(int whichPin, int whichState) {// инициализируем и обнуляем байт byte bitsToSend = 0; //Отключаем вывод на регистре digitalWrite(latchPin, LOW); // устанавливаем HIGH в соответствующем бите bitWrite(bitsToSend, whichPin, whichState); // проталкиваем байт в регистр shiftOut(dataPin, clockPin, MSBFIRST, bitsToSend); // “защелкиваем” регистр, чтобы байт появился на его выходах digitalWrite(latchPin, HIGH);}

Пример использования каскада сдвиговых регистров

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

Подключаем второй регистр к питанию и общей земле точно так же, как и первый.

Далее DS вход (пин 14) подключается к Q7' выходу (пин 9) первого регистра (синий провод). А SH_CP (пин 11) и ST_CP (pin 12) подключаются параллельно регистру к соответствующим входам первого регистра. Желтый и зеленый провод соответственно.

К выходам второго регистра подключаем зеленые светодиоды.

Схема подключения

Код примера 2.1

//**************************************************************//// Name : shiftOutCode, Hello World // Author : Carlyn Maw,Tom Igoe, David A. Mellis // Date : 25 Oct, 2006 // Modified: 21 Mar 2010 // Modified: 19 Feb 2011 // Version : 2.0 // Notes : Программа использует два сдвиговых регистра 74HC595 // : для вывода значений от 0 до 255 //**************************************************************** //Пин подключен к ST_CP входу 74HC595int latchPin = 8;//Пин подключен к SH_CP входу 74HC595int clockPin = 12;//Пин подключен к DS входу 74HC595int dataPin = 11; void setup() { //устанавливаем режим OUTPUT pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT);} void loop() { // отсчитываем от 0 до 255 и отображаем значение на светодиоде for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) { // устанавливаем синхронизацию "защелки" на LOW digitalWrite(latchPin, LOW); // передаем отсчет для вывода на зеленые светодиоды shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay); // передаем обратный отсчет для вывода на красные светодиоды shiftOut(dataPin, clockPin, MSBFIRST, 255-numberToDisplay); //"защелкиваем" регистр, тем самым устанавливая значения на выходах digitalWrite(latchPin, HIGH); // пауза перед следующей итерацией delay(500); }}

Код примера 2.2:

/* Программа поочередно включается все светодиоды, подключенные к двумсдвиговым регистрам 74HC595 .Created 22 May 2009 Modified 23 Mar 2010 by Tom Igoe */ //Пин подключен к ST_CP входу 74HC595const int latchPin = 8;//Пин подключен к SH_CP входу 74HC595const int clockPin = 12;//Пин подключен к DS входу 74HC595const int dataPin = 11; char inputString[2]; void setup() { //устанавливаем режим OUTPUT pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); Serial.begin(9600); Serial.println(“reset”);} void loop() { // проходим циклом по всем 16 выходам двух регистров for (int thisLed = 0; thisLed < 16; thisLed++) { // записываем сигнал в регистр для очередного светодиода registerWrite(thisLed, HIGH); // если это не первый светодиод, то отключаем предыдущий if (thisLed > 0) { registerWrite(thisLed – 1, LOW); } // если это первый светодиод, то отключаем последний else { registerWrite(15, LOW); } // делаем паузу перед следующией итерацией delay(250); } } // этот метод отсылает бит на сдвиговый регистр void registerWrite(int whichPin, int whichState) { // для хранения 16 битов используем unsigned int unsigned int bitsToSend = 0; // выключаем светодиоды на время передачи битов digitalWrite(latchPin, LOW); // устанавливаем HIGH в соответствующий бит bitWrite(bitsToSend, whichPin, whichState); // разбиваем наши 16 бит на два байта // для записи в первый и второй регистр byte registerOne = highByte(bitsToSend); byte registerTwo = lowByte(bitsToSend); // “проталкиваем” байты в регистры shiftOut(dataPin, clockPin, MSBFIRST, registerTwo); shiftOut(dataPin, clockPin, MSBFIRST, registerOne); // “защелкиваем” регистр, чтобы биты появились на выходах регистра digitalWrite(latchPin, HIGH);}

Источник: http://arduino.ru/Tutorial/registr_74HC595

SN74HC595N – TI – Datasheet и Купить – FindIC.ru

МИКРОСХЕМА SN74HC595N

Shift Register, HC Family, 74HC595, Serial to Parallel, 1Element, 8Bit, DIP, 16Pins

The SN74HC595N device contain an 8 bit serial in, parallel out shift register that feeds an 8 bit D type storage register. The storage register has parallel 3 state outputs. Separate clocks are provided for both the shift and storage register.

The shift register has a direct overriding clear (SRCLR) input, serial (SER) input, and serial outputs for cascading. When the output-enable (OE) input is high, the outputs are in the high-impedance state. Both the shift register clock (SRCLK) and storage register clock (RCLK) are positive-edge triggered.

If both clocks are connected together, the shift register always is one clock pulse ahead of the storage register.

.8 bit serial-in, parallel-out shift.Wide operating voltage range of 2V to 6V.High current 3 state outputs can drive up To 15 LSTTL loads.Low power consumption: 80µA max..±6-mA output drive at 5V.Low input current: 1µA max..Shift register has direct clear

NXP 74HC595D Shift Register, HC Family, 74HC595, Serial to Parallel, Serial to Serial, 1Element, 8Bit, SOIC

The 74HC595D is a high speed Si-gate CMOS device and is pin compatible with low power Schottky TTL (LSTTL). They are specified in compliance with JEDEC standard No. 7A. The 74HC595D is an 8 stage serial shift register with a storage register and 3 state outputs. The registers have separate clocks.

Data is shifted on the positive going transitions of the shift register clock input (SHCP). The data in each register is transferred to the storage register on a positive going transition of the storage register clock input (STCP).

If both clocks are connected together, the shift register will always be one clock pulse ahead of the storage register. The shift register has a serial input (DS) and a serial standard output (Q7S) for cascading. It is also provided with asynchronous reset (active LOW) for all 8 shift register stages.

The storage register has 8 parallel 3-state bus driver outputs. Data in the storage register appears at the output whenever the output enable input (OE) is LOW.

.8 bit serial input.8 bit serial or parallel output.Storage register with 3 state outputs.Shift register with direct clear.100MHz typ. shift out frequency

Page 3

NXP 74HC595D,118 Shift Register, HC Family, 74HC595, Serial to Parallel, Serial to Serial, 8Element, 8Bit, SOIC

The 74HC595D is a 8-bit serial-in/serial or parallel-out Shift Register with output latches and 3-state outputs. Both the shift and storage register have separate clocks. The device features a serial input (DS) and a serial output (Q7S) to enable cascading and an asynchronous reset MR input.

A LOW on MR will reset the shift register. Data is shifted on the low-to-high transitions of the SHCP input. The data in the shift register is transferred to the storage register on a low-to-high transition of the STCP input.

If both clocks are connected together, the shift register will always be one clock pulse ahead of the storage register. Data in the storage register appears at the output whenever the output enable input (OE) is LOW. A high on OE causes the outputs to assume a high-impedance off-state.

Operation of the OE input does not affect the state of the registers. This enables the use of current limiting resistors to interface inputs to voltages in excess of VCC.

.Shift register with direct clear.100MHz Shift out frequency.±1µA Input leakage current.±10µA Off-state output current.160µA Supply current

Page 4

Shift Register Single 8Bit Serial to Serial/Parallel 16Pin SOIC N T/R

This 74VHC595MX counter shift register from Fairchild Semiconductor can be optimized in any circuit which contains numerous states, it will help maintain and switch into other states. With a 3-state output, this is power management at its best.

This counter shift register has an operating temperature range of -40 °C to 85 °C. Tape and reel packaging will encase the product during shipment, ensuring safe delivery and enabling quick mounting of components. This device has a typical operating supply voltage of 2.5|3.3|5 V.

Its minimum operating supply voltage of 2 V, while its maximum is 5.5 V.

Page 5

FAIRCHILD SEMICONDUCTOR 74VHC595M Shift Register, HC Family, 74VHC595, Serial to Parallel, 1Element, 8Bit, SOIC, 16Pins

The 74VHC595M is a 8-bit high-speed CMOS Shift Register with output latches. It is fabricated with silicon gate CMOS technology. It achieves the high-speed operation similar to equivalent Bipolar Schottky TTL while maintaining the CMOS low power dissipation.

This device contains an 8-bit serial-in, parallel-out shift register that feeds an 8-bit D-type storage register. The storage register has eight 3-STATE outputs. Separate clocks are provided for both the shift register and the storage register.

The shift register has a direct-overriding clear, serial input and serial output (standard) pins for cascading. Both the shift register and storage register use positive-edge triggered clocks.

If both clocks are connected together, the shift register state will always be one clock pulse ahead of the storage register. An input protection circuit insures that 0 to 7V can be applied to the input pins without regard to the supply voltage.

.Power down protection is provided on all inputs.High noise immunity.Low power dissipation.Pin and function compatible with 74HC595

Page 6

FAIRCHILD SEMICONDUCTOR 74VHC595MTCX Shift Register, Serial to Parallel, 1Element, TSSOP, 16Pins, 2V, 5.5V

The 74VHC595MTCX is a 8-bit high-speed CMOS Shift Register with output latches. It is fabricated with silicon gate CMOS technology. It achieves the high-speed operation similar to equivalent Bipolar Schottky TTL while maintaining the CMOS low power dissipation.

This device contains an 8-bit serial-in, parallel-out shift register that feeds an 8-bit D-type storage register. The storage register has eight 3-STATE outputs. Separate clocks are provided for both the shift register and the storage register.

The shift register has a direct-overriding clear, serial input and serial output (standard) pins for cascading. Both the shift register and storage register use positive-edge triggered clocks.

If both clocks are connected together, the shift register state will always be one clock pulse ahead of the storage register. An input protection circuit insures that 0 to 7V can be applied to the input pins without regard to the supply voltage.

.Power down protection is provided on all inputs.High noise immunity.Low power dissipation.Pin and function compatible with 74HC595

Page 7

FAIRCHILD SEMICONDUCTOR 74VHC595MTC Shift Register, HC Family, 74VHC595, Serial to Parallel, 1Element, 8Bit, TSSOP, 16Pins

Add to the complexity of a system by implementing this 74VHC595MTC counter shift register developed by Fairchild Semiconductor. With a 3-state output, this is power management at its best.

This counter shift register has an operating temperature range of -40 °C to 85 °C. This product comes in rail packaging to keep individual parts separated and protected. This device has a typical operating supply voltage of 2.5|3.3|5 V.

Its minimum operating supply voltage of 2 V, while its maximum is 5.5 V.

Page 8

FindIC.com сайт:

Источник: https://ru.findic.com/price/sn74hc595n-peBnWvYej.html

Сдвиговый регистр 74HC595 и семисегментный индикатор

МИКРОСХЕМА SN74HC595N

В ситуации когда не хватает выходов микроконтроллера, что обычно делают? Правильно – берут микроконтроллер с большим количеством выходов. А если не хватает выводов у микроконтроллера с самым большим количеством выходов, то могут поставить и второй микроконтроллер.
Но в большинстве случаев проблему можно решить более дешевыми способами например использовать сдвиговый регистр 74HC595.

Преимущества использования сдвигового регистра 74HC595:

  • не требует никакой обвязки кроме конденсатора по питанию;
  • работает через широкораспостраненный интерфейс SPI;
  • для самого простого включения достаточно двух выходов микроконтроллера;
  • возможность практически неограниченного расширения количества выходов без увеличения занятых выходов микроконтроллера;
  • частота работы до 100 МГц;
  • напряжение питания от 2 В до 6 В;
  • дешевый — стоит менее 5 центов;
  • выпускается как в планарных корпусах (74HC595D удобен для производства), так и в DIP16 (74HC595N удобен для радиолюбителей и макетирования).

Для понимания работы регистра стоит взглянуть на функциональную схему. Она состоит из:

  • 8-битного регистра сдвига,
  • 8-битного регистра хранения,
  • 8-битного выходного регистра.

Рассмотрим какие выводы есть у сдвигового регистра 74hc595.

Общего вывод и вывод питания объяснений не требуют.

  • GND — земля
  • VCC — питание 5 вольт

OE

Вход переводящий выходы из высокоимпедансного состояние в рабочее состояние. При логической единице на этом входе выходы 74HC595 будут отключены от остальной части схемы.

Это нужно например для того чтобы другая микросхема могла управлять этими сигналами.
Если нужно включить в рабочее состояние микросхеме подайте логический ноль на этот вход.

А если в принципе не нужно переводить выходы в высокоимпедансное состояние – смело заземляйте этот вывод.

MR — сброс регистра

Переводить все выходы в состояние логического нуля. Чтобы сбросить регистр нужно подать логический ноль на этот вход и подать положительный импульс на вход STCP.
Подключаем этот выход через резистор к питанию микросхемы и при необходимости замыкаем на землю.

DS – вход данных

Последовательно подаваемые сюда данные будут появляются на 8-ми выходах регистра в параллельной форме.

SHCP – вход для тактовых импульсов

Когда на тактовом входе SHCP появляется логическая единица, бит находящийся на входе данных DS считывается и записывается в самый младший разряд сдвигового регистра.

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

Тот бит который был записан ранее сдвигается на один разряд (из Q0 в Q1) , а его место занимает вновь пришедший бит. И так далее по цепочке.

STCP – вход «защёлкивающий» данные

Что бы данные появились на выходах Q0…Q7 нужно подать логическую единицу на вход STCP. Данные поступают в параллельный регистр который сохряняет их до следующего импульса STCP.

Выходы 74HC595

  • Q0…Q7 – выходы которыми будем управлять. Могут находится в трёх состояниях: логическая единица, логический ноль и высокоимпедансное состояние
  • Q7′ – выход предназначенный для последовательного соединения регистров.

Временная диаграмма на которой показано движение логической единицы по всем выходам регистра.

Как говориться лучше один раз увидеть, чем семь раз услышать. Я сам впервые применяя регистр 74HC595 не до конца понимал его работу и чтобы понять смоделировал нужную схему в Proteus.

Вот такая схема подключения семисегментных индикаторов к микроконтроллеру ATMega48 по SPI получилась:

Это схема с динамической индикацией, то есть в каждый момент времени загорается только одна цифра счетверенного семисегментного индикатора, потом загорается следующая и так по кругу. Но так как смена происходит очень быстро, то глазу кажется, что горят все цифры.Кроме того одновременно эта схема и опрашивает 4 кнопки S1-S4.

Добавив два сдвоенных диода можно опрашивать 8 кнопок. А добавив 4 транзистора и резистора можно подключить дополнительный 4-х знаковый индикатор.

Чтобы динамическая индикация заработала в регистры нужно послать два байта: первый байт определяет, какой из 4-х индикаторов будет работать и какую кнопку будем опрашивать.

А второй, какие из сегментов загорятся.

Источник: http://HardElectronics.ru/74hc595.html

Сдвиговый регистр 74hc595 Arduino

МИКРОСХЕМА SN74HC595N

В какой-то момент времени вы неизбежно столкнетесь с проблемой отсутствия достаточного количества контактов на вашем ардуино для удовлетворения потребностей вашего проекта или прототипа. Решение этой проблемы? Сдвиговый регистр, а точнее Arduino сдвиговый регистр 74hc595.

Каждый кто делал проекты на Ардуино, где использовал много светодиодов, понимал, что в значительной степени ограничен контактами Arduino и не может создавать огромные проекты, требующие большого количества контактов.

В нашем конкретном проекте 16 светодиодов управляются всего лишь тремя контактами Arduino. Ключевым элементом является arduino сдвиговый регистр 74hc595.

Каждый сдвиговый регистр 74HC595 может принимать до 8 светодиодов, а с помощью последовательных цепочек регистров можно увеличить контакты платы от условных 3-х до бесконечного числа.

Как работает регистр сдвига?

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

Первое, что нужно прояснить, – это понятие «биты» для тех из вас, кто не знаком с двоичным кодом. Когда мы говорим о «битах», мы имеем в виду одно из чисел, составляющих двоичное значение.

В отличие от обычных чисел, мы обычно считаем, что первый бит является самым большим. Итак, если мы берем двоичное значение 10100010, первый бит на самом деле равен 0, а восьмой бит равен 1.

Следует также отметить, если это не подразумевалось, каждый бит может быть только 0 или 1.

Чип содержит восемь контактов, которые мы можем использовать для вывода, каждый из которых связан с битом в регистре. В случае сдвигового регистра 74HC595 мы рассматриваем их от QA до QH.

Чтобы записать эти выходы через Arduino, мы должны отправить двоичное значение в регистр сдвига, и из этого числа сдвиговый регистр может определить, какие выходы использовать. Например, если мы отправили двоичное значение 10100010, контакты, выделенные зеленым цветом на изображении выше, будут активными, а выделенные красным цветом будут неактивными.

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

Теперь, когда у нас есть основное понимание того, как мы используем смещение битов, чтобы указать, какие контакты использовать, мы можем начать подключать его к нашему Arduino.

Начинаем с 8 светодиодов

Для первой части урока нам понадобятся следующие комплектующие:

  • Arduino Uno
  • Макетная плата
  • Ардуино сдвиговый регистр 74HC595
  • 8 светодиодов
  • 8 резисторов – 220 ом должно хватить
  • Провода/перемычки

Начните с размещения сдвигового регистра на вашем макете, гарантируя, что каждая сторона находится на отдельной стороне макета, как показано ниже.

С надписью, направленной вверх, штифты 1-8 с левой стороны сверху вниз и 16 – 9 с правой стороны сверху вниз, как показано на рисунке ниже.

Собираем схему

Для начала подключим контакты 16 (VCC) и 10 (SRCLR) к выходу 5v на Arduino и соединяем выводы 8 (GND) и 13 (OE) с выводом Gnd на Arduino. Pin 13 (OE) используется для включения выходов, так как это активный низкий контакт, который мы можем подключить непосредственно к земле.

Затем нам нужно соединить три контакта, которыми мы будем управлять сдвиговым регистром:

  • Pin 11 (SRCLK) сдвигового регистра 74HC595 на пин 11 на Arduino – это будет называться «синхронизирующим пином»,
  • Pin 12 (RCLK) сдвигового регистра на пин 12 на Arduino – это будет обозначаться как «пин защелка»,
  • Pin 14 (SER) сдвигового регистра на пин 13 на Arduino – это будет называться «пином данных»,

Все три этих контакта используются для выполнения сдвига битов, упомянутого ранее в этом руководстве. К счастью, ардуино предоставляет вспомогательную функцию специально для регистров сдвига, называемую shiftOut, которая будет обрабатывать почти все для нас, но мы вернемся к этому при просмотре кода.

Теперь нам просто нужно подключить все выходные выводы к нашим светодиодам, гарантируя, что резистор размещается перед светодиодами, чтобы уменьшить ток и что катоды светодиодов направлены на землю.

Чтобы уменьшить нагромождение проводов до минимума, мы поместили резисторы и светодиоды на отдельный макет, однако, вы можете воспользоваться одной макетной платой.

При размещении светодиодов убедитесь, что они подключены по порядку, так что QA подключен к первому светодиоду, а QH подключен к последнему светодиоду, так как иначе наш код не включит светодиоды в правильном порядке. Когда вы закончите, у вас должно получится что-то вроде этого:

Скетч для ардуино

Теперь мы готовы загрузить код. Подключите свой Arduino к компьютеру и загрузите на него следующий эскиз для 74hc595 Arduino:

int latchPin = 12; int clockPin = 11; int dataPin = 13; byte leds = 0; int currentLED = 0; void setup() { pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); leds = 0; } void loop() { leds = 0; if (currentLED == 7) { currentLED = 0; } else { currentLED++; } bitSet(leds, currentLED); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, leds); digitalWrite(latchPin, HIGH); delay(250); }

Для начала определим в верхней части эскиза следующее:

  • Расположение пинов: синхронизатора, защелки и данных
  • Байт, который будет хранить биты, которые указывают сдвиговому регистру, какой вывод использовать
  • Переменную, которая будет отслеживать, какой светодиод мы должны включить

В методе setup мы просто инициализируем режимы пинов и переменную светодиодов.

В методе loop (цикл) мы очищаем биты в переменной leds в начале каждой итерации, так что все биты устанавливаются в 0, так как мы хотим только включать один светодиод за раз. После этого мы увеличиваем или перезапускаем текущую переменную currentLED, чтобы затем опять включать правильный светодиод.

После этих двух операций мы переходим к более важной части – смещению бит. Сначала мы начинаем с вызова метода bitSet. Мы передаем методу bitSet байт, что хранит биты, и переменную currentLED.

Этот метод позволяет нам установить отдельные биты байта, указав их положение. Например, если мы хотим вручную установить байт в 10010, мы могли бы использовать следующие вызовы, поскольку биты, которые нам нужно установить в 1, являются вторыми справа (это позиция 1, когда мы начинаем в позиции 0) и пятый справа, который находится в положении 4:

bitSet(leds, 1); bitSet(leds, 4);

Таким образом, каждый раз, когда мы увеличиваем текущую переменную currentLED и передаем ее методу bitSet, мы каждый раз устанавливаем бит слева от предыдущего до 1 и, таким образом сообщаем сдвиговому регистру активировать вывод слева от предыдущего.

После установки бит мы записываем на контакт защелки указание сдвиговому регистру, что собираемся отправить ему данные. Как только мы это сделаем, мы вызываем метод shiftOut, который есть Arduino.

Этот метод разработан специально для использования сдвиговых регистров и позволяет просто сдвигать биты за один вызов.

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

Как только мы закончим смещение битов, мы снова обращаемся на контакт защелки (используя HIGH в этот раз), чтобы указать, что мы отправили все данные. После того, как операция записи будет завершена, загорится соответствующий светодиодный индикатор, а затем задержится на 250 миллисекунд, прежде чем всё повторится.

16 светодиодов

Теперь перейдем к более сложной схеме используем 74hc595 Arduino для 16 светодиодов.

Детали

По большому счету в данном случае количество всех комплектующих увеличиваем вдвое, кроме, конечно, Ардуино Уно:

  • Arduino UNO (x1)
  • 74HC595 сдвиговый регистр (x2)
  • Светодиоды (x16)
  • 220 ом резисторы (x16)
  • Провода/перемычки
  • Две макетные платы (одна с 400 пинами, вторая с 830 пинами)
  • Потенциометр для контроля яркости (по желанию)

Схема соединения

Схема соединения получилась уже больше, чем при 8 светодиодах и одном регистре сдвига 74HC595.

Соберите схему как на рисунке выше и подключите первый регистр сдвига следующим образом:

  • GND (контакт 8) на землю
  • Vcc (контакт 16) – 5В
  • OE (контакт 13) на землю (GND)
  • MR (контакт 10) – 5 В
  • DS (контакт 14) – пин 11 Arduino
  • SH_CP (контакт 11) на контакт Arduino 12
  • ST_CP (контакт 12) к контакту 8 Arduino

Подключите второй регистр сдвига точно так же, но подключите DS (контакт 14) к первому выходу 9 регистра. После этого соедините контакты 1, 2, 3, 4, 5, 6, 7 и 15 из обоих регистров и светодиоды.

Это соединение делает все контакты всегда активными и адресными, однако при включении Arduino некоторые из светодиодов могут быть включены.

Решение для этого – подключить MR (контакт 10) и OE (контакт 13) к Arduino напрямую, но таким образом вы должны пожертвовать 2 выводами ардуины.

Чтобы добавить больше регистров сдвига, соедините их, как второй регистр. Всегда подключайте контакты MR и OE непосредственно к контакту Arduino и DS к предыдущему регистру. Если вы хотите отрегулировать яркость светодиодов, подключите потенциометр, как показано на рисунке выше, для управления сопротивлением для всех светодиодов. Однако это необязательно, и вы можете обойтись без него.

Поделиться:
Нет комментариев

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

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