Главная » Статьи » Как подключить |
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
В прошлый раз был рассмотрен вариант увеличения выходов микроконтроллера при помощи микросхемы – дешифратора 1533ИД3, сегодня рассмотрим более продвинутый вариант на сдвиговом регистре 74HC595. Использовав всего одну микросхему можно заиметь в свое распоряжение дополнительно 8 выходов, использовав всего 3 ноги микроконтроллера. А благодаря возможности расширения, добавив вторую микросхему, количество выходов можно увеличить до 16. Если мало, можно добавить третью и получить в пользование уже 24 выхода и такой трюк можно повторять сколько угодно раз. При этом количество занимаемых ног микроконтроллера так и останется 3, красота! Итак, рассмотрим более подробно назначение выводов микросхемы и научимся управлять сдвиговым регистром 74hc595 в Bascom-AVR. Для начала ознакомимся с выводами микросхемы, а точнее с их функциональностью. Ниже представлена вырезка из даташита на 74hc595 с обозначением выводов микросхемы:
Логика работы с регистром Когда на тактовом входе SH_CP появляется логическая единица, бит находящийся на входе данных
DS
считывается и записывается в сдвиговый регистр. Этот бит записывается в самый младший разряд. При поступлении на тактовый вход следующего импульса высокого уровня, в сдвиговый регистр записывается следующий бит со входа данных. А тот бит который был записан ранее сдвигается на один разряд влево, а его место занимает вновь пришедший бит. Следующий тактовый импульс запишет третий бит, а два предыдущих сдвинутся дальше. Когда все восемь бит заполнились и приходит девятый тактовый импульс то регистр снова начинает заполнятся с младшего разряда и всё повторятся вновь. Что бы данные появились на выходах Q0…Q7 нужно их «защёлкнуть». Для этого необходимо подать логическую единицу на вход ST_CP. - MR осуществляет сброс регистра, устанавливая все выходы Q0…Q7 в состояние логического нуля. Для осуществления сброса нужно подать логический ноль на этот вход и подать положительный импульс на вход ST_CP. Очень полезная функция, так как при подаче питания на микросхему на выходе появляется некое произвольное значение. При работе с регистром на этом выводе должна находится логическая единица.
- OE (output enable) если подать сюда логическую 1, то выходы будут находится в высокоомном HI-Z состоянии. Когда подаем на этот вход логический 0, выходы будут находится в рабочем состоянии. - Q7′ предназначен для последовательного соединения сдвиговых регистров.
Но лучше один раз увидеть, чем два раза прочитать =) поэтому смотрим на анимацию: Работа с регистром в лоб Осваивая работу с незнакомой микросхемой часто бывает полезна работа в лоб, тоесть прямое дергание ногами управления, это позволяет лучше понять принципы работы с подопытным. Итак следуя логике работы, написал программу которая должна будет вывести на выход регистра бинарное число 10010010
$regfile = "attiny2313.dat"
$crystal = 1000000 Config Portb = Output Sh_cp Alias Portb.3 'нога для тактовых импульсов Ds Alias Portb.2 'нога для вывода данных St_cp Alias Portb.0 'нога для "защелкивания" данных в регистр хранения 'вывод через регистр числа 146 (в бинарном представлении 10010010) St_cp = 0 'выставляем ногу в режим записи данных Ds = 1 'выставляем первый бит Sh_cp = 0 'даем импульс на тактовый выход Sh_cp = 1 Ds = 0 'выставляем второй бит Sh_cp = 0 Sh_cp = 1 Ds = 0 'выставляем третий бит Sh_cp = 0 Sh_cp = 1 Ds = 1 'выставляем четвертый бит Sh_cp = 0 Sh_cp = 1 Ds = 0 'выставляем пятый бит Sh_cp = 0 Sh_cp = 1 Ds = 0 'выставляем шестой бит Sh_cp = 0 Sh_cp = 1 Ds = 1 'выставляем седьмой бит Sh_cp = 0 Sh_cp = 1 Ds = 0 'выставляем восьмой бит Sh_cp = 0 Sh_cp = 1 St_cp = 1 'защелкиваем введенные данные End компилируем, зашиваем в микроконтроллер или смотрим в симулятор и видим на выходе нашу комбинацию. Работает, на выходе регистра появилось отправленное число! Работа с регистром таким образом хоть и возможна но слишком громоздка и занимает много программной памяти. Но зато наглядно демонстрирует всю методику работы с данной микросхемой. Рассмотрим более подходящий метод. Управление регистром 74HC595 в Bascom через команду ShiftOut В Bascom-AVR для работы со всевозможными последовательными интерфейсами есть замечательная команда SHIFTOUT Эта команда сама разложит число на битовые составляющие и последовательно выведет их на любой пин микроконтроллера, заодно она может выдавать тактовые импульсы. Для работы со сдвиговыми регистрами самое то! Синтаксис команды:
SHIFTOUT Datapin , Clockpin , var , option Datapin – порт микроконтроллера для вывода данных Clockpin – порт микроконтроллера для вывода тактовых импульсов Var – данные которые хотим отправить в регистр Option – число от 0 до 3, этим параметром выбирается в каком порядке будут вводиться данные в регистр и активный уровень на линии Clock при котором происходит запись бита: option=0 – старший бит идет первым, Clock активный уровень низкий option=1 – старший бит идет первым, Clock активный уровень высокий option=2 – младший бит идет первым, Clock активный уровень низкий option=3 – младший бит идет первым, Clock активный уровень высокий В нашем случае для работы с регистром 74HC595 параметр option нужно ставить 1 или 3. Для того чтобы защелкнуть данные в регистре, применим команду PulseOut. Эта команда выводит импульс на ногу микроконтроллера с заданной длительностью. Конфигурация команды выглядит следующим образом:
Pulseout Portb , 0 , 5 здесь выводится импульс на PortB.0 длительностью 5 микросекунд (при частоте работы мк 4 МГц) Теперь давайте выведем число 10010001 (145 в десятичной системе) на выход регистра, подключенному к микроконтроллеру по вышеприведенной схеме:
$regfile = "attiny2313.dat"
$crystal = 1000000 Dim A As Byte Config Portb = Output A = 145 Gosub Hc595 'уходим на подпрограмму отправки данных End Hc595: 'подпрограмма отправки данных Shiftout Portb.2 , Portb.3 , A , 1 'отправляем данные в регистр Pulseout Portb , 0 , 5 'защелкиваем данные Return Прошив микроконтроллер можно увидеть аналогичную картину, на выходе сдвигового регистра выставлена отправленная комбинация битов. Как видно управление сдвиговым регистром 74HC595 в Bascom состоит всего из двух строк кода, и не представляет никаких сложностей. Увеличение разрядности Как говорилось ранее, регистры могут легко состыковаться друг с другом, тем самым давая возможность увеличить количество портов вывода практически до бесконечности. Для того чтобы добавить дополнительный регистр, необходимо соединить вместе выводы для тактовых импульсов SH_CP и выводы для защелкивания данных ST_CP. Вход данных первого регистра подключается к микроконтроллеру и туда мы будем гнать данные, а вход второго регистра соединяется к выводу Q7’ первого регистра. В программе управления необходимо изменить тип переменной, которую будем выводить через регистры. Так как соединив вместе два регистра мы получили в управление 16 ножек, то переменная должна хранить 16 бит данных (или 2 байта). Такой объем данных хранит переменная типа Word. Этот тип мы и будем использовать, и для примера выведем число 1111001001001100 (в десятичном виде это будет число 62028).
$regfile = "attiny2313.dat" $crystal = 1000000 Dim A As Word 'выбираем 2х байтный тип переменной
Config Portb = Output
A = 62028 'выведем вот это число
Shiftout Portb.2 , Portb.3 , A , 1 'отправляем данные в регистр
Pulseout Portb , 0 , 5 'защелкиваем данные End Старший байт (левая часть 11110010) выводится через второй регистр (IC2), а младший байт (01001100) выводится через первый регистр, соединенный к микроконтроллеру напрямую (IC1). Думаю проблем с подключением 3, 4, 5 регистров в ряд возникнуть не должно ;) Удачи! | |
Просмотров: 131841 | Комментарии: 42
| Теги: |
Всего комментариев: 42 | 1 2 » | ||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||
1-30 31-42 | |||||||||||||||||||||||||||||
авторизация
рубрики
Проекты [46] |
Как подключить [32] |
Инструменты [3] |
Полезная информация [18] |
Объявления [3] |
метки