Радио для всех — Регистры сдвига и Arduino
Персональные компьютеры включают в себя интерфейсы малых компьютерных систем (SCSI) и FireWire, которые позволяют компьютерам связываться с периферийными устройствами, такие как дисковые и ленточные накопители, DVD-ROM, принтеры, сканеры и прочее. Они могут быть использованы для обмена аналоговых сигналов, цифровых данных, или их комбинаций.
Интегральная схема, такая как 74HC595 представляет собой 8 битный регистр хранения и 8 битный сдвиговый регистр. Данные последовательно передаются в сдвиговый регистр, затем фиксируются в регистре хранения. К регистру хранения подключены 8 выходных линий. Это позволяет увеличивать количество выходов микроконтроллера.Чип преобразовывает входящий последовательный сигнал на 1 пине (Ds) в выходной параллельный на 8 пинах (Qx). Последовательная передача синхронна: для такта используется дополнительный пин (SHcp). Также отдельным пином управляется регистр данных (STcp), что позволяет изменять сигнал на 8 выходах единовременно, когда все данные переданы.
Таким образом образом из трёх пинов микроконтроллера, такого как Arduino, можно получить 8 цифровых выходов. Из регистров 74HC595 можно делать каскады, подключая один за другим (через пин Q7’), и таким образом из всё тех же 3 входящих линий получать 16, 24, 32 и т.д. цифровых выходов. Схема, которую будем собирать, может рассматриваться как универсальный параллельный сдвигальщик состоящий из группы регистров (в общей сложности 32 выходных порта), которым мы можем легко управлять нашим Arduino, используя только три контакта ввода / вывода. Четыре конденсатора между GND каждого устройства, дают больше стабильности системы, как это было предложено в паспорте микросхемы.
Переменный конденсатор необязательно подключать к аналоговому входу Arduino. Эта часть схемы не участвует напрямую в логике регистров сдвига. Представлен для дальнейших экспериментов с конструкцией.
Как управлять гирляндой четырьмя регистрами сдвига
Прежде всего, рассмотрим следующий трюк: в микроконтроллерах точки зрения, набор цепочке из регистров сдвига равен только один; Разница в том, что четыре байта должны быть отправлены, а не только один.
Отправить байт в регистр сдвига не очень сложно, есть стандартный код SHIFTOUT () из набора команд Arduino IDE. Таким образом, чтобы отправить восемь бит в регистр сдвига используем следующую программу:
Затем в функцию цикла, надо послать последовательно 8 битов используя вызов SHIFTOUT ()
Обратите внимание, что перед вызовом операции сдвига, защелки установлены на низком уровне, чтобы сообщить устройству, что ближайшие биты не должны быть обработаны немедленно. Затем, когда SHIFTOUT () возвращает защелки в высокий уровень, регистр сдвига сохраняет 8 бит.
Для упрощения понимания процесса Александр Бревиг (один из разработчиков Arduino библиотек) создал библиотеку ShiftRegister595 для оптимизации процесса, упомянутого выше. Вот один из примеров использования библиотеки.
При использовании библиотеки ShiftRegister595, в дальнейшем вы можете сами оптимизировать код, так как библиотека управляет только одним регистром сдвига. Потренируйтесь на ней, чтобы понять суть процесса.
Библиотека ShiftOutX
Чтобы управлять схемой, которую мы хотим запустить используем библиотеку ShiftOutX , разработанную Хуаном Эрнандесом. Из нее надо взять только ту часть которая использует только сдвиг регистров. Расписывать все не имеет смысла, так как подробная информация о библиотеке и хороший пример (входит в пакет библиотеки) находится на официальном сайте Arduino
Испытание узлов
Лучший способ проверить цепь, использовать очень простой метод для того, чтобы избежать каких-либо других возможных неисправностей. Как показано на следующем рисунке, мы используем один светодиод и один резистор (10 или 20 К), подключенных к земле для каждого выходного контакта, который мы хотим проверить. Этого достаточно, чтобы показать нам состояние каждого бита регистров сдвига. В нашем примере мы использовали только 16 светодиодов для простоты, связанных с первыми двумя 8-битовыми группами.
Прежде чем приступать к управлению такими устройствами, как двигатели или реле необходимо потестировать светодиоды которые визуально помогут контролировать каждый сигнал регистра. Библиотека может поддерживать до 8 цепочек выполненных на 74HC595.
Получится так
В начало обзора
CountZero — Архив
ATmega8 + Proteus: работа со сдвиговыми регистром 74HC595
разделы: AVR, SPI, Proteus, HD44780, дата: 26 сентября 2017г.
- Сдвиговые регистры, оглавление:
- ATmega8 + Proteus: работа со сдвиговыми регистром 74HC595
- ATmega8 + Proteus: входной сдвиговый регистр 74HC165, совместная работа с 74hc595
- ATmega8 + Arduino + Proteus: 8-битный сдвиговой регистр на I2C интерфейсе PCF8574
Изучение модуля USI MSP430 странным образом(на самом деле закономерным) вывела меня на такую штуку, как сдвиговый регистр. Имея о них лишь общее представление, мне пришлось срочно разбираться c этой, довольно обширной темой. Итак.
Сдвиговый регистр, он же расширитель портов, он же шинный преобразователь, преобразует сигнал последовательной шины в параллельный или/и обратно.
В рамках этой статью я рассмотрю работу с популярным 8-и битовыми сдвиговым регистром на SPI интерфейсе 74HC595.
В качестве практических примеров, я рассмотрю подключение светодиодной гирлянды, семисегментных индикаторов и дисплея с параллельной шиной HD44780.
В качестве микроконтроллера я буду использовать ATmega8, а в качестве среды моделирования Proteus 8.5.
Кроме этого, я затрону организацию SPI интерфейса у ATmega8.
- Оглавление:
- Сдвиговый регистр 74HC595 c SPI интерфейсом;
- Управление гирляндой светодиодов;
- SPI интерфейс в микроконтроллере ATmega8;
- Подключение семисегментного индикатора через сдвиговый регистр 74HC595;
- Подключение жидко-кристаллического дисплея HD44780 через сдвиговый регистр 74HC595;
Читать дальше
Arduino: библиотеки для работы с RTC DS1307,DS3231
разделы: Arduino, STM32duino, RTC, дата: 18 сентября 2017г.
Всё, что ты хотел знать о DS1307,
но боялся спросить
В завершении прошлой статьи я приводил ссылку для проверки I2C модуля RTC DS3231. Для этого не надо устанавливать никакие библиотеки, достаточно скопировать текст программы в Arduino IDE и кликнуть на загрузку скетча в микроконтроллер. Это одинаково работает как в Arduino IDE, так и в MSP430 Energia и STM32duino.
Однако, больше чем для проверки этот пример не годится, и рано или поздно перед каждым встает вопрос написания своей библиотеки для полноценной работы с RTC. Отчет времени, с календарем или без, довольно распространенная штука, и этот код вы скорее всего будете тащить из проекта в проект. Т.е. это вещь которую проще один раз хорошо сделать, что бы потом к этому не возвращаться.
Сам я уже прошел по этому пути, но т.к. написанный код уже не умещался под спойлерами, поэтому пришлось написать полноценную Arduino — библиотеку. В заключение будет несколько примеров с использованием этой библиотеки, с тем, как на мой взгляд нужно правильно работать с DS1307/DS3231.
Но прежде чем «городить огород», предлагаю взглянуть на готовые решения, одобренные «патриархами» arduino.cc, а именно: библиотеки Time, DS1307RTC, а также DS3232RTC которая работает совместно с библиотекой Time.
- Для начала решим, что нам нужно от RTC типа DS1307/DS3231:
- Автономный отчет времени, т.е. когда микроконтроллер при старте получает текущее время, а затем он уже считает время самостоятельно и не забивает I2C шину трафиком с RTC.
- Отчет времени по SQW-выводу, когда RTC тактирует счетчик часов микроконтроллера через внешнее прерывание, и микроконтроллер самостоятельно рассчитывает календарные данные и текущее время.
- Поддержка будильников.
- Поддержка внесения поправок к ходу часов.
- Периодическая синхронизация.
Вроде бы немного, и вроде бы несложно.
Весь код я буду тестировать на Arduino Nano, MSP430 Launchpad — Energia и на STM32duino — Blue Pill.
Общая концепция библиотек для работы со временем такая. Имеется базовая библиотека TIME которая ведет через функцию millis() расчет времени при запросе такого через функции библиотеки hour(), minute(), second() и т.д. Библиотека абстрагируется от аппаратной части того или иного хронометра. Она рассчитана на ведение календаря и отчет времени средствами самого микроконтроллера, без подключения RTC. Соответственно библиотеки DS3232RTC и DS1307RTC добавляют функции синхронизации микроконтроллера с RTC.
Содержание:
- Библиотека Time
- Библиотека DS1307RTC
- Часы реального времени повышенной точности с алгоритмом термокомпенсации DS3231
- Библиотека DS3231SQW
Читать дальше
Ардуино — ЖК-дисплей | 3-контактный интерфейс. — Робо Индия || Учебники || Изучите Ардуино |
Arduino 0 комментариев
В этом руководстве объясняется, как использовать 16X2 символьный ЖК-дисплей с 3-контактным интерфейсом с Arduino. Общей проблемой является то, что ЖК-дисплей занимает несколько контактов, с помощью 74HC595 (ИС с регистром сдвига) ЖК-дисплей можно подключить к Arduino только с помощью 3 контактов.ЖК-дисплей Arduino с интерфейсом I2C — 3-контактный интерфейс\
В этом руководстве объясняется, как использовать 16X2 символьный ЖК-дисплей с 3-контактным интерфейсом с Arduino. Общей проблемой является то, что ЖК-дисплей занимает несколько контактов, с помощью 74HC595 (ИС с регистром сдвига) ЖК-дисплей можно подключить к Arduino только с помощью 3 контактов.
Пошаговое руководство-
1. Необходимое программное обеспечение-1.1. Arduino IDE — загрузите
Если у вас нет Arduino IDE, вы можете загрузить его по ссылке выше. После завершения загрузки установите то же самое.
1.2. Библиотека серийных ЖК-дисплеев – LiquidCrystal
Загрузите библиотеку и извлеките ее. Вам нужно будет установить эту библиотеку на Arduino. Ниже приведены шаги для установки этой библиотеки.
1.2.1. Перейдите в следующее место —
C: \ Program Files (x86) \ Arduino \ Libraries
или
C: \ Program Files \ Arduino \ Libraries
или 9119 9119 9119 9119 9119
Папка установки Arduino. Вы можете получить его, щелкнув правой кнопкой мыши значок Arduino-> свойства-> местоположение
или
для пользователей Linux и Mac, которые найдут то же самое в папке установки Arduino.
1.2.2. Найдите папку «LiquidCrystal». Вырежьте эту папку и вставьте ее в другое место (сделав это, вы создадите резервную копию исходной библиотеки Arduino LiquidCrystal).
1.2.3. Скопируйте и вставьте извлеченную папку на шаге 1.2. например, «LiquidCrystal» в папке библиотеки Arduino. Другими словами, можно понять, что вы должны заменить библиотеку Arduino’s LiquidCrystal на скачанную отсюда.
2. Необходимое оборудование:Необходимо следующее оборудование –
2.1. Установку платы Arduino / USB в последовательный порт можно узнать здесь.
2.2 После того, как вы подготовите это аппаратное и программное обеспечение. Сделайте следующую схему.
или
3.1. Откройте среду разработки Arduino. Выберите макетную плату, как показано на картинке (нажмите на картинку, чтобы увеличить).
3.2 Выберите порт – как показано на рисунке (нажмите на изображение, чтобы увеличить). После выбора платы и портов вы увидите «Arduino UNO on Com__» номер порта. вы выбрали. Здесь, на этой картинке, коморт COM37.
3. 3 Скопируйте и вставьте следующий код в Arduino.
Вы можете скачать этот код (эскиз) отсюда.
// Учебное пособие Robo India по использованию ЖК-дисплея 16X2 с 3-контактным интерфейсом. // www.roboindia.com #include#include // Определение ЖК-дисплея и контактов для интерфейса. ЖК-дисплей LiquidCrystal_SR (6, 5, 9); // Пин 6 — Разрешение данных/SER, Пин 5 — Часы/SCL, Пин 9 — SCK недействительная установка () { lcd.begin(16,2); // Инициализация ЖК-дисплея ЖК.дом (); // Установка курсора в исходное положение, т.е. 0,0 } недействительный цикл () { lcd.print ("3-контактный ЖК-дисплей"); // Напечатать что-нибудь на ЖК-дисплее задержка (2000 г.); // ждем некоторое время ЖК.очистить(); // Очистка ЖК-дисплея lcd.print("РОБО ИНДИЯ"); lcd.setCursor(0, 1); // Установка курсора в первую и вторую строку столбца. lcd.print("roboindia.com"); задержка (2000 г.); ЖК.очистить(); }
3.4. Загрузите код.
3.5. После завершения загрузки вывод будет здесь:
Примечание. Вы можете восстановить исходную библиотеку LiquidCrystal, выполнив шаг 1.2.3 для исходной библиотеки, которую вы скопировали для резервного копирования. Используемая здесь библиотека получена от DOXYGEN.
если у вас есть какие-либо вопросы, пожалуйста, напишите нам по адресу: [email protected]
С уважением
Группа разработки контента
Robo India
http://roboindia.com
LCD, управляемый Arduino с помощью регистра сдвига и библиотеки SPI — 42 бота
Стэн Опубликовано Опубликовано в Символьный ЖК-дисплей, Учебные пособия 30 комментариев
Обновлено: Arduino Uno управляет ЖК-дисплеем с помощью регистра сдвига
Теперь, когда мой переработанный ЖК-дисплей 40×2 символов работает с Arduino, следующим шагом будет заставить его показывать что-то полезное. Я решил добавить его в свой робот, управляемый по Bluetooth, и отображать данные с двух его ультразвуковых датчиков расстояния (изначально). Постепенно может отображаться более интересная информация, такая как напряжение батареи и данные колесного энкодера, по мере того, как я заставляю эти компоненты работать. Проблема в том, что теперь мне нужно найти еще 6 цифровых контактов для управления самим ЖК-дисплеем. К счастью, есть альтернатива: добавьте 74HC595 сдвиговый регистр и воспользуйтесь библиотекой Arduino SPI. Вот как:
В этом случае я хочу отправлять данные только в одном направлении — с Arduino на ЖК-дисплей. Использование сдвигового регистра дает мне 8 дополнительных цифровых выходных контактов (в случае 74HC595) за счет 3 цифровых контактов Arduino (для односторонней связи от Arduino к сдвиговому регистру через SPI).
Шаг 1. Подключение Arduino, сдвигового регистра 74HC595 и ЖК-дисплея
- Arduino Uno обменивается данными со сдвиговым регистром с помощью SPI. Arduino является «мастером», а сдвиговый регистр — «ведомым». Для этого нам нужны контакты Data (MOSI), Clock (SLCK) и Latch (Slave Select). Линия MISO (Master In Slave Out) не нужна, потому что мы не собираемся считывать данные с ЖК-дисплея.
- Символьный ЖК-дисплей теперь подключен к контактам сдвигового регистра, а не напрямую к Arduino. Каждый такт от Arduino отправляется байт, который затем сообщает регистру сдвига, как установить каждый из его 8 цифровых контактов (высокий или низкий).
Соединения между Arduino и сдвиговым регистром:
Биты данных (MOSI): подключите контакт 14 «DS» на 74HC595 к контакту 11 Arduino.
Часы SPI (SCK): подключите контакт 11 «SHCP» на 74HC595 к контакту 13 Arduino.
Защелка: подключите контакт 12 «STCP» на 74HC59.5 к контакту 9 Arduino.
Вот схема соединений (обновлено 8 июня 2015 г.):
Обновлено: Arduino Uno управляет ЖК-дисплеем с помощью сдвигового регистра. Создано с Fritzing.Примечания по подключению:
Некоторые ЖК-дисплеи не имеют подсветки (контакты 15 и 16 на ЖК-дисплее). На приведенной выше схеме контакт 15 (анод подсветки) подключен к шине 5 В через токоограничивающий резистор 220 Ом. В большинстве ЖК-модулей токоограничивающий резистор уже встроен в ЖК-модуль, поэтому его можно не добавлять. Естественно, если ваш LCD не имеет подсветки (имеет только 14 контактов), то вам вообще не о чем беспокоиться.
Подстроечный потенциометр, подключенный к контакту 3 ЖК-дисплея (обозначен V0 на моем модуле), управляет яркостью дисплея. Следует отметить, что дисплей может быть самым ярким, когда его контакт 3 подключен к земле. Если у вас нет тримпота, я бы посоветовал сделать именно это.
Шаг 2: Добавление поддержки SPI в библиотеку Arduino LiquidCrystal
По умолчанию библиотека LiquidCrystal, предустановленная вместе с Arduino IDE (я использую версию 1.0.5), предполагает прямое соединение между Arduino и ЖК-дисплеем. К счастью, существует модифицированная версия библиотеки LiquidCrystal, которая добавляет поддержку SPI, созданную Хуаном Эрнандесом, в Arduino Playground.