6Подключение нескольких регистров сдвига к Arduino
Если подключить несколько сдвиговых регистров таким образом, чтобы линии CLOCK (SCLK на рисунке ниже), MOSI и MISO у них были общие, а ENABLE (SS на рисунке) каждой микросхемы подключались к разным цифровым выводам Arduino, то можно независимо обращаться к каждому из сдвиговых регистров, активизируя низким уровнем соответствующий из них, и записывать в регистры данные и считывать из них данные. Такое подключение называется независимым.
Независимый и каскадный типы подключений по интерфейсу SPI
Независимое подключение ведомых SPI устройств (например, регистров 74HC595) к ведущему (например, Arduino) изображено на левой части рисунка. Думаю, это уже достаточно просто для нас, так как оно почти ничем не отличается от подключения одного сдвигового регистра. Поэтому давайте рассмотрим другой тип подключения – каскадный.
2Краткое описание интерфейса SPI
Коротко напомню о последовательном интерфейсе SPI, который мы будем использовать для передачи данных в сдвиговый регистр.
SPI – это четырёхпроводный двунаправленный последовательный интерфейс, в котором принимают участие ведущее и ведомое устройства. Ведущим в нашем случае будет являться Arduino, ведомым – регистр 74HC595.
Среда разработки для Arduino имеет встроенную библиотеку работы по интерфейсу SPI. При её применении используются цифровые выводы с 10 по 13 на платах Arduino Uno и Arduino Nano; также они продублированы и выведены на отдельный разъём ICSP:
Выводы Arduino, отведённые под SPI
Обозначение вывода | Назначение |
---|---|
SCLK | вывод тактовых импульсов SPI; |
MOSI | данные от ведущего – к ведомому; |
MISO | данные от ведомого к ведущему; |
SS | выбор ведомого. |
Десятичный счетчик.
Десятичный счетчик состоит из декадных счетчиков, причем
число декадных счетчиков равно максимальному разряду десятичных чисел, которые
счетчик может считать. Каждый декадный счетчик является двоично-десятичным. Он
считает в двоично-десятичном коде от 0 до 10. При поступлении на вход декадного
счетчика десятого импульса все его выходы устанавливаются в нулевое состояние.
Схема декадного счетчика и временные диаграммы показаны на рис.2.
Рис. 2. Декадный счетчик.
Временные диаграммы. Структурная схема.
Благодаря обратной связи инвертирующего выхода третьего
триггера со входом первого триггера на входе первого триггера J = Q3
= 1, пока не пришел и не закончился восьмой импульс. После окончания восьмого
импульса Q3 = 0. В соответствии с таблицей состояний
JK-триггера выход первого триггера (на рис. 2 второй справа) Q1 = 0,
так как для него J = Q3 = 0; К = 1. Второй триггер (на рис.
13.3 а третий справа) является Т-триггером, так как у него J = К = 1 = const,
и управляется он срезом импульса Q1. В соответствии с временными диаграммами
(рис.2) его переключение произойдет лишь после 14-го импульса. Третий триггер
имеет J = J1 = J2 = 0; К = K1 = К2
= 1. По окончании десятого импульса он переключается в нулевое состояние срезом
импульса Q. Из временных диаграмм видно, что после десятого импульса
выходы всех триггеров находятся в нулевом состоянии. Если выход Q3
подать на вход С нулевого триггера следующего декадного счетчика, то на выходе
этого триггера Q становится равным 1 по окончании импульса Q3
первого декадного счетчика. Очевидно, что первый декадный счетчик считает
единицы, а второй — десятки.
Делитель частоты
Делитель
частоты — электронное устройство, уменьшающее в целое число раз частоту
подводимых к нему периодических колебаний. Их используют в синтезаторах
частоты, кварцевых часах, в телевизионных устройствах синхронизации генераторов
развёрток и др. Для деления частоты применяют: электронный счётчик (см. Триггер),
самовозбуждающийся генератор синусоидальных колебаний и т.д..
Делители частоты считают входные
импульсы до некоторого задаваемого коэффициентом счета состояния, а затем
формируют сигнал переключения триггеров в нулевое состояние, вновь начинают
счет входных импульсов до задаваемого коэффициента счета.
Регистры
Регистр — последовательное логическое устройство, используемое для
хранения n-разрядных двоичных чисел и выполнения преобразований над ними.
Регистр представляет собой
упорядоченную последовательность триггеров, число которых соответствует числу
разрядов в слове. С каждым регистром обычно связано комбинационное цифровое
устройство, с помощью которого обеспечивается выполнение некоторых операций над
словами. Фактически любое цифровое устройство можно представить в виде
совокупности регистров, соединенных друг с другом при помощи комбинационных
цифровых устройств.
Регистры классифицируются по
следующим видам:
1.Параллельные
или накопительные (регистры памяти, хранения);
2.Последовательные
или сдвигающие.
В свою очередь сдвигающие
регистры делятся:
·по способу ввода-вывода информация: параллельные;
последовательные; комбинированные;
·по направлению передачи информации:
однонаправленные; реверсивные.
Типичными являются следующие
операции:
·прием
слова в регистр;
·передача
слова из регистра;
·поразрядные
логические операции;
·сдвиг
слова влево или вправо на заданное число разрядов;
·преобразование
последовательного кода слова в параллельный и обратно;
·установка
регистра в начальное состояние (сброс)
Элементарной
ячейкой электронной памяти является триггер, способный сохранять 1 бит
записанной в нем информации. Регистром называется устройство из триггеров, предназначенное
для записи, хранения и выдачи информации. Каждый разряд двоичного числа
записывается в своем триггере, поэтому число триггеров в регистре определяет
разрядность записываемого числа. Наиболее распространенным видом регистров
являются регистры сдвига.
Последовательный вход и параллельный выход (SIPO)
Эта конфигурация позволяет преобразовать последовательный формат в параллельный. Ввод данных является последовательным, как описано в разделе SISO выше. После того, как данные были синхронизированы, они могут быть либо считаны на каждом выходе одновременно, либо их можно сдвинуть.
В этой конфигурации каждый триггер запускается по фронту . Все триггеры работают на заданной тактовой частоте. Каждый входной бит направляется к N-му выходу после N тактов, что приводит к параллельному выходу.
В случаях, когда параллельные выходы не должны изменяться в процессе последовательной загрузки, желательно использовать фиксированный или буферизованный выход. В регистре сдвига с защелкой (например, 74595 ) последовательные данные сначала загружаются во внутренний буферный регистр, а затем после приема сигнала загрузки состояние буферного регистра копируется в набор выходных регистров. В общем, практическое применение сдвигового регистра последовательного ввода / параллельного вывода состоит в преобразовании данных из последовательного формата на одном проводе в параллельный формат на нескольких проводах.
Контакты
* Звёздочкой отмечены контакты, существующие только когда атрибут Параллельная загрузка включен.
- Западный край, верхний контакт (вход, разрядность равна 1)
- Сдвиг: когда на нём 1 или он не подключен, все ступени сдвигаются при срабатывании тактового входа; но если на нём 0, никакого сдвига не происходит. Этот вход игнорируется, если на входе Загрузка 1.
- Западный край, средний контакт (вход, разрядность соответствует атрибуту Биты данных)
- Данные: при продвижении ступеней значение с этого входа загружается в первую ступень.
- Западный край, нижний контакт, отмечен треугольником (вход, разрядность равна 1)
- Тактовый вход: в момент срабатывания этого входа, как указано в атрибуте Срабатывание, компонент может сдвинуть ступени или загрузить новые значения.
- *Северный край, левый контакт (вход, разрядность равна 1)
- Загрузка: когда на этом входе 1, значения с остальных контактов на северном крае загружаются во все ступени при следующем срабатывании тактового входа. Когда на нём 0 или он не подключен, никакой загрузки не происходит.
- *Северный край, остальные контакты (вход, разрядность соответствует атрибуту Биты данных)
- Данные: эти значения загружаются во все ступени при срабатывании тактового входа, пока на входе Загрузка 1. Крайний левый вход соответствует младшей ступени.
- Южный край, левый контакт (вход, разрядность равна 1)
- Очистка: когда значение равно 1, все ступени асинхронно сбрасываются на 0, и все другие входы игнорируются.
- *Южный край, остальные контакты (выход, разрядность соответствует атрибуту Биты данных)
- Выход: выдаёт значение, хранящееся в каждой ступени; младшая ступень отражена в крайнем левом контакте (рядом со входом Очистка).
- Восточный край (выход, разрядность соответствует атрибуту Биты данных)
- Выход: выдаёт значение, хранящееся в последней (старшей) ступени.
4Тестовый скетч для изучения работы регистра сдвига
Напишем вот такой скетч и загрузим в память Arduino. Здесь мы по циклу будем записывать два числа – 210 и 0 – в сдвиговый регистр с небольшими временными интервалами между ними. Да, только и всего.
Скетч записи данных в сдвиговый регистр (разворачивается)
#include <SPI.h> // подключаем библиотеку SPI void setup() { SPI.begin(); // инициализируем SPI pinMode(PIN_SPI_SS, OUTPUT); } void loop() { digitalWrite(PIN_SPI_SS, LOW); // выбор регистра сдвига SPI.transfer(210); // передаём число "210" в сдвиговый регистр digitalWrite(PIN_SPI_SS, HIGH); // конец передачи delay(10); // задержка 10 мсек digitalWrite(PIN_SPI_SS, LOW); SPI.transfer(0); digitalWrite(PIN_SPI_SS, HIGH); delay(90); }
PIN_SPI_SS – это внутренняя стандартная константа, которая соответствует выводу «10» Ардуино в режиме SPI. Данная константа определена в файле pins_arduino.h, который находится по пути %programfiles%\arduino-(версия)\hardware\arduino\avr\variants\ Также там определены константы PIN_SPI_MOSI (пин 11), PIN_SPI_MISO (пин 12), PIN_SPI_SCK (пин 13). В ранних версиях Arduino IDE (например, 1.6.хх) этих констант не было.
В принципе, мы могли бы с таким же успехом использовать любой другой цифровой вывод Arduino; тогда пришлось бы в программе объявить его и не забыть задать режим работы – OUTPUT.
Подавая на этот вывод LOW, мы активируем наш сдвиговый регистр на приём/передачу. После передачи мы снова поднимаем напряжение в HIGH, и обмен заканчивается. Включим схему в работу и посмотрим, что покажет логический анализатор.
74HC595
Из этого руководства вы узнаете, как управлять 16 светодиодами используя всего 3 линии управления. Мы осуществим это путем последовательной передачи данных в сдвиговые регистры .
Микросхема 74HC595 содержит 8 битный регистр хранения и 8 битный сдвиговый регистр. Данные последовательно передаются в сдвиговый регистр, затем фиксируются в регистре хранения. К регистру хранения подключены 8 выходных линий. На картинке ниже показано расположение выводов микросхемы 74HC595.
Вывод 14 (DS) это вывод данных. В некоторых описаниях он обозначается как «SER».
Когда уровень на выводе 11 (SH_CP, иногда обозначается как SRCLK) переходит из низкого в высокий, значение на выводе DS сохраняется в сдвиговом регистре, при этом данные сдвигаются на один разряд, чтобы предоставить место для нового бита.
Пока на выводе 12 (ST_CP, иногда обозначается как RCLK) низкий уровень, данные записываются в регистр сдвига. Когда уровень переходит в высокий, данные из сдвигового регистра фиксируются в регистре хранения, из которого поступают на выводы Q0…Q7.
На представленной ниже временная диаграмме, показано, каким образом можно установить на выходах Q0…Q7 микросхемы значение 11000011, учитывая что изначально там было значение 00000000.
Ниже показана схема, которую мы соберем в несколько шагов.
Мы используем перфорированную макетную плату с контроллером , которую использовали во многих наших проектах. Добавим еще 2 пустых макетных платы и подведем к ним питание.
Установим микросхему регистра сдвига и подключим к ней питание +5 В и общий провод.
Теперь проведем 3 линии управления между микроконтроллером и регистром сдвига, для чего подсоединим:
- PC0 к DS
- PC1 к ST_CP
- PC2 к SH_CP
Этими линиями являются 3 синих провода на картинке ниже.
Затем подключим светодиоды и резисторы. Я использовал резисторы сопротивлением 510 Ом, но допустимы и другие номиналы.
Для демонстрации работы схемы я написал небольшую программу, которая выводит перемещающийся из стороны в сторону огонек на 8 светодиодах.
Все это конечно впечатляет, но разве я не говорил, что мы будем управлять 16 светодиодами? Чтобы сделать это, нам потребуется еще один сдвиговый регистр 74HC595, больше светодиодов, больше резисторов и больше оранжевых и голубых проводов.
Мы используем вывод Q7, чтобы соединить регистры сдвига в одну цепочку.
Модифицированная схема показана ниже.
Мы остановились на 16 светодиодах, но можно соединить в одну цепочку еще больше регистров сдвига. Эта методика конечно не ограничивается управлением светодиодами, ее можно использовать для увеличения числа портов вывода, чтобы управлять другими видами устройств.
Одно предупреждение касательно этой методики. Когда вы включаете схему, на выходах регистров наблюдаются некоторое произвольное значение. Для того чтобы записать требуемое значение, требуется меньше микросекунды, но для некоторых схем это может стать причиной проблем. В этом случае вы должны использовать выводы MR и OE, для сброса регистров хранения.
2Краткое описание интерфейса SPI
Коротко напомню о последовательном интерфейсе SPI, который мы будем использовать для передачи данных в сдвиговый регистр.
SPI – это четырёхпроводный двунаправленный последовательный интерфейс, в котором принимают участие ведущее и ведомое устройства. Ведущим в нашем случае будет являться Arduino, ведомым – регистр 74HC595.
Среда разработки для Arduino имеет встроенную библиотеку работы по интерфейсу SPI. При её применении используются цифровые выводы с 10 по 13 на платах Arduino Uno и Arduino Nano; также они продублированы и выведены на отдельный разъём ICSP:
Выводы Arduino, отведённые под SPI
Обозначение вывода | Назначение |
---|---|
SCLK | вывод тактовых импульсов SPI; |
MOSI | данные от ведущего – к ведомому; |
MISO | данные от ведомого к ведущему; |
SS | выбор ведомого. |
Вычитающий счетчик
Прохождение сигналов через триггеры счетчика. |
Вычитающие счетчики ( их еще называют счетчиками обратного счета) отличаются от суммирующих тем, что счетные входы каждого из последующих триггеров присоединяются не к прямому выходу предыдущего триггера, а к инверсному Q. Вторая особенность состоит в том, что в исходном состоянии все разряды или часть разрядов заполняется не нулями, а единицами уменьшаемого числа. При поступлении на вход импульсов, которые надо вычесть из заранее установленного числа, триггеры, начиная с первого, последовательно срабатывают и уменьшают установленное число.
Временная диаграмма асинхронного суммирующего счетчика. |
Асинхронные вычитающие счетчики строятся аналогично суммирующим счетчикам. Аналогично, схема на рис. 8.41, б преобразуется в схему вычитающего счетчика, если входы разрядов аъ Ьг, а2, Ьг подключить к выходам s2, s2, ss, s3 соответственно.
Отдельно вычитающие счетчики используются редко: операция вычитания организуется вместе со сложением в схемах реверсивных счетчиков. В ряде случаев работа счетчика начинается с произвольного числа, занесенного в счетчик в параллельном двоичном коде. В рассмотренных схемах ( рис. 9 — 5, 9 — 6) единица переноса из разряда в разряд передается последовательно.
Строится вычитающий счетчик так же, как суммирующий, но с тем отличием, что со входом каждого последующего триггера соединяется другой выход предыдущего триггера.
Вычитающий счетчик.| Реверсивный счетчик. |
Работа вычитающего счетчика происходит следующим образом.
В вычитающем счетчике поступление на вход очередной логической единицы ( очередного импульса) вызывает уменьшение хранившегося в счетчике числа на единицу. Он отличается от суммирующих счетчиков тем, что счетные входы каждого из последующих триггеров подсоединены не к прямому выходу предыдущего триггера, а к инверсному. Кроме того, в исходном состоянии все разряды ( или часть из них) заполняются не нулями, а единицами уменьшаемого числа. При поступлении на вход импульсов, которые надо вычесть из заранее установленного числа, триггеры, начиная с первого, последовательно срабатывают и уменьшают это число. На рис. 1.25 представлена схема вычитающего счетчика с последовательной передачей переносов. Как и суммирующий счетчик, вычитающий имеет период циклической работы, равный 2 импульсов.
Структурная схема двоичного.| Структурная схема регистра сдвига. |
В вычитающем счетчике перенос снимается не с нулевого, а с единичного выхода триггера. В реверсивном счетчике, в зависимости от режима, цепи переноса переключаются.
В вычитающем счетчике сигнал на счетный вход поступает с выхода Q предыдущего триггера, а не с выхода Q.
Электронный двоичный вычитающий счетчик. Вычитание производится с помощью таких же триггеров, как и в предыдущем случае, с тем отличием, что соединение их произведено несколько по-иному. Здесь выход каждого триггера берется с анода второй лампы и присоединяется, как и в предыдущем случае, к сетке первой лампы следующего триггера.
Пусть асинхронный вычитающий счетчик ( из задания 7) циклического типа.
Трехразрядный асинхронный счетчик. а — логическая структура. б — временная диаграмма. |
3Подключение сдвигового регистра74HC595 к Arduino
Давайте соберём схему, которая показана на рисунке.
Схема подключения сдвигового регистра 74HC595 к Arduino
Вот таблица подключений:
Вывод свдигового регистра 74HC595 | Вывод Arduino |
---|---|
VCC | 5V |
GND | GND |
DS | 11 (MOSI) |
STCP | 10 (CS) |
SHCP | 13 (SCK) |
Q7′ | 12 (MISO) |
OE# | GND |
MR# | 5V |
Вывод OE# подключим к земле, чтобы разрешение на вывод данных было всегда активно. А вывод MR# подключим к питанию, таким образом заблокируем случайный сброс устройства.
На монтажной плате 8-штырьковый разъём типа PLS – это выход, с которого будем снимать параллельные данные сдвигового регистра.
Я также подключу ко всем ножкам микросхемы регистра сдвига логический анализатор. С помощью него мы увидим, что же происходит на физическом уровне, какие сигналы куда идут, и разберёмся, что они означают. У меня получилось так, как показано на фотографии.
Подключение сдвигового регистра 74HC595 к Arduino
Выходы 74HC595
- Q0…Q7 – выходы которыми будем управлять. Могут находится в трёх состояниях: логическая единица, логический ноль и высокоимпедансное состояние
- Q7′ – выход предназначенный для последовательного соединения регистров.
Временная диаграмма на которой показано движение логической единицы по всем выходам регистра.
Как говориться лучше один раз увидеть, чем семь раз услышать. Я сам впервые применяя регистр 74HC595 не до конца понимал его работу и чтобы понять смоделировал нужную схему в Proteus.
Вот такая схема подключения семисегментных индикаторов к микроконтроллеру ATMega48 по SPI получилась:
Это схема с динамической индикацией, то есть в каждый момент времени загорается только одна цифра счетверенного семисегментного индикатора, потом загорается следующая и так по кругу. Но так как смена происходит очень быстро, то глазу кажется, что горят все цифры. Кроме того одновременно эта схема и опрашивает 4 кнопки S1-S4. Добавив два сдвоенных диода можно опрашивать 8 кнопок. А добавив 4 транзистора и резистора можно подключить дополнительный 4-х знаковый индикатор. Чтобы динамическая индикация заработала в регистры нужно послать два байта: первый байт определяет, какой из 4-х индикаторов будет работать и какую кнопку будем опрашивать. А второй, какие из сегментов загорятся.
12 thoughts on “ Сдвиговый регистр 74HC595 и семисегментный индикатор ”
По моему — это тот случай, когда объяснение простого может выглядеть сложным, а не наоборот. Что может быть проще, чем два бита переслать? В данном примере, биты, пересылаемые микроконтроллером в последовательном виде — преобразуются регистрами в параллельный. Один подает на матрицу, в роли которой выступает индикатор, данные, другой — адрес. Приведен один из примеров интерфейса периферии, обслуживаемой микроконтроллером. Я бы только добавил, что счетверенный семисегментныйт индикатор, чаще всего, используют в роли часов.
В приведенной схеме динамической индикации светодиоды семисегментного индикатора должны быть на напряжение не более 4 В. В больших индикаторах часто используется последовательное включение нескольких светодиодов: например в индикаторах высотой 5см — 4 светодиода.
Поэтому стоит сделать регистру 74HC595 высоковольтный выход: подключить по MosFET на каждый выход. Затвор на выход микросхемы, исток на землю, а к стоку — «высоковольтную» нагрузку.
А действительно, часто такие схемы обслуживают таблоиды и поболее 5 см. Там может и предложенные MosFET (КМОП, полевики с изолированным затвором) будут рентабельны — цена-то у них, как правило, кусючая. В большинстве-же случаев, достаточно будет DD1, как и DD2 подсоединить к токовым ключам, а не напрямую. Этого не сделано на приведенной схеме, так как на DD2 может падать нагрузка одновременно с семи сегментов, а на DD1 — только с одного. А экономичность схематического решения — далеко не последнее дело, в каждом, конкретном случае.
Datasheet 74HC595 и 74HCT595 от NXP.
Если не нужно каскадирование, регистр хранения и высокоимпедансное состояние на выходах то можно обойтись 74HC164N.
А зачем, если цена фактически одна? Купить сразу несколько сотен 74HC595 по 1,50 за штуку и ставить их везде и всюду, где нужны последовательно-параллельные регистры.
Мне в 74HC595 нравится именно возможность организации статической индикации, с одновременным переключением индикаторов. Так шумов меньше, чем у индикации динамической или у статической индикации без промежуточного (буферного) регистра. К тому же во втором случае имеется паразитная засветка индикатора при частой смене показаний.
А кто и как интересно опрашивает состояние кнопок на такой схеме, регистр же не контроллер он не понимает нажата кнопка или нет, его дело просто подать соответсвующие сигналы навыходных ножках, обратной же связи нет, или я чего-то не понимаю?
Тот микроконтроллер что дает сигнал на включение разрядов индикатора. Например логическим нулем зажигаем разряд который подключен к выводу Q0 микросхемы DD2 , тогда при нажатии кнопки S1 на 9-том контакте X1 разъема появляется логический ноль, этот сигнал и считывает микроконтроллер.
А кто и как будет считывать значения с кнопок?
В этом схеме нет алгоритм для считывание состояние кнопок. Для управление 7сег. индик. лучше включить после 595 микросхему 2003.
Применяйте микросхему TPIC6B595DWR, которая уже содержит полевики с открытым стоком на выходе.
3Подключение сдвигового регистра74HC595 к Arduino
Давайте соберём схему, которая показана на рисунке.
Схема подключения сдвигового регистра 74HC595 к Arduino
Вот таблица подключений:
Вывод свдигового регистра 74HC595 | Вывод Arduino |
---|---|
VCC | 5V |
GND | GND |
DS | 11 (MOSI) |
STCP | 10 (CS) |
SHCP | 13 (SCK) |
Q7′ | 12 (MISO) |
OE# | GND |
MR# | 5V |
Вывод OE# подключим к земле, чтобы разрешение на вывод данных было всегда активно. А вывод MR# подключим к питанию, таким образом заблокируем случайный сброс устройства.
На монтажной плате 8-штырьковый разъём типа PLS – это выход, с которого будем снимать параллельные данные сдвигового регистра.
Я также подключу ко всем ножкам микросхемы регистра сдвига логический анализатор. С помощью него мы увидим, что же происходит на физическом уровне, какие сигналы куда идут, и разберёмся, что они означают. У меня получилось так, как показано на фотографии.
Подключение сдвигового регистра 74HC595 к Arduino
Преимущества использования сдвигового регистра 74HC595:
- не требует никакой обвязки кроме конденсатора по питанию;
- работает через широкораспостраненный интерфейс SPI;
- для самого простого включения достаточно двух выходов микроконтроллера;
- возможность практически неограниченного расширения количества выходов без увеличения занятых выходов микроконтроллера;
- частота работы до 100 МГц;
- напряжение питания от 2 В до 6 В;
- дешевый — стоит менее 5 центов;
- выпускается как в планарных корпусах (74HC595D удобен для производства), так и в DIP16 (74HC595N удобен для радиолюбителей и макетирования).
Для понимания работы регистра стоит взглянуть на функциональную схему. Она состоит из:
- 8-битного регистра сдвига,
- 8-битного регистра хранения,
- 8-битного выходного регистра.
Рассмотрим какие выводы есть у сдвигового регистра 74hc595.
Общего вывод и вывод питания объяснений не требуют.
- GND — земля
- VCC — питание 5 вольт
1Описание и назначение сдвигового регистра 74HC595
Сдвиговый регистр 74HC595 и ему подобные используются в качестве устройств преобразования последовательных данных в параллельные, а также может использоваться как «защёлка» для данных, удерживая заданное состояние.
Схема выводов («распиновка») приведена на рисунке слева.
Назначение выводов сдвигового регистра 74HC595 и внешний вид в выводном корпусе DIP-16
Назначение выводов микросхемы 74HC595 такое.
Обозначение вывода | Назначение |
---|---|
Q0…Q7 | выходы параллельных данных; |
GND | земля (0 В); |
Q7′ | выход последовательных данных; |
MR | сброс ведущего устройства (активный низкий); |
SHCP | вход тактовых импульсов сдвигового регистра; |
STCP | вход тактовых импульсов «защёлки»; |
OE | разрешение вывода (активный низкий); |
DS | вход последовательных данных; |
VCC | питание +5 В. |
Конструктивно микросхема выполняется в нескольких типах корпусов; я буду использовать микросхему в выводном корпусе DIP-16, т.к. его проще использовать с макетной платой (бредбордом).
Десятичный счетчик.
Десятичный счетчик состоит из декадных счетчиков, причем
число декадных счетчиков равно максимальному разряду десятичных чисел, которые
счетчик может считать. Каждый декадный счетчик является двоично-десятичным. Он
считает в двоично-десятичном коде от 0 до 10. При поступлении на вход декадного
счетчика десятого импульса все его выходы устанавливаются в нулевое состояние.
Схема декадного счетчика и временные диаграммы показаны на рис.2.
Рис. 2. Декадный счетчик.
Временные диаграммы. Структурная схема.
Благодаря обратной связи инвертирующего выхода третьего
триггера со входом первого триггера на входе первого триггера J = Q3
= 1, пока не пришел и не закончился восьмой импульс. После окончания восьмого
импульса Q3 = 0. В соответствии с таблицей состояний
JK-триггера выход первого триггера (на рис. 2 второй справа) Q1 = 0,
так как для него J = Q3 = 0; К = 1. Второй триггер (на рис.
13.3 а третий справа) является Т-триггером, так как у него J = К = 1 = const,
и управляется он срезом импульса Q1. В соответствии с временными диаграммами
(рис.2) его переключение произойдет лишь после 14-го импульса. Третий триггер
имеет J = J1 = J2 = 0; К = K1 = К2
= 1. По окончании десятого импульса он переключается в нулевое состояние срезом
импульса Q. Из временных диаграмм видно, что после десятого импульса
выходы всех триггеров находятся в нулевом состоянии. Если выход Q3
подать на вход С нулевого триггера следующего декадного счетчика, то на выходе
этого триггера Q становится равным 1 по окончании импульса Q3
первого декадного счетчика. Очевидно, что первый декадный счетчик считает
единицы, а второй — десятки.
Делитель частоты
Делитель
частоты — электронное устройство, уменьшающее в целое число раз частоту
подводимых к нему периодических колебаний. Их используют в синтезаторах
частоты, кварцевых часах, в телевизионных устройствах синхронизации генераторов
развёрток и др. Для деления частоты применяют: электронный счётчик (см. Триггер),
самовозбуждающийся генератор синусоидальных колебаний и т.д..
Делители частоты считают входные
импульсы до некоторого задаваемого коэффициентом счета состояния, а затем
формируют сигнал переключения триггеров в нулевое состояние, вновь начинают
счет входных импульсов до задаваемого коэффициента счета.
Регистры
Регистр — последовательное логическое устройство, используемое для
хранения n-разрядных двоичных чисел и выполнения преобразований над ними.
Регистр представляет собой
упорядоченную последовательность триггеров, число которых соответствует числу
разрядов в слове. С каждым регистром обычно связано комбинационное цифровое
устройство, с помощью которого обеспечивается выполнение некоторых операций над
словами. Фактически любое цифровое устройство можно представить в виде
совокупности регистров, соединенных друг с другом при помощи комбинационных
цифровых устройств.
Регистры классифицируются по
следующим видам:
1.Параллельные
или накопительные (регистры памяти, хранения);
2.Последовательные
или сдвигающие.
В свою очередь сдвигающие
регистры делятся:
·по способу ввода-вывода информация: параллельные;
последовательные; комбинированные;
·по направлению передачи информации:
однонаправленные; реверсивные.
Типичными являются следующие
операции:
·прием
слова в регистр;
·передача
слова из регистра;
·поразрядные
логические операции;
·сдвиг
слова влево или вправо на заданное число разрядов;
·преобразование
последовательного кода слова в параллельный и обратно;
·установка
регистра в начальное состояние (сброс)
Элементарной
ячейкой электронной памяти является триггер, способный сохранять 1 бит
записанной в нем информации. Регистром называется устройство из триггеров, предназначенное
для записи, хранения и выдачи информации. Каждый разряд двоичного числа
записывается в своем триггере, поэтому число триггеров в регистре определяет
разрядность записываемого числа. Наиболее распространенным видом регистров
являются регистры сдвига.
5Временная диаграмма работы микросхемы 74HC595
Общий вид временной диаграммы – на рисунке. Голубой пунктирной линией показаны 4 линии SPI, красной пунктирной – 8 каналов параллельных данных регистра сдвига. Точка A на шкале времени – это момент передачи в регистр сдвига числа «210», B – момент записи числа «0», C – завершение текущей итерации цикла и начало новой.
Временная диаграмма работы микросхемы 74HC595
Как видно, от А до B – 10,03 миллисекунд, а от B до С – 90,12 миллисекунд, почти как мы и задали в скетче. Небольшая добавка в 0,03 и 0,12 мс – время передачи последовательных данных от Arduino, поэтому мы тут имеем не ровно 10 и 90 мс.
Рассмотрим подробнее участок A.
Обратите внимание на временной масштаб. Теперь это микросекунды, а на предыдущем были миллисекунды
То есть это сильно укрупнённый по сравнению с первой диаграммой участок.
Диаграмма передачи числа «11010010» по SPI
В первом канале сверху – длинный импульс с нулевым уровнем, которым Arduino инициализирует передачу по линии SPI — ENABLE – выбор ведомого. В это время начинают генерироваться тактовые импульсы SPI — CLOCK (см. второй сверху канал). Для передачи одного байта генерируется 8 тактовых импульсов.
Третий канал сверху – SPI — MOSI – данные, которые мы передаём от Arduino к сдвиговому регистру. Это наше число «210» в двоичном виде – «1101 0010».
После завершения передачи линия SPI — ENABLE поднимается в высокое состояние, и мы видим, что сдвиговый регистр выставил на своих 8-ми ножках значение «1101 0010». Я выделил это голубой пунктирной линией и подписал значения для наглядности.
Теперь обратим внимание на участок B. Диаграмма передачи числа «00000000» по SPI
Диаграмма передачи числа «00000000» по SPI
Опять всё начинается с выбора ведомого и генерирования 8-ми тактовых импульсов (первый и второй каналы сверху). Данные на линии SPI — MOSI теперь – «0000 0000» (3-ий сверху канал). То есть мы записываем в этот момент в регистр число «0». Но пока передача не закончена, в регистре по прежнему хранится значение «1101 0010», которое мы выставили ранее. Оно выводится на параллельные выводы Q0..Q7 (8 нижних каналов на рисунке), а также, при наличии тактовых импульсов в линии SPI — CLOCK, выдаётся в линию SPI — MISO (см. 4-ый канал сверху) c последовательного выхода регистра Q7′, что мы тут и видим.
1Описание и назначение сдвигового регистра 74HC595
Сдвиговый регистр 74HC595 и ему подобные используются в качестве устройств преобразования последовательных данных в параллельные, а также может использоваться как «защёлка» для данных, удерживая заданное состояние.
Схема выводов («распиновка») приведена на рисунке слева.
Назначение выводов сдвигового регистра 74HC595 и внешний вид в выводном корпусе DIP-16
Назначение выводов микросхемы 74HC595 такое.
Обозначение вывода | Назначение |
---|---|
Q0…Q7 | выходы параллельных данных; |
GND | земля (0 В); |
Q7′ | выход последовательных данных; |
MR | сброс ведущего устройства (активный низкий); |
SHCP | вход тактовых импульсов сдвигового регистра; |
STCP | вход тактовых импульсов «защёлки»; |
OE | разрешение вывода (активный низкий); |
DS | вход последовательных данных; |
VCC | питание +5 В. |
Конструктивно микросхема выполняется в нескольких типах корпусов; я буду использовать микросхему в выводном корпусе DIP-16, т.к. его проще использовать с макетной платой (бредбордом).
3Подключение сдвигового регистра74HC595 к Arduino
Давайте соберём схему, которая показана на рисунке.
Схема подключения сдвигового регистра 74HC595 к Arduino
Вот таблица подключений:
Вывод свдигового регистра 74HC595 | Вывод Arduino |
---|---|
VCC | 5V |
GND | GND |
DS | 11 (MOSI) |
STCP | 10 (CS) |
SHCP | 13 (SCK) |
Q7′ | 12 (MISO) |
OE# | GND |
MR# | 5V |
Вывод OE# подключим к земле, чтобы разрешение на вывод данных было всегда активно. А вывод MR# подключим к питанию, таким образом заблокируем случайный сброс устройства.
На монтажной плате 8-штырьковый разъём типа PLS – это выход, с которого будем снимать параллельные данные сдвигового регистра.
Я также подключу ко всем ножкам микросхемы регистра сдвига логический анализатор. С помощью него мы увидим, что же происходит на физическом уровне, какие сигналы куда идут, и разберёмся, что они означают. У меня получилось так, как показано на фотографии.
Подключение сдвигового регистра 74HC595 к Arduino