В интернете есть куча статей на тему работы сдвигового регистра, но все они написаны каким-то уж совсем слишком сложным языком и могут запросто напугать неподготовленного пользователя до такой степени, что он сразу же забросит только что открывшийся для себя мир электроники.
В данной статье я постараюсь рассказать простым языком как управлять сдвиговым регистром 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), то мы и получим как раз тот байт, который нужно записать в регистр.
Вот и все. Я постарался объяснить все очень доступным и даже иногда "детским языком", но после данной статьи, я думаю, не должно возникнуть вопросов о том, как же работает сдвиговый регистр.
2018-09-11 16:12