Как подключить сдвиговый регистр 74HC595 к Arduino. Какие преимущества дает использование сдвигового регистра. Как управлять несколькими устройствами с помощью одного регистра. Какой код нужен для работы со сдвиговым регистром на Arduino.
Что такое сдвиговый регистр 74HC595 и зачем он нужен
Сдвиговый регистр 74HC595 — это микросхема, которая позволяет управлять 8 цифровыми выходами, используя всего 3 контакта микроконтроллера. Основные преимущества использования сдвигового регистра:
- Экономия контактов Arduino — вместо 8 пинов используется всего 3
- Возможность каскадного соединения нескольких регистров для управления большим количеством устройств
- Высокая скорость работы за счет аппаратной реализации
- Низкая стоимость и доступность микросхемы
Сдвиговый регистр особенно полезен, когда нужно управлять множеством светодиодов, семисегментными индикаторами или другими цифровыми устройствами.
Схема подключения 74HC595 к Arduino
Для подключения сдвигового регистра 74HC595 к Arduino потребуется:
- Микросхема 74HC595
- Arduino (любая модель)
- Макетная плата
- Соединительные провода
- 8 светодиодов (для примера)
- 8 резисторов на 220 Ом
Схема подключения:
- Контакт 14 (DS) 74HC595 подключите к цифровому пину 8 Arduino
- Контакт 11 (SH_CP) 74HC595 подключите к цифровому пину 12 Arduino
- Контакт 12 (ST_CP) 74HC595 подключите к цифровому пину 11 Arduino
- Контакт 13 (OE) 74HC595 подключите к GND Arduino
- Контакт 10 (MR) 74HC595 подключите к 5V Arduino
- Контакт 16 (VCC) 74HC595 подключите к 5V Arduino
- Контакт 8 (GND) 74HC595 подключите к GND Arduino
- Контакты Q0-Q7 74HC595 подключите к анодам светодиодов через резисторы 220 Ом
- Катоды светодиодов подключите к GND Arduino
Программный код для управления 74HC595 на Arduino
Базовый скетч для управления сдвиговым регистром:
«`cpp int latchPin = 11; // ST_CP int clockPin = 12; // SH_CP int dataPin = 8; // DS void setup() { pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { for (int i = 0; i < 256; i++) { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, i); digitalWrite(latchPin, HIGH); delay(100); } } ``` Этот код последовательно включает все комбинации светодиодов от 0 до 255. Функция shiftOut() отправляет 8 бит данных в регистр.Расширение возможностей: каскадное соединение нескольких 74HC595
Для управления большим количеством выходов можно соединить несколько сдвиговых регистров каскадно:
- Соедините пин Q7′ первого регистра с пином DS второго
- Соедините пины SH_CP обоих регистров
- Соедините пины ST_CP обоих регистров
Теперь можно управлять 16 выходами, используя те же 3 пина Arduino. Код нужно изменить, отправляя 16 бит данных вместо 8:
«`cpp void loop() { for (int i = 0; i < 65536; i++) { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, (i >Оптимизация кода: использование библиотеки ShiftRegister74HC595
Для упрощения работы со сдвиговыми регистрами можно использовать специализированную библиотеку ShiftRegister74HC595. Она позволяет управлять регистрами более интуитивно:
«`cpp #includeБиблиотека автоматически обрабатывает отправку данных, что делает код более читаемым и легким в обслуживании.
Применение 74HC595 в реальных проектах
Сдвиговые регистры 74HC595 широко используются в различных электронных проектах:
- Светодиодные матрицы и бегущие строки
- Управление многоразрядными семисегментными индикаторами
- Расширение портов ввода-вывода для Arduino и других микроконтроллеров
- Управление множеством реле или других цифровых устройств
- Создание простых цифровых логических схем
Пример проекта: создание 8×8 светодиодной матрицы с использованием двух 74HC595 для управления строками и столбцами.
Советы по отладке и устранению неисправностей
При работе со сдвиговыми регистрами могут возникнуть некоторые проблемы. Вот несколько советов по их устранению:
- Проверьте правильность подключения всех выводов, особенно питания и заземления
- Убедитесь, что выход OE подключен к земле для активации выходов
- Используйте осциллограф для проверки сигналов на входах DS, SH_CP и ST_CP
- При каскадном соединении проверьте правильность подключения Q7′ к DS следующего регистра
- Добавьте небольшие задержки между операциями для стабильной работы на высоких скоростях
Если светодиоды мигают хаотично или не загораются вовсе, проверьте порядок подключения и правильность кода.
Заключение: преимущества использования 74HC595 в проектах Arduino
Сдвиговый регистр 74HC595 — мощный инструмент для расширения возможностей Arduino и других микроконтроллеров. Его основные преимущества:
- Существенная экономия пинов микроконтроллера
- Возможность управления большим количеством устройств
- Высокая скорость работы и надежность
- Простота использования и низкая стоимость
- Широкие возможности для создания сложных проектов
Освоив работу с 74HC595, вы сможете создавать более сложные и функциональные проекты на базе Arduino, не ограничиваясь количеством доступных пинов. Экспериментируйте и создавайте свои уникальные устройства с помощью этой универсальной микросхемы!
отзывы, фото и характеристики на Aredi.ru
На нашем сайте отображены товары, которые автоматически импортируются с сайта allegro.pl и переводятся на русский язык.
Так как мы не являемся продавцами товара, который отображен на нашем сайте, мы не можем обладать всей информацией о том или ином товаре. Дополнительную информацию о товарах можно узнать несколькими способами:
1. Подробно ознакомиться с описанием. Обычно вся необходимая информация находится в официальном описании на странице лота.
2. Если интересующей вас информации в описании не оказалось, можно задать вопрос напрямую продавцу. Он ответит вам в течение одного рабочего дня.
3. Если вы обладаете богатым опытом серфинга в интернете, возможно, вы сможете найти информацию о данном товаре на различных форумах и других интернет-ресурсах, воспользовавшись глобальными службами интернет-поиска.
4. Если вы не владеете языком или не желаете уточнить информацию по какой-либо другой причине, пожалуйста, обращайтесь к нам — мы с радостью вам поможем. Для того, чтобы мы задали вопрос продавцу, оформите заказ и в комментариях к товару пропишите интересующие вопросы. В течении дня мы сделаем запрос продавцу, комментарии появятся в личном кабинете.
Точный вес товара становится известным, только когда товар поступает на склад. Узнать примерный вес товара можно характеристиках товара, но не все продавцы его пишут.
Избежать некачественного товара можно путем тщательного отбора продавцов, т.е. старайтесь не гнаться за дешевыми товарами, которые продаются у продавцов с низким рейтингом. Доверяйте только проверенным интернет-магазинам. Если вы покупаете товар и сомневаетесь в надёжности продавца, то лучше заказать дополнительные фотографии.
1.Ищите по ключевым словам, уточняйте по каталогу слева
Допустим, вы хотите найти фару для AUDI, но поисковик выдает много результатов, тогда нужно будет в поисковую строку ввести точную марку автомобиля, потом в списке категорий, который находится слева, выберите новую категорию (Автозапчасти — Запчасти для легковых авто – Освещение- Фары передние фары). После, из предъявленного списка нужно выбрать нужный лот.
2. Сократите запрос
Например, вам понадобилось найти переднее правое крыло на KIA Sportage 2015 года, не пишите в поисковой строке полное наименование, а напишите крыло KIA Sportage 15 . Поисковая система скажет «спасибо» за короткий четкий вопрос, который можно редактировать с учетом выданных поисковиком результатов.
3. Используйте аналогичные сочетания слов и синонимы
Система сможет не понять какое-либо сочетание слов и перевести его неправильно. Например, у запроса «стол для компьютера» более 700 лотов, тогда как у запроса «компьютерный стол» всего 10.
4. Не допускайте ошибок в названиях, используйтевсегдаоригинальное наименованиепродукта
Если вы, например, ищете стекло на ваш смартфон, нужно забивать «стекло на xiaomi redmi 4 pro», а не «стекло на сяоми редми 4 про».
5. Сокращения и аббревиатуры пишите по-английски
Если приводить пример, то словосочетание «ступица бмв е65» выдаст отсутствие результатов из-за того, что в e65 буква е русская. Система этого не понимает. Чтобы автоматика распознала ваш запрос, нужно ввести то же самое, но на английском — «ступица BMW e65».
6. Мало результатов? Ищите не только в названии объявления, но и в описании!
Не все продавцы пишут в названии объявления нужные параметры для поиска, поэтому воспользуйтесь функцией поиска в описании объявления! Например, вы ищите турбину и знаете ее номер «711006-9004S», вставьте в поисковую строку номер, выберете галочкой “искать в описании” — система выдаст намного больше результатов!
7. Смело ищите на польском, если знаете название нужной вещи на этом языке
Вы также можете попробовать использовать Яндекс или Google переводчики для этих целей. Помните, что если возникли неразрешимые проблемы с поиском, вы всегда можете обратиться к нам за помощью.
Экономим выводы для Arduino. Управление сдвиговым регистром 74HC595 по одному проводу
Что не делай на микроконтроллере, все равно, в конечном итоге, получатся часы. А для проектов на Arduino апогеем бесспорно является метеостанция. И вот, обвесив плату всевозможными датчиками, достаточно часто у любителей микроконтроллеров возникает проблема с нехваткой выводов.
Обычно для расширения портов вода/вывода используют сдвиговые регистры типа 74HC595. Но для управления ими требуется целых три вывода! Невероятное расточительство, неправда ли? Ведь можно обойтись всего ОДНИМ! Всех тех, для кого два дополнительных свободных порта являются жизненно необходимыми, приглашаю под кат.
❯ Хорошая идея и плохая реализация от амперки
Совершенно случайно ко мне в руки попала вот такая игрушка — модуль с четырьмя семисегментными индикаторами от амперки. Устройство представляет собой четырех разрядный статический семисегментный дисплей, выполненный на основе сдвиговых регистров 74HC595.
К слову сказать, амперка нередко грешит со схемотехникой, и данный модуль не является исключением. Вероятно, по этому он давно снят с продажи. Ко мне он попал случайно, видимо завалялся в складских остатках, и был отправлен по ошибке.
Интересна схема коммутации входов модуля. Она выполнена с использованием двух RC цепочек на входах тактирования и управления выходной защелкой и позволяет управлять выходами сдвиговых регистров всего по одному проводу вместо трех. И тут кроется пару нюансов, которые разберем далее.
Так как модуль давно не производится, найти оригинальную схемы было непросто. Но срисовывать ее с платы тоже не хотелось. А для анализа было важно иметь точную схему, чтобы не оказаться голословным.
Сразу возникают вопросы к схеме подключения индикаторов. Токоограничивающие резисторы имеют номинал 220Ом, это создает эффект «выжги глаза» и перегружает индикаторы. Такая величина тока могла бы подойти при динамической индикации, но в статике яркость получается слишком высокая. В следующих ревизиях платы резисторы заменили на 510Ом, но для меня и этого много. Я заменил их на 620Ом, при этом ток для сегмента устанавливается примерно 5 мА.
Далее разберемся с подключением сигналов управления. Вход тактирования 11 сдвигового регистра «SHIFR» подключается к порту микроконтроллера напрямую. Вход данных 14 «DATA» подключается к той же линии через RC-цепочку R1C1, время заряда которой составляет примерно 20–25 мкС. Вход управления защелкой 12 «LATCH» подключен через RC-цепочку R2C2, которая заряжается примерно за 250 мкС.
Принцип управления достаточно прост. Если на вход дисплея подать очень короткий импульс около 1 мкС, то RC-цепочки не успевают зарядиться, а так как сдвиговый регистр имеет достаточно высокое быстродействие, то данные в регистр вдвинуться успевают. Таким образом, длительностью импульса можно управлять зарядом конденсаторов и устанавливать необходимый уровень напряжения на входе данных и защелки.
Передача логической единицы производится подачей импульса длительностью примерно 25 мкС и короткой паузы не более 1 мкС. Импульс зарядит конденсатор на входе данных до уровня логической единицы, а короткая пауза не успеет его разрядить. Фронт следующего импульса попадет на тактовый вход и запишет единицу в регистр.
Для записи в сдвиговый регистр логического нуля необходимо, наоборот, сперва подать паузу длиной примерно 30 мкС. Это разрядит конденсатор на входе данных до уровня логического нуля, если он был заряжен в предыдущем периоде. А затем подаем короткий импульс около 1 мкС, чтобы его фронт записал ноль в регистр.
В завершение передачи 24 бит данных для заполнения 4 сдвиговых регистров следует подать импульс длительностью 250 мкС для установки сигнала управления защелкой. Записанные данные поступят на выходы сдвиговых регистров и будут удерживаться там до следующего фронта сигнала «LATCH». Теперь конденсатор следует разрядить, для этого устанавливаем на входе схемы низкий уровень минимум на 250 мкС, прежде чем подавать новые данные.
На этом можно было бы и закончить, если бы не те самые нюансы в работе схемы. Меня насторожил тот факт, что RC цепочки имеют разницу по времени заряда всего на один порядок. Отсюда получается, что конденсатор на входе защелки может полностью зарядиться, если подать 10 единиц подряд. А с учетом того, что уровень логической единицы для 74НС595 начинается с напряжения 3,15В, то для полного заряда конденсатора достаточно подряд подать около 6 логических единиц.
В схеме использованы индикаторы с общим анодом, для отключения сегментов которых на выходе регистра необходимо записать единицы. Получается, что при включении на индикаторе цифры 1 необходимо передать двоичный код 11001111, который как раз и содержит 6 единиц.
Если включать на семисегментном дисплее две единицы подряд, то как раз и получим шесть импульсов подряд, передающих логические единицы. Такая комбинация успевает зарядить конденсатор на входе защелки «LATCH». В результате чего, в момент обновления дисплея наблюдается кратковременное «подмигивание».
На графиках видно, что сигнал «LATCH» на входе управления защелкой сдвигового регистра уже после передачи первого семисегментного кода единицы заряжается практически до уровня логической единицы. В итоге, после каждого такого цикла передачи кода для одного регистра, весь дисплей обновляется. Это приводит к кратковременному появлению «мусора» — семисегментный код попадает не на свои позиции.
Если подобная схема управляет индикаторами, то кратковременное «подмигивание» дисплея может быть некритичным. Но вот для управления реле или чем-то подобным это явно не годится.
Как только я не пытался сократить длительности импульсов высокого уровня и увеличить паузы, полностью устранить этот глюк не получилось.
Проблему решил заменой резистора R2 с 33КОм на 100КОм. Время заряда RC-цепочки увеличилось в несколько раз. Индикатор стал работать лучше. Но все равно разницы между временем заряда конденсаторов на входе данных и защелки было недостаточным для вывода на дисплей четырех единиц. Да и включить при такой схеме больше четырех сдвиговых регистров подряд не получится, т.к. конденсатор С2 все равно может успеть зарядиться до уровня логической единицы.
❯ Доработка схемы
Для окончательной доработки схемы нужно добавить один, а лучше два диода Шоттки. Это ускорит разряда конденсатора С2 и заряда С1. Также эта доработка сокращает общее время, необходимое для обновления дисплея. Резисторы R3R4 добавлены для ограничения разрядного тока конденсаторов.
Если сравнить результаты работы схемы с диодами (левый график) и без них (правый график), становиться видно, что фронты импульсов на входе данных «DATA» и срез импульса на входе управления защелкой «LATCH» стали намного круче. И, самое главное, что конденсатор C2 на входе управления защелкой успевает разрядиться за короткий импульс записи. Теперь можно ни в чем себе не отказывать и подключать практически любое количество сдвиговых регистров.
Текст тестовой программы писал в CodeVisionAVR. Это отличный компилятор, хорошо работает даже на очень слабых компьютерах. Умеет напрямую грузить прошивку в Arduino. Имеет удобный мастер для автоматической настройки периферии, а также большое количество готовых библиотек для разных датчиков, дисплеев и прочего. Работа с портами ввода/вывода производилась напрямую через регистры, это в последствии добавило еще немного возни. В железе просто доработал модуль, немного порезал дорожки, добавил недостающие компоненты и перемычки.
❯ Версия для Arduino
Попытка повторить тоже самое в Arduino IDE привела к краху. Функция digitalWrite работает с портами очень медленно, и добиться паузы меньше 1 мкС между импульсами, сохраняя парадигму arduino-программирования, попросту не возможно. Лучшее время составляет 4 мкС. При этом конденсатор С1 успевает разрядиться до самой границы логической единицы, и стабильность схемы все равно теряется.
Итоговую схему собрал в Proteus 8.6. Библиотеку с моделями Arduino нашел на GitHub. Не самая удобная библиотека, контакты виртуальной модели не попадают в сетку. И пришлось по новой подбирать номиналы схемы, при которых работа регистров будет стабильной.
Текст программы получился следующий. Для управления регистрами по одному проводу можно использовать функцию «shiftRegisterEntry», ее входные параметры пояснены в комментариях.
//Выход для управления индикацией #define SERIAL_DATA_PORT 12 //Массив для хранения семисегментных кодов #define MAX_DISPL 4 uint8_t displ[MAX_DISPL]= //семисегментные коды цифр 1,2,3,4 {0b10011001, 0b00001101, 0b00100101, 0b10011111}; //Функция для управления сдвиговым регистром по одному проводу //uint8_t *data - указатель на массив с данными, // которые выводятся в регистр //uint8_t amount - количество байт для записи в регистр void shiftRegisterEntry(uint8_t *data, uint8_t amount){ //перебираем байты, которые нужно записать в регистры for(uint8_t num = 0; num
Заряд конденсатора С1 производится через открытый диод D1 и резистор R3. Это обеспечивает достаточное смещение между тактовым сигналом «SHIFT» и нарастанием уровня на входе «DATA», чтобы произвести запись в регистр логического нуля.
Разряд конденсатора С1 производится через резистор R1. Его сопротивление значительно выше, и конденсатор не успевает разрядиться до границы логической единицы, если импульс записи производить с помощью функции «digitalWrite». Но и время полного разряда тоже значительно возрастает.
❯ Заключение
Среднее время заполнения четырех сдвиговых регистров по одному проводу на Arduino составило 3 мС. Это достаточно большое время по меркам микроконтроллера. Но если не требуется часто обновлять выходы, то данный способ может оказаться вполне приемлемым.
Не могу сказать, что я готов применить данный способ управления в каком-то своем реальном проекте, но для разминки мозгов вполне подойдет. Хотя, если делать что-то на tiny13 или подобном микроконтроллере, писать программу на С и обращаться к регистрам портов напрямую, время записи регистров сократиться примерно в 4 раза…, но что-то сильно много «если».
© Habrahabr.ru
Отсутствует
Отсутствует
|
Raspberry Pi 74HC595 Последовательный регистр сдвига — Robo India || Учебники || Изучите Ардуино |
Arduino 0 Комментарии
В этом руководстве Robo India объясняется, как использовать регистр сдвига HC595 на Raspberry Pi. 1. Введение:Это последовательное устройство загружает данные, имеющиеся на его входах, а затем перемещает или «сдвигает» их на свой выход один раз за каждый такт, отсюда и название «Сдвиговый регистр».
Сдвиговый регистр используется для последовательного ввода и преобразования их в параллельный вывод. Говоря простым языком, он используется для увеличения выходных контактов. Потому что он просто использовал три контакта в качестве входных и дает 8 выходных контактов.
В этом уроке мы используем регистр сдвига 74HC595 (от Robo India). Для этого требуется три контакта интерфейса от NodeMCU:
1. Контакт данных: данные отправляются в последовательном режиме.
2. Вывод часов: На этом выводе работают часы.
3. Вывод-защелка: Этот вывод используется для переключения, чтобы регистр сдвига отображал 8-битные данные на выходе.
1.1 Требуемое оборудованиеС. №. | Item | Quantity |
1 | Raspberry Pi | 1 |
2 | Pi Wedge B + | 1 |
3 | Bread Board | 1 |
4 | Модуль регистра сдвига от Robo India | 1 |
5 | Jumper Male to male | 5 |
2. Building Circuit Schematic of circuit
После того, как часть схемы будет готова, необходимо запрограммировать Raspberry Pi. Вот код Python для запуска этой схемы.
Вы можете скачать этот код (код Python) отсюда.
импортировать RPi.GPIO как GPIO время импорта ЗАЩЕЛКА = 37 # GPIO 26 CLK = 22 # GPIO 25 бит данных = 13 # GPIO 27 GPIO. setup(ЗАЩЕЛКА, GPIO.ВЫХОД) GPIO.setup(CLK, GPIO.ВЫХОД) GPIO.setup(dataBit, GPIO.OUT) GPIO.output(22, 0) # Настройка ввода-вывода Выход GPIO (CLK, 0) определение импульсаCLK(): GPIO.output(CLK, 1) # time.sleep(.01) Выход GPIO (CLK, 0) возвращаться защита serLatch(): GPIO.output(LATCH, 1) # time.sleep(.01) Выход GPIO (ЗАЩЕЛКА, 0) возвращаться def ssrWrite(value): # Первым выводится старший бит! для x в диапазоне (0,8): температура = значение & 0x80 если темп == 0x80: GPIO.output(dataBit, 1) # бит данных ВЫСОКИЙ еще: GPIO.выход (бит данных, 0) пульсCLK() значение = значение << 0x01 # сдвиг влево serLatch() # выходной байт возвращаться def convBinary(value): # преобразовать 8-битное число в двоичную строку бинарное значение = '0b' для x в диапазоне (0,8): температура = значение & 0x80 если темп == 0x80: двоичное значение = двоичное значение + '1' еще: двоичное значение = двоичное значение + '0' значение = значение << 1 вернуть бинарное значение пока 1: темп = 1 для j в диапазоне (0, 8): ssrWrite(временная) температура = температура << 1 время сна (. 2) для j в диапазоне (0, 8): температура = температура >> 1 ssrWrite(временная) время сна (.2)4. Выходные данные
Программирование Python с помощью Raspberry Pi связывает ваш проект с реальным миром. Самый простой способ познакомиться с Python — через IDLE, среду разработки Python.
Откройте IDLE (среда разработки Python) из меню «Рабочий стол» или «Приложения»:
Python 3 — самая новая версия. Напишите приведенный выше код и сохраните его на рабочем столе или в любом другом месте. Откройте командную строку. Напишите cd location_of_program> Нажмите Enter.
Затем напишите Python 3 имя_файла.py > Нажмите Enter. (.py — это расширение файла).
После успешного выполнения кода Python два светодиода, начиная с LSBFIRST, должны мигать, а затем следующие два светодиода мигают до всех 8 светодиодов. Это будет продолжаться в цикле. Попробуйте изменить значения для другого шаблона светодиодов.
If you have any query please write us at support@roboindia.