Не отступай и не сдавайся !!!
Ардуино, ESP32, ESP8266, LoRa. Обучение. Моделирование. Программирование под заказ.
Измерение и контроль параметров: температура, влажность, освещённость, давление, наличие напряжения, датчик движения, тревожная кнопка (дача, квартира, дом, цех, теплица, офис). Выдача измеренных параметров на персональную страницу в Интернете, на планшет, в смартфон. В случае выхода параметров за заданные границы - оповещение по электронной почте, sms.

Подключаем сдвиговый регистр 74HC595

Обратим внимание на некоторые технические характеристики данного регистра сдвига.

Граничная частота тактирования не должна превышать 100 МГц, так что с нашими 8 или 16 МГц тактировой частоты контроллера мы вряд ли данную частоту превысим.

Напряжение питания микросхемы – от 2 до 6 В.

Данная микросхема существует в двух типах корпусов – обычный DIP, а также DHVQFN16, Мы будем использовать первый вариант, поэтому и посмотрим распиновку по данному варианту.


У микросхемы 16 ножек. Посмотрим их назначение в таблице

Pin Обозначение Описание
1 Q1 Параллельный выход общего назначения.
2 Q2 Параллельный выход общего назначения.
3 Q3 Параллельный выход общего назначения.
4 Q4 Параллельный выход общего назначения.
5 Q5 Параллельный выход общего назначения.
6 Q6 Параллельный выход общего назначения.
7 Q7 Параллельный выход общего назначения (старший разряд).
8 GND GND (общая шина).
9 Q7` Последовательны выход на следующую микросхему.
10 !MR Master reset. Сброс. При переводе сигнала в LOW.
11 SH_CP D нашем случае это будет chip select.
12 SH_CP Ножка управления регистром хранения, в нашем случае это будет ножка синхронизации, на которую мы будем подавать тактовые импульсы.
13 !OE Задействования выхода Q7`. При LOW последовательный выход включен, при HIGH – выключен.
14 DS Вход. На ножку подаётся последовательный сигнал.
15 Q0 Параллельный выход общего назначения (младший разряд)
16 Vcc Напряжение питания: +5В.

Блоксхема поможет до конца понять назначение ножек








Здесь, Q0 - Q7 - это цифровые выходы. MR - это reset. OE - переводит выводы в HiZ режим. Q'7 - это бит переполнения, используется для соединения регистров каскадом. DS - линия передачи данных, SH - линия тактирования, ST - защелка(latch), но мне привычнее такие штуки называть Enter'ом.

В рабочем состоянии, OE должен быть соединен с землей, а MR подтянут к питанию.

Ведущий микроконтроллер может менять состояние DS при низком уровне линии тактирования - SH.

Чип считывает состояние линии DS при растущем фронте на линии тактирования SH.

Прием данных сдвиговым регистром происходит при низком уровне защелки - ST.

При этом принимаемые данные идут во внутренний (теневой) регистр (на самом деле там одна цепочка триггеров).

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

Данные посылаются старшим вперед.

Временная диаграмма сигналов:



Пример программы управления семисегментным индиктором для Ардуино


#define Pin2DS     14 // пин данных Ардуино. Соединяется с 14 выв (DS) регистра первого каскада
// Для последующих каскадов pin9 регистра предыдущего каскада соединяется с 14 выв (DS) регистра 
// следующего каскада
#define Pin2ShCp 11 // пин тактов синхронизации. Соединяется с 11 выв (SHCP) регистров всех каскадов
#define Pin2StCp  12 // пин защелки. Соединяется с 12 выв (STCP) регистров всех каскадов

//  Q0-Q7 – восемь параллельных выходов общего назначения. Данные выходы нужны для того, чтобы 
// мы могли как-то воспользоваться 
//  16 - VCC – напряжение питания. +5В
//   8  - GND/Земля – общий провод.
//   9  - Q7' – последовательный выход данных.
//  14  - DS – последовательный вход данных.
//  10  - MR – это master reset. LOW - cборс/обнуление. Подключаем к +5В.
//  11  - SH_CP – в нашем случае это будет chip select.
//  12  - ST_CP – это ножка управления регистром хранения, в нашем случае это будет ножка 
// синхронизации, на которую мы будем подавать тактовые импульсы.
//  13  - OE – задействования выхода. При отрицательном значении последовательный выход 
// включен, при положительном – выключен. Подключаем к GND.


byte b[6] = 
{   
       // байты, который будут последовательно циклически выводиться в регистре
       0b00000000,
       0b11111111,
       0b11110000,
       0b00001111,
       0b10101010,
       0b01010101,
};

void setup()
{
      pinMode(Pin2DS, OUTPUT);    // инициализация пинов
      pinMode(Pin2ShCp, OUTPUT);
      pinMode(Pin2StCp, OUTPUT);
      digitalWrite(Pin2StCp, HIGH);
}

void loop()
 {
     static byte i = 0;
     out_595_shift(b[i]);      // передача байта на регистр
     i = i == 5 ? 0 : i + 1;       // подготовка следующего байта
     delay(1000); // задержка между установками 1 сек
}

void out_595_shift(byte x)
 {
     digitalWrite(Pin2StCp, LOW);              // "открываем защелку"
     shiftOut(Pin2DS, Pin2ShCp, LSBFIRST, x); // "отправляем данные"
     digitalWrite(Pin2StCp, HIGH);             // "закрываем защелку", выходные ножки регистра установлены
}

Похожие запросы по теме:

© 2000-2023 - 29/1/22 8:33
Хостинг нашего сайта осуществляется узлом www.cherepovets-city.ru