8 (800) 350-30-16

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

Дата: / Категория: Микросхемы / Автор: DOC_tr

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

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

Итак, приступим. У нас есть сдвиговый регистр 74hc595:

Ноги у него располагаются следующим образом (на картинке левая сторона - это низ):

Q0 - Q7(1-7 и 15) это как раз наши 8 выходов, которыми мы будем управлять;
GND и OE(8 и 13) - земля. Подключаем к минусу;
Vcc и MR(16 и 10) - питание. Подключаем к плюсу;
DS, STCP и SHCP(14, 12 и 11) - подключаем к Arduino;
Q7S(9) - порт для подключения нескольких регистров, чтобы из 3х портов делать 16, 24, 32 и так далее. 

А теперь, как все это работает и как он управляет восемью выходами.

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

Для того чтобы мы могли вносить в регистр данные по управлению выходами, нужно отключить питание от ноги STCP (12):

digitalWrite(12, LOW);

А теперь задействуем функции shiftOut(dataPin, clockPin, bitOrder, byte)

  • dataPin - нога DS (14);
  • clockPin - нога SHCP(11);
  • bitOrder - порядок битов (в данном примере нам будет не нужен, да и я его редко использую и чаще всего можно просто поставить туда 0 и забыть);
  • byte - наш байт. Собственно самая интересная часть, о которой я сейчас расскажу подробнее.

После чего мы подаем сигнал на ногу STCP (12) и регистр выполняет все то, что он запомнил.

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

digitalWrite(12, LOW);
shiftOut(14, 11, 0, B01010101);
digitalWrite(12, HIGH);

В принципе это весь код, который работает с нашим регистром, и для управления питанием нам нужно менять только значение байта B01010101

Что же делает данный код? Так как регистр простой, он может управлять только подачей питания (включение/выключение), что мы делаем с помощью битов в нашем байте. Передав туда значение B01010101, мы включаем пины 1, 3, 5 и 7. То есть бит в байте отвечает за подачу (1) или отсутствие (0) сигнала на ноге с порядковым номером бита - первый бит за нулевую ногу, второй за первую, и так далее.

Если вникнуть более подробно, то можно представить наш байт следующим образом:

B(Q0)(Q1)(Q2)(Q3)(Q4)(Q5)(Q6)(Q7)

 Как вы видите, значений в скобках ровно 8, а если заменить их значением, которое нам нужно передать на соответствующий выход (1 или 0), то мы и получим как раз тот байт, который нужно записать в регистр.

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

Теги: #74HC595

Ваша оценка:

Рейтинг: 9.9 (Оценок: 5)

Комментарий:

Copyright © RobOM.ru 2016 г. Все права защищены