Teres-1t.ru

Инженерные решения
5 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Триггеры регистры сумматоры счетчики

Триггеры регистры сумматоры счетчики

    Сдвиговые регистры, оглавление:

Изучение модуля USI MSP430 странным образом(на самом деле закономерным) вывела меня на такую штуку, как сдвиговый регистр. Имея о них лишь общее представление, мне пришлось срочно разбираться c этой, довольно обширной темой. Итак.

Сдвиговый регистр, он же расширитель портов, он же шинный преобразователь, преобразует сигнал последовательной шины в параллельный или/и обратно.

В рамках этой статью я рассмотрю работу с популярным 8-и битовыми сдвиговым регистром на SPI интерфейсе 74HC595.

В качестве практических примеров, я рассмотрю подключение светодиодной гирлянды, семисегментных индикаторов и дисплея с параллельной шиной HD44780.

В качестве микроконтроллера я буду использовать ATmega8, а в качестве среды моделирования Proteus 8.5.

Кроме этого, я затрону организацию SPI интерфейса у ATmega8.

1) Сдвиговый регистр 74HC595 c SPI интерфейсом

Это один из самых простых регистров, который преобразует последовательную шину в параллельную. Он позволяет получить из трех выводов микроконтроллера — 8 ^n .

    Описание
  • Микросхема принимает на вход последовательность 8-битных данных, которые затем преобразует в логические состояния на 8-пиновом выходе.
  • Микросхема работает только на выход, т.е. мы можем с ее помощью управлять светодиодами или дисплеем HD44780, но не сможем с нее получать данные с датчиков например.
  • Выходы могут принимать состояния: логический ноль, логическую единицу, высокоимпедансное состояние — HiZ.
  • Микросхемы можно соединять каскадом для получения 16-битного выхода, 24-битного, и т.д.
  • Питание микросхемы 74HC595N может варьироваться от двух до шести Вольт.
  • Сдвиговый регистр 74HC595N может работать на частотах до 100MHz.

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

Распиновка микросхемы выглядит следующим образом:

Читайте так же:
Сброс счетчика картриджа samsung scx 4200

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

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

Прием данных сдвиговым регистром происходит при низком уровне защелки — ST. При этом принимаемые данные идут во внутренний (теневой) регистр(на самом деле там одна цепочка триггеров). При выставлении защелки ST в высокий уровень, содержимое теневого регистра записывается в регистр вывода, и выходы Q — Q7 принимают состояние в соответствии с его содержимым.

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

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

2) Управление гирляндой светодиодов

Для знакомства с работой сдвигового регистра 74HC595 , в Proteus соберем такую схему:

    Всего в передаче данных задействовано три пина.
  • на PD2 — линия тактирования, SH;
  • на PD3 — линия передачи данных, DS;
  • на PD4 — линия синхронизации данных, ST.

Этими тремя пинами мы можем управлять теперь восемью светодиодами.

Составим программу бегущих огней:

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

Для работы видоизмененной схемы в коде нужно будет поменять всего три константы:

Все это хорошо, но: «При чем тут SPI, и всякие шины?» — спросите вы?

А вот при чем. Эта короткая программка является программной реализацией протокола SPI.

Читайте так же:
Счетчики индекса массы тела

3) SPI интерфейс в микроконтроллере ATmega8

То, что мы используем SPI, проверяется очень просто — переключением в коде на использование аппаратного SPI модуля.

В руководстве на ATmega8, SPI модуль описан следующей блок-схемой:

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

Передача данных по SPI между двумя устройствами происходит по такой схеме:

Здесь мастером(ведущим) выступает микроконтроллер ATmega8, а ведомым в нашем случае выступает 74hc595. При передаче старший бит мастера записывается в младший бит слейва, и через восемь тактов, они обмениваются одним байтом.

В работе SPI модуля в ATmega8 задействовано всего три регистра: SPCR — регистр управления, SPSR — флаговый регистр, SPDR — регистр данных.

Регистр управления выглядит так:

Здесь SPIE — включает прерывания по завершении приема или передачи байта из SPDR, SPE — включает модуль SPI, DORD — переключает направление в сдвиговом регистре, MSTR — определяет режим работы микроконтроллера: ведущий или ведомый, CPOL — переключает полярность линии тактирования, CPHA — переключает фазу линии тактирования. Оставшиеся два бита SPR0, SPR1 и SPI2X из SPSR, устанавливают предделитель для линии тактирования.

Регистр SPSR имеет три служебных бита:

Здесь нам будет интересен флаг вызова перерывания SPIF.

В руководстве на ATmega8 имеются примеры работы с SPI-модулем на ассемблере и Си. В последнем случае пример выглядит так:

Для проверки программы нужно будет переподключить сдвиговый регистр к SPI порту ATmega8:

Тестовая программа с использованием SPI будет выглядеть так:

И если все сделать правильно, «бегущий огонь» должен работать через SPI.

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

Сдвиговый регистр часто используется как драйвер семисегментного индикатора. Наличие бита переноса позволяет составлять каскад из нескольких разрядов.

Читайте так же:
Мфу с счетчиком отпечатанных страниц

Вместо светодиодов подключим пока один индикатор с общим катодом:

Для работы с ним запустим такую программу:

Результат работы должен быть как на гифке сверху.

Семисегментные индикаторы тоже можно подключать каскадом:

Здесь верхний сдвиговый регистр подключен к крайне правому сегменту, он является младшим регистром. Нижний сдвиговый регистр подключается к левому сегменту, он является старшим регистром. Текст программы при этом получается такой:

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

На скорую руку я набросал в Proteus схему такого индикатора:

Здесь индикатор с общим анодом, следовательно сегмент будет загораться при подаче логического нуля. Чтобы обеспечить совместимость с программой для управления индикаторами с общим катодом, я поставил на вход логические инверторы. Хотя, вместо этого можно было бы поменять значения в массиве seg[10], но здесь я хотел показать как делать логические инверторы без использования корпусных микросхем.

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

Это программа только для Proteus. Для реального устройства должны быть изменены значения временных задержек. В главном цикле должно стоять 1000ms вместо десяти, и прерывание по таймеру можно запускать не так часто. Напомню, что прерывание в ATmega8 по таймеру TIMER0 рассматривалось здесь пару лет назад.

Результат работы программы должен выглядеть как-то так:

5) Подключение жидко-кристаллического дисплея HD44780 через сдвиговый регистр 74HC595

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

Читайте так же:
Люберецкий водоканал установка счетчиков

Для начала следует проверить работу симуляции дисплея в Proteus. Для этого составляется такая схема:

В качестве управляющей программы служит следующая программа:

Это модифицированная версия программы из примера двухлетней давности: «ATmega8: простая программа управления ЖК-дисплеем HD44780. В отличии от оригинала, здесь строб подается отдельно от данных, что наверно более корректно.

Теперь рисуем схему подключения дисплея через сдвиговый регистр:

Управляющую программу я сделал по принципу минимального изменения предыдущего кода, чтобы было понятно, как это делается:

В отличие от работы через параллельную шину, здесь нельзя прочитать порт, поэтому пришлось водить дополнительную переменную LCD, с которой и осуществляются все операции. Остальное думаю понятно.

В заключение хочу сказать, что кроме SPI, сдвиговый регистр возможно подключать через OneWire интерфейс по одному проводу через RC-цепочки. Изначально это задумывалось для микроконтроллеров в корпусах с малым количеством пинов, на вроде ATtiny13. Но это можно использовать также для SoC c малым количеством выводов, например: ESP8266 или RT5350F. Мне лично этот фокус показался бесполезным, но упомянуть о нем считаю нужным.

Набор выполняемых операций

Важно знать, какие операции должно исполнять АЛУ для того, чтобы обладать функциональной полнотой. Как правило, хватает четырех:

  • Обращение к памяти устройства для чтения или записи информации.
  • Декремент/инкремент.
  • Сравнение. Здесь реализуется возможность условного перехода.
  • Остановка функционирования устройства.

Интерфейс RS 485: описание Вам будет интересно: Интерфейс RS 485: описание

Если мы обратимся к первым арифметико-логическим устройствам, то увидим, что количество выполняемых ими операций ограничивалось 16-ю. Современные АЛУ способны выполнять сотни! Кстати, число операций и сегодня является важнейшей характеристикой данных устройств.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector