Совет 1: Как подключить датчик освещённости BH1750 к Arduino

На этот раз подключим цифровой 16-битный датчик освещённости BH1750 (люксометр), реализованный на модуле GY-302, к Arduino.
Вам понадобится
  • - Arduino;
  • - модуль GY-302 с цифровым датчиком освещённости BH1750;
  • - персональный компьютер.
Инструкция
1
Рассмотрим модуль GY-302 с сенсором BH1750. Сенсор BH1750 представляет собой цифровой 16-битный цифровой датчик освещённости, что задаёт диапазон его измерений: от 1 до 65535 люкс. Датчик BH1750 чувствителен к видимому свету и практически не подвержен влиянию инфракрасного излучения, т.е. реагирует на тот же спектральный диапазон, что и человеческий глаз. Вследствие этого такие сенсоры получили широкое распространение в современной электронной аппаратуре - мобильных устройствах, фото- и видеокамерах, в системах "умный дом" и многих других.
Подключение модуля производится по двухпроводному интерфейсу I2C, а питание осуществляется от +5 вольт. Интерфейс I2C в платах Arduino реализован на аналоговых пинах A4 и A5, которые отвечают за SDA (шина данных) и SCL (шина тактирования), соответственно. Вывод ADDR модуля GY-302 можно оставить не подключённым или соединить с землёй.
Схема подключения датчика освещённости BH1750 к Arduino
2
Не будем углубляться в тонкости реализации интерфейса взаимодействия датчика BH1750 с Arduino, а воспользуемся готовой библиотекой. Скачать её можно тут: https://github.com/claws/BH1750/archive/master.zip. Скачанный архив распакуем в директорию со средой разработки "Arduino IDE/libraries".
Напишем вот такой скетч и загрузим его в Arduino. В скетче мы каждые 100 мсек считываем с датчика BH1750 показания освещённости в люксах и выводим эти данные в последовательный порт.
Скетч работы с датчиком света BH1750
3
Подключим датчик освещённости BH1750 к Arduino по приведённой выше схеме. Подключим плату Ардуино к компьютеру. Запустим среду разработки Arduino IDE и откроем монитор последовательного порта сочетанием клавиш "Ctrl+Shift+M" или через меню "Инструменты". В мониторе последовательного порта побегут значения освещённости с нашего сенсора BH1750. Направьте датчик на источник света, потом закройте его от света, и вы увидите, как меняются показания.
Датчик света BH1750 и Arduino в работе

Совет 2: Как подключить видеокамеру к монитору

Современные способы дистанционного общения не ограничиваются домашним или мобильным телефоном. Общаться можно с помощью ПК. А если к компьютеру подключить веб-камеру, то собеседника можно даже видеть.
Инструкция
1
Прежде чем купить веб-камеру, вам в первую очередь надо проверить наличие свободного USB-порта, так как она будет подключена именно к нему. Но даже если у вас все порты заняты, можно приобрести usb-хаб, или, как его еще называют, usb-разветвитель. Он позволит вам подключить несколько usb-устройств через один порт.
2
Для большего удобства вместе с веб-камерой купите наушники и микрофон, и ваш собеседник будет слышать вас намного лучше по сравнению со встроенным в веб-камеру устройством.
3
После того, как все необходимое куплено, из коробки веб-камеры вам нужно вытащить компакт-диск. На нем находятся необходимое программное обеспечение и драйвера. Программным обеспечением вы можете настроить воспроизведение веб-камеры с необходимыми параметрами. Драйвера показывают Windows, как обрабатывать информацию от устройства и как его определять в своей системе.
4
Когда программа автозапуска с компакт-диска покажет вам свое меню, необходимо выбрать «Install driver» или «Web-camera setup». Так как различные производители оформляют диски по-своему, меню может быть у вас немного другое.
5
Когда драйверы полностью установятся, вам нужно будет подключить в usb-порт кабель от веб-камеры. Как только вы подключите ее к компьютеру, останется лишь наблюдать, как Windows сам найдет и установит драйвера, которые вы недавно на нее скопировали. Подождите немного, пока не появится сообщение (недалеко от правого угла монитора), где будет сказано, что оборудование установлено и готово к работе.
6
Теперь проверьте, все ли работает. Для этого нужно включить программу Skype. В главном меню найдите клавишу «Инструменты», далее – «Настройки». В новом окне, в левом меню выберите «Настройка видео». Если ваша веб-камера установлена должным образом, то вы сможете увидеть в ней самого себя.
7
Вам остается лишь настроить фокусировку камеры, если она не автоматическая. Это можно выполнить, покручивая реле, которое находится у основания самой камеры. Сделайте так, чтобы на видеоизображении вы выглядели четко, а не расплывчато. Как только вы все выполнили, можно звонить и наслаждаться видео-общением.
Видео по теме
Источники:
  • подключение видеокамеры к монитору

Совет 3: Интерфейс I2C и Arduino

В этой статье мы рассмотрим, что такое интерфейс I2C (ай-ту-си, и-два-цэ), в чём его особенности и как с ним работать.
Вам понадобится
  • - Arduino;
  • - цифровой потенциометр AD5171;
  • - светодиод;
  • - резистор на 220 Ом;
  • - 2 резистора на 4,7 кОм;
  • - соединительные провода.
Инструкция
1
Последовательный протокол обмена данными IIC (также называемый I2C - Inter-Integrated Circuits, межмикросхемное соединение) использует для передачи данных две двунаправленные линии связи, которые называются шина последовательных данных SDA (Serial Data) и шина тактирования SCL (Serial Clock). Также имеются две линии для питания. Шины SDA и SCL подтягиваются к шине питания через резисторы.
В сети есть хотя бы одно ведущее устройство (Master), которое инициализирует передачу данных и генерирует сигналы синхронизации. В сети также есть ведомые устройства (Slave), которые передают данные по запросу ведущего. У каждого ведомого устройства есть уникальный адрес, по которому ведущий и обращается к нему. Адрес устройства указывается в паспорте (datasheet). К одной шине I2C может быть подключено до 127 устройств, в том числе несколько ведущих. К шине можно подключать устройства в процессе работы, т.е. она поддерживает "горячее подключение".
Схема подключения по интерфейсу I2C
2
Arduino использует для работы по интерфейсу I2C два порта. Например, в Arduino UNO и Arduino Nano аналоговый порт A4 соответствует SDA, аналоговый порт A5 соответствует SCL.
Для других моделей плат:
Arduino Pro и Pro Mini - A4 (SDA), A5 (SCL)
Arduino Mega - 20 (SDA), 21 (SCL)
Arduino Leonardo - 2 (SDA), 3 (SCL)
Arduino Due - 20 (SDA), 21 (SCL), SDA1, SCL1
Соответствие выводов Arduino шинам SDA и SCL
3
Для облегчения обмена данными с устройствами по шине I2C для Arduino написана стандартная библиотека "Wire". Она имеет следующие функции:
begin(address) - инициализация библиотеки и подключение к шине I2C; если не указан адрес, то присоединённое устройство считается ведущим; используется 7-битная адресация;
requestFrom() - используется ведущим устройством для запроса определённого количества байтов от ведомого;
beginTransmission(address) - начало передачи данных к ведомому устройству по определённому адресу;
endTransmission() - прекращение передачи данных ведомому;
write() - запись данных от ведомого в ответ на запрос;
available() - возвращает количество байт информации, доступных для приёма от ведомого;
read() - чтение байта, переданного от ведомого ведущему или от ведущего ведомому;
onReceive() - указывает на функцию, которая должна быть вызвана, когда ведомое устройство получит передачу от ведущего;
onRequest() - указывает на функцию, которая должна быть вызвана, когда ведущее устройство получит передачу от ведомого.
4
Давайте посмотрим, как работать с шиной I2C с помощью Arduino.
Сначала соберём схему, как на рисунке. Будем управлять яркостью светодиода, используя цифровой 64-позиционный потенциометр AD5171, который подключается к шине I2C. Адрес, по которому мы будем обращаться к потенциометру - 0x2c (44 в десятичной системе).
Схема управления светодиодом с помощью цифрового потенциометра и Arduino
5
Теперь откроем из примеров библиотеки "Wire" скетч:
Файл -> Образцы -> Wire -> digital_potentiometer. Загрузим его в память Arduino. Включим.
Вы видите, яркость светодиода циклически нарастает, а потом резко гаснет. При этом мы управляем потенциометром с помощью Arduino по шине I2C.
Скетч управления цифровым потенциометром по шине I2C
Видео по теме
Источники:
  • Описание библиотеки Wire на официальном сайте Arduino

Совет 4: Как подключить ультразвуковой дальномер HC-SR04 к Arduino

Подключим в этой статье ультразвуковой дальномер-эхолокатор HC-SR04 к Arduino.
Вам понадобится
  • - Arduino;
  • - ультразвуковой датчик HC-SR04;
  • - соединительные провода.
Инструкция
1
Действие ультразвукового дальномера HC-SR04 основано на принципе эхолокации. Он излучает звуковые импульсы в пространство и принимает отражённый от препятствия сигнал. По времени распространения звуковой волны к препятствию и обратно определяется расстояние до объекта.
Запуск звуковой волны начинается с подачи положительного импульса длительностью не менее 10 микросекунд на ножку TRIG дальномера. Как только импульс заканчивается, дальномер излучает в пространство перед собой пачку звуковых импульсов частотой 40 кГц. В это же время запускается алгоритм определения времени задержки отражённого сигнала, а на ножке ECHO дальномера появляется логическая единица. Как только датчик улавливает отражённый сигнал, на выводе ECHO появляется логический ноль. По длительности этого сигнала ("Задержка эхо" на рисунке) определяется расстояние до объекта.
Диапазон измерения расстояния дальномера HC-SR04 - до 4 метров с разрешением 0,3 см. Угол наблюдения - 30 градусов, эффективный угол - 15 градусов. Ток потребления в режиме ожидания 2 мА, при работе - 15 мА.
Принцип действия ультразвукового дальномера HC-SR04
2
Питание ультразвукового дальномера осуществляется напряжением +5 В. Два других вывода подключаются к любым цифровым портам Arduino, мы подключим к 11 и 12.
Подключение ультразвукового дальномера HC-SR04 к Arduino
3
Теперь напишем скетч, определяющий расстояние до препятствия и выводящий его в последовательный порт. Сначала задаём номера выводов TRIG и ECHO - это 12 и 11 пины. Затем объявляем триггер как выход, а эхо - как вход. Инициализируем последовательный порт на скорости 9600 бод. В каждом повторении цикла loop() считываем дистанцию и выводим в порт.
Функция getEchoTiming() генерирует импульс запуска. Она как раз создаёт ток 10 мксек импульс, который является триггером для начала излучения дальномером звукового пакета в пространство. Далее она запоминает время от начала передачи звуковой волны до прихода эха.
Функция getDistance() рассчитывает дистанцию до объекта. Из школьного курса физики мы помним, что расстояние равно скорость умножить на время: S = V*t. Скорость звука в воздухе 340 м/сек, время в микросекундах мы знаем, это "duratuion". Чтобы получить время в секундах, нужно разделить на 1.000.000. Так как звук проходит двойное расстояние - до объекта и обратно - нужно разделить расстояние пополам. Вот и получается, что расстояние до объекта S = 34000 см/сек * duration / 1.000.000 сек / 2 = 1,7 см/сек / 100, что мы и написали в скетче. Операцию умножения микроконтроллер выполняет быстрее, чем деления, поэтому "/ 100" я заменил на эквивалентное "* 0,01".
Скетч для работы с ультразвуковым эхолокатором HC-SR04
4
Также для работы с ультразвуковым дальномером написано множество библиотек. Например, вот эта: http://robocraft.ru/files/sensors/Ultrasonic/HC-SR04/ultrasonic-HC-SR04.zip. Установка библиотеки происходит стандартно: скачать, разархивировать в директорию libraries, которая находится в папке с Arduino IDE. После этого библиотекой можно пользоваться.
Установив библиотеку, напишем новый скетч. Результат его работы тот же - в мониторе последовательного порта выводится дистанция до объекта в сантиметрах. Если в скетче написать float dist_cm = ultrasonic.Ranging(INC);, то дистанция будет отображаться в дюймах.
Скетч для работы с ультразвуковым эхолокатором, использующий библиотеку
5
Итак, мы с вами подключили к Arduino ультразвуковой дальномер HC-SR04 и получили с него данные двумя разными способами: с использованием специальной библиотеки и без.
Преимущество использования библиотеки в том, что количество кода значительно сокращается и улучшается читаемость программы, вам не приходится вникать в тонкости работы устройства и вы сразу же можете его использовать. Но в этом же кроется и недостаток: вы хуже понимаете, как работает устройство и какие в нём происходят процессы. В любом случае, каким способом пользоваться - решать только вам.
Arduino с подключённым ультразвуковым дальномером HC-SR04
Видео по теме

Совет 5: Интерфейс SPI и Arduino

Изучаем интерфейс SPI и подключаем к Arduino сдвиговый регистр, к которому мы будем обращаться по этому протоколу для управления светодиодами.
Вам понадобится
  • - Arduino;
  • - сдвиговый регистр 74HC595;
  • - 8 светодиодов;
  • - 8 резисторов по 220 Ом.
Инструкция
1
SPI - Serial Peripheral Interface или "Последовательный периферийный интерфейс" - это синхронный протокол передачи данных для сопряжения ведущего устройства (Master) с периферийными устройствами (Slave). Ведущим устройством часто является микроконтроллер. Связь между устройствами осуществляется по четырём проводам, поэтому SPI иногда называют "четырёхпроводной интерфейс". Вот эти шины:
MOSI (Master Out Slave In) - линия передачи данных от ведущего к ведомым устройствам;
MISO (Master In Slave Out) - линия передачи от ведомого к ведущему устройству;
SCLK (Serial Clock) - тактовые импульсы синхронизации, генерируемые ведущим устройством;
SS (Slave Select) - линия выбора ведомого устройства; когда на линии "0", ведомое устройство "понимает", что сейчас обращаются к нему.
Существует четыре режима передачи данных (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), обусловленные сочетанием полярности тактовых импульсов (работаем по уровню HIGH или LOW), Clock Polarity, CPOL, и фазой тактовых импульсов (синхронизация по переднему или заднему фронту тактового импульса), Clock Phase, CPHA.
На рисунке показаны два варианта подключения устройств по протоколу SPI: независимое и каскадное. При независимом подключении к шине SPI ведущее устройство обращается к каждому ведомому устройству индивидуально. При каскадном - ведомые устройства срабатывают поочерёдно, каскадом.
Виды SPI подключений
2
В Arduino шины интерфейса SPI находятся на определённых портах. У каждой платы своё соответствие выводов. Для удобства выводы продублированы и вынесены также на отдельный разъём ICSP (In Circuit Serial Programming, программирование устройства, включённого в цепь, по последовательному протоколу). Обратите внимание, что на разъёме ICSP отсутствует пин выбора ведомого - SS, т.к. подразумевается, что Arduino будет использоваться как ведущее устройство в сети. Но при необходимости вы можете назначить любой цифровой вывод Ардуино в качестве SS.
На рисунке приведено стандартное соответствие выводов шинам SPI для Arduino UNO и Nano.
Реализация SPI в Arduino
3
Для Arduino написана специальная библиотека, которая реализует протокол SPI. Подключается она так: в начале программы добавляем #include SPI.h
Чтобы начать работу по протоколу SPI, нужно задать настройки и затем инициализировать протокол с помощью процедуры SPI.beginTransaction(). Можно выполнить это одной инструкцией: SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0)).
Это значит, что мы инициализируем протокол SPI на частоте 14 МГц, передача данных идёт, начиная с MSB (наиболее значимого бита), в режиме "0".
После инициализации выбираем ведомое устройство, переводя соответствующий пин SS в состояние LOW.
Затем передаём ведомому устройству данные командой SPI.transfer().
После передачи возвращаем SS в состояние HIGH.
Работа с протоколом завершается командой SPI.endTransaction(). Желательно минимизировать время выполнения передачи между инструкциями SPI.beginTransaction() и SPI.endTransaction(), чтобы не возникло накладок, если другое устройство попробует инициализировать передачу данных, используя другие настройки.
Передача по протоколу SPI
4
Рассмотрим практическое применение интерфейса SPI. Будем зажигать светодиоды, управляя 8-битным сдвиговым регистром по шине SPI. Подключим к Arduino сдвиговый регистр 74HC595. К каждому из 8-ми выходов подключим по светодиоду (через ограничительный резистор). Схема приводится на рисунке.
Подключение сдвигового регистра 74HC595 к Arduino
5
Напишем такой скетч.
Сначала подключим библиотеку SPI и инициализируем интерфейс SPI. Определим пин 8 как пин выбора ведомого устройства. Очистим сдвиговый регистр, послав в него значение "0". Инициализируем последовательный порт.
Чтобы зажечь определённый светодиод с помощью сдвигового регистра, нужно подать на его вход 8-разрядное число. Например, чтобы загорелся первый светодиод - подаём двоичное число 00000001, чтобы второй - 00000010, чтобы третий - 00000100, и т.д. Эти двоичные числа в переводе в десятичную систему счисления образуют такую последовательность: 1, 2, 4, 8, 16, 32, 64, 128 и являются степенями двойки от 0 до 7.
Соответственно, в цикле loop() по количеству светодиодов делаем пересчёт от 0 до 7. Функция pow(основание, степень) возводит 2 в степень счётчика цикла. Микроконтроллеры не очень точно работают с числами типа "double", поэтому для преобразования результата в целое число используем функцию округления round(). И передаём получившееся число в сдвиговый регистр. Для наглядности в мониторе последовательного порта выводятся значения, которые получаются при этой операции: единичка бежит по разрядам - светодиоды загораются волной.
Скетч управления сдвиговым регистром по шине SPI
6
Светодиоды загораются по очереди, и мы наблюдаем бегущую "волну" из огоньков. Управление светодиодами осуществляется с помощью сдвигового регистра, к которому мы подключились по интерфейсу SPI. В результате для управления 8-ю светодиодами задействованы всего 3 вывода Arduino.
Мы изучили самый простой пример работы Arduino с шиной SPI. Более подробно рассмотрим подключение сдвиговых регистров в отдельной статье.
Бегущая волна с помощью Arduino, сдвигового регистра и светодиодов
Видео по теме
Источники:
  • Описание библиотеки SPI на официальном сайте Arduino

Совет 6: Как подключить цифровой компас HMC5883 к Arduino

Рассмотрим подключение модуля GY-273 с трёхосевым цифровым компасом HMC5883L фирмы Honeywell. Эта микросхема может использоваться для магнитометрических измерений, в навигации, если не требуется большая точность измерений (с погрешностью 1…2 градуса и возможностью калибровки). Устройство подключается по интерфейсу I2C.
Вам понадобится
  • - Цифровой компас HMC5883;
  • - Arduino;
  • - макетная плата и соединительные провода;
  • - компьютер.
Инструкция
1
Вот основные характеристики магнитного компаса:
- 3-осевой магниточувствительный датчик;
- 12-разрядный АЦП с разрешением 2 мГс (миллигаусс);
- встроенная самопроверка;
- низкое рабочее напряжение и малое потребление;
- цифровой интерфейс I2C;
- высокая скорость опроса – до 160 раз в секунду (время одного измерения примерно 6 мс);
- точность определения направления 1°…2°;
- может применяться в сильных магнитных полях (до ±8 Гаусс).
Схема подключения магнитного датчика HMC5883L к Arduino приведена на рисунке. Она очень компактная и простая, т.к. двухпроводной интерфейс I2C тем и хорош, что требует малого количества соединений. Можно воспользоваться макетной платой.
Подключение цифрового компаса HMC5883 к Arduino
2
Должно получиться примерно так, как на фотографии. Я ещё подключу к шинам SCL и SDA логический анализатор, чтобы контролировать информационный обмен между Arduino и модулем HMC5883. Это не обязательно.
Цифровой компас HMC5883 подключён к Arduino на макетной плате
3
Давайте в качестве первого знакомства попробуем прочитать идентификационный регистры 10 (0xA), 11 (0xB) и 12 (0xC) цифрового компаса HMC5883 и напишем вот такой скетч, как на рисунке. Он снабжён подробными комментариями.
Скетч, считывающий идентификационные регистры HMC5883
4
Сигнал, полученный с помощью логического анализатора, будет таким, как на иллюстрации.
Что это значит? Первый байт – I2C адрес, с которым мы (ведущее устройство, Arduino) устанавливаем связь (старшие 7 бит 0x1E), и режим записи (младший бит – 0x0); получается число 0x3C. Второй байт – число 0xA, которое мы записали по адресу 0x1E и бит подтверждения от датчика HMC5883L, которое является ведомым. Это номер регистра, с которого мы начнём считывать данные. На этом первая транзакция закончилась. Начинается следующая. Третий байт – это запрос чтения у ведомого (старшие 7 бит – адрес 0x1E, 8-ой бит – операция чтения 0x1; получается число 0x3D). Последние 3 три байта – это ответ ведомого устройства HMC5883L из регистров 0xA, 0xB и 0xC, соответственно.
Цифровой компас HMC5883L при непрерывном считывании перемещается по регистрам самостоятельно. Т.е. каждый раз указывать регистр не обязательно (но и не запрещено). Например, если мы вместо 0xA записали бы 0x3 и 10 раз считали, то получили бы значения в 10-ти регистрах, начиная с 3-го по 12-ый.
А что это за три числа – 0x48, 0x34, 0x33? Снова воспользовавшись паспортом на цифровой компас HMC5883L, мы увидим, что это значения по умолчанию для трёх идентификационных регистров.
Временная диаграмма обмена по I2C с цифровым компасом HMC5883
5
Чтобы получить данные цифрового компаса по магнитному полю, нужно прочитать регистры с 3-го по 8-ой подобно тому, как мы прочитали идентификационные регистры. С той лишь разницей, что данные по каждой из трёх осей X, Y и Z представлены в виде двухбайтовых чисел. Переведя их в десятичные числа, мы получим направления по каждой из трёх осей.
Регистры данных цифрового компаса HMC5883

Совет 7: Как подключить сдвиговый регистр к Arduino

В одной из предыдущих статей мы уже бегло касались применения сдвигового регистра, в частности, 74HC595. Давайте более детально рассмотрим возможности и порядок работы с данной микросхемой.
Вам понадобится
  • - Arduino;
  • - сдвиговый регистр 74HC595;
  • - соединительные провода.
Инструкция
1
Сдвиговый регистр 74HC595 и ему подобные используются в качестве устройств преобразования последовательных данных в параллельные, а также может использоваться как "защёлка" для данных, удерживая переданное на него состояние.
Схема выводов ("распиновка") приведена на рисунке слева. Их назначение такое.
Q0...Q7 - выходы параллельных данных;
GND - земля (0 В);
Q7' - выход последовательных данных;
^MR - сброс ведущего устройства (активный низкий);
SHcp - вход тактовых импульсов сдвигового регистра;
STcp - вход тактовых импульсов "защёлки";
^OE - разрешение вывода (активный низкий);
Ds - вход последовательных данных;
Vcc - питание +5 В.
Конструктивно микросхема выполняется в нескольких типах корпусов; я буду использовать тот, что приведён на рисунке справа - выводной - т.к. его проще использовать с макетной платой (бредбордом).
Внешний вид сдвигового регистра и схема выводов
2
Коротко напомню о последовательном интерфейсе SPI, который мы будем использовать для передачи данных в сдвиговый регистр.
SPI - это четырёхпроводный двунаправленный последовательный интерфейс, в котором принимают участие ведущее и ведомое устройства. Ведущим в нашем случае будет являться Arduino, ведомым - регистр 74HC595.
Среда разработки для Arduino имеет встроенную библиотеку работы по интерфейсу SPI. При её применении используются выводы, которые отмечены на рисунке:
SCLK - вывод тактовых импульсов SPI;
MOSI - данные из ведущего - к ведомому;
MISO - данные от ведомого к ведущему;
SS - выбор ведомого.
Стандартные выводы SPI платы Arduino
3
Давайте соберём схему, как на рисунке.
Я также подключу ко всем ножкам микросхемы регистра сдвига логический анализатор. С помощью него мы увидим, что же происходит на физическом уровне, какие сигналы куда идут, и разберёмся, что они означают. Должно получиться примерно как на фотографии.
Схема подключения сдвигового регистра 74HC595 к Arduino
4
Напишем вот такой скетч и загрузим в память Arduino.
Переменная PIN_SPI_SS - это внутренняя стандартная константа, которая соответствует выводу "10" Ардуино при использовании его в качестве ведущего устройства интерфейса SPI, который мы тут используем. В принципе, мы могли бы с таким же успехом использовать любой другой цифровой вывод Arduino; тогда нам бы пришлось его объявить и задать его режим работы.
Подавая на этот вывод LOW, мы активизируем наш сдвиговый регистр на приём/передачу. После передачи мы снова поднимаем напряжение в HIGH, и обмен заканчивается.
Скетч для демонстрации работы сдвигового регистра
5
Включим нашу схему в работу и посмотрим, что покажет нам логический анализатор. Общий вид временной диаграммы - на рисунке.
Голубой пунктирной линией показаны 4 линии SPI, красной пунктирной - 8 каналов параллельных данных регистра сдвига.
Точка A на шкале времени - это момент передачи в регистр сдвига числа "210", B - момент записи числа "0", C - повторение цикла с начала.
Как видно, от А до B - 10,03 миллисекунд, а от B до С - 90,12 миллисекунд, почти как мы и задали в скетче. Небольшая добавка в 0,03 и 0,12 мс - это время передачи последовательных данных от Arduino, поэтому мы тут имеем не ровно 10 и 90 мс.
Временная диаграмма обмена Arduino и сдвигового регистра 74HC595
6
Рассмотрим подробнее участок A.
В самом верху - длинный импульс, которым Arduino инициализирует передачу по линии SPI-ENABLE - выбор ведомого. В это время начинают генерироваться тактовые импульсы SPI-CLOCK (вторая строка сверху), 8 штук (для передачи 1 байта).
Следующая строка сверху - SPI-MOSI - данные, которые мы передаём от Arduino к сдвиговому регистру. Это наше число "210" в двоичном виде - "11010010".
После завершения передачи, в момент завершения импульса SPI-ENABLE, мы видим, что сдвиговый регистр выставил на своих 8-ми ножках такое же значение. Я выделил это в голубой пунктирной линией и подписал значения для наглядности.
Выставление числа 210 на параллельной шине по SPI
7
Теперь обратим внимание на участок B.
Опять всё начинается с выбора ведомого и генерирования 8-ми тактовых импульсов.
Данные на линии SPI-MOSI теперь - "0". То есть мы записываем в этот момент в регистр число "0".
Но пока передача не закончена, в регистре хранится значение "11010010". Оно выводится на параллельные выводы Q0..Q7, и выдаётся при наличии тактовых импульсов в линии c параллельного выхода Q7' в линию SPI-MISO, что мы тут и видим.
Выставление числа 0 на параллельной шине по SPI
8
Таким образом, мы детально изучили вопрос информационного обмена между ведущим устройством, в роли которого выступил Arduino, и сдвиговым регистром 74HC595. Научились подключать сдвиговый регистр, записывать в него данные и считывать из него данные.
Поиск
Совет полезен?
Добавить комментарий к статье
Осталось символов: 500
к
Honor 6X Premium
новая премиальная версия
узнать больше