Подключение по шине i2c ардуино

Инструкция по использованию протокола I 2 C совместно с Arduino

Нам понадобится:

  • Arduino UNO или другая совместимая;
  • цифровой потенциометр AD5171 или другой с управлением по шине IIC;
  • светодиод любой (к примеру, вот из такого набора);
  • резистор на 220 Ом (рекомендую набор резисторов с номиналами от 10 Ом до 1 МОм);
  • 2 резистора по 4,7 кОм (из того же набора);
  • макетная плата;
  • соединительные провода (например, вот хороший набор);
  • компьютер с Arduino IDE.

Видео:Подключение нескольких устройств по шине i2cСкачать

Подключение нескольких устройств по шине i2c

1 Описание интерфейса I2C

Последовательный протокол обмена данными IIC (также называемый I2C – Inter-Integrated Circuits, межмикросхемное соединение) использует для передачи данных две двунаправленные линии связи, которые называются шина последовательных данных SDA (Serial Data) и шина тактирования SCL (Serial Clock). Также имеются две линии для питания. Шины SDA и SCL подтягиваются к шине питания через резисторы.

В сети есть хотя бы одно ведущее устройство (Master), которое инициализирует передачу данных и генерирует сигналы синхронизации. В сети также есть ведомые устройства (Slave), которые передают данные по запросу ведущего. У каждого ведомого устройства есть уникальный адрес, по которому ведущий и обращается к нему. Адрес устройства указывается в паспорте (datasheet). К одной шине I2C может быть подключено до 127 устройств, в том числе несколько ведущих. К шине можно подключать устройства в процессе работы, т.е. она поддерживает «горячее подключение».

Давайте рассмотрим временную диаграмму обмена по протоколу I2C. Есть несколько различающихся вариантов, рассмотрим один из распространённых. Воспользуемся логическим анализатором, подключённым к шинам SCL и SDA.

Мастер инициирует обмен. Для этого он начинает генерировать тактовые импульсы и посылает их по линии SCL пачкой из 9-ти штук. Одновременно на линии данных SDA он выставляет адрес устройства, с которым необходимо установить связь, которые тактируются первыми 7-ми тактовыми импульсами (отсюда ограничение на диапазон адресов: 2 7 = 128 минус нулевой адрес). Следующий бит посылки – это код операции (чтение или запись) и ещё один бит – бит подтверждения (ACK), что ведомое устройство приняло запрос. Если бит подтверждения не пришёл, на этом обмен заканчивается. Или мастер продолжает посылать повторные запросы.

Это проиллюстрировано на рисунке ниже. Задача такая: подключиться к ведомому устройству с адресом 0x27 и передать ему строку «SOLTAU.RU». В первом случае, для примера, отключим ведомое устройство от шины. Видно, что мастер пытается установить связь с устройством с адресом 0x27, но не получает подтверждения (NAK). Обмен заканчивается.

Подключение по шине i2c ардуино

Попытка мастера установить соединение с ведомым по I2C

Теперь подключим к шине I2C ведомое устройство и повторим операцию. Ситуация изменилась. На первый пакет с адресом пришло подтверждение (ACK) от ведомого. Обмен продолжился. Информация передаётся также 9-битовыми посылками, но теперь 8 битов занимают данные и 1 бит – бит подтверждения получения ведомым каждого байта данных. Если в какой-то момент связь оборвётся и бит подтверждения не придёт, мастер прекратит передачу.

Подключение по шине i2c ардуино

Временная диаграмма обмена по протоколу I2C

Видео:Подключение нескольких устройств, датчиков по I2C (АйТуСи) шинеСкачать

Подключение нескольких устройств, датчиков по I2C (АйТуСи) шине

2 Реализация I2Cв Arduino

Arduino использует для работы по интерфейсу I2C два порта. Например, в Arduino UNO и Arduino Nano аналоговый порт A4 соответствует SDA, аналоговый порт A5 соответствует SCL.

Подключение по шине i2c ардуино

Реализация I2C в Arduino UNO и Nano

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

ПлатаПин SDAПин SCL
Arduino Uno, Nano, Pro и Pro MiniA4A5
Arduino Mega2021
Arduino Leonardo23
Arduino Due20, SDA121, SCL1

Видео:Подключение дисплея OLED SSD1309 по шине I2CСкачать

Подключение дисплея OLED SSD1309  по шине I2C

3 Библиотека «Wire» для работы с IIC

Для облегчения обмена данными с устройствами по шине I2C для Arduino написана стандартная библиотека Wire. Она имеет следующие функции:

Читайте также: Шины для 175 80r13

ФункцияНазначение
begin(address)инициализация библиотеки и подключение к шине I2C; если не указан адрес, то присоединённое устройство считается ведущим; используется 7-битная адресация;
requestFrom()используется ведущим устройством для запроса определённого количества байтов от ведомого;
beginTransmission(address)начало передачи данных к ведомому устройству по определённому адресу;
endTransmission()прекращение передачи данных ведомому;
write()запись данных от ведомого в ответ на запрос;
available()возвращает количество байт информации, доступных для приёма от ведомого;
read()чтение байта, переданного от ведомого ведущему или от ведущего ведомому;
onReceive()указывает на функцию, которая должна быть вызвана, когда ведомое устройство получит передачу от ведущего;
onRequest()указывает на функцию, которая должна быть вызвана, когда ведущее устройство получит передачу от ведомого.

Видео:Урок 9. Адреса модулей на шине I2C. Arduino (что такое I2C, адресация, как изменить адрес модуля)Скачать

Урок 9. Адреса модулей на шине I2C. Arduino (что такое I2C, адресация, как изменить адрес модуля)

4 Подключение I2C устройствак Arduino

Давайте посмотрим, как работать с шиной I2C с помощью Arduino.

Сначала соберём схему, как на рисунке. Будем управлять яркостью светодиода, используя цифровой 64-позиционный потенциометр AD5171 (см. техническое описание), который подключается к шине I2C. Адрес, по которому мы будем обращаться к потенциометру – 0x2c (44 в десятичной системе).

Подключение по шине i2c ардуино

Подключение цифрового потенциометра к Arduino по шине I2C

Видео:Что такое I2C ??? Подключаем GY-521 и Oled 96*16 к STM 32Скачать

Что такое I2C ??? Подключаем GY-521 и Oled 96*16 к STM 32

5 Управление устройством по шине IIC

Рассмотрим диаграммы информационного обмена с цифровым потенциометром AD5171, представленные в техническом описании:

Подключение по шине i2c ардуино

Рассмотрим диаграммы чтения и записи цифрового потенциометра AD5171

Нас тут интересует диаграмма записи данных в регистр RDAC. Этот регистр используется для управления сопротивлением потенциометра.

Откроем из примеров библиотеки «Wire» скетч: Файл Образцы Wire digital_potentiometer. Загрузим его в память Arduino.

После включения вы видите, как яркость светодиода циклически нарастает, а потом гаснет. При этом мы управляем потенциометром с помощью Arduino по шине I2C.

По ссылкам внизу статьи, в разделе похожих материалов (по тегу), можно найти дополнительные примеры взаимодействия с различными устройствами по интерфейсу IIC, в том числе примеры чтения и записи.

Видео:Подключение символьного дисплея по шине I2C в программе FLProgСкачать

Подключение символьного дисплея по шине I2C в программе FLProg

6 Дополнительно о шине I2C

Доступно и интересно рассказывает о шине I2C Джереми Блюм в своём видео:

Видео:Урок 26.3 Соединяем две arduino по шине I2C #iarduinoСкачать

Урок 26.3 Соединяем две arduino по шине I2C #iarduino

Подключить несколько устройств i2c на Arduino

IIC Arduino (I2C – Inter-Integrated Circuits, межмикросхемное соединение) — это последовательный протокол обмена данными по двум двунаправленным линиям связи. Эти линии называют также: SDA (Serial Data) — шина последовательных данных и SCL (Serial Clock) — шина тактирования. Шины SDA и SCL Arduino подтягиваются к шине питания через резисторы. Рассмотрим подробнее, что это такое шина i2c arduino.

Видео:Подключение дисплея 1602 lcd i2c. 1602 ардуино дисплейСкачать

Подключение дисплея 1602 lcd i2c. 1602 ардуино дисплей

Шина I2C Ардуино описание

Микроконтроллеры Arduino используют два пина для работы по интерфейсу I2C. В Arduino Uno и Nano линии SDA соответствует аналоговый порт A4, а SCL соответствует аналоговый порт A5. На Ardunio Mega SDA — 20 пин, SCL — 21 пин. Для облегчения работы с шиной I2C и обмена данными между устройствами для Arduino IDE написана стандартная библиотека Wire (скачивать и устанавливать ее не надо).

Для каждого устройства, при подключении к микроконтроллеру, присваивается уникальный адрес (максимум можно подключить 127 устройств). Поменять адрес устройства на шине нельзя, так как он вшит в микросхему. Часто производители предоставляют возможность поменять адрес устройства в небольшом диапазоне, что дает возможность подключить к шине IIC Ардуино несколько одинаковых устройств.

Видео:подключение LCD по шине i2c к ардуиноСкачать

подключение LCD по шине i2c к ардуино

Сканер I2C интерфейса (шины) Ардуино

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • два текстовых дисплея 1602 I2C;
  • любое устройство с I2C интерфейсом;
  • провода «папа-папа», «папа-мама».

Перед тем, как управлять несколькими объектами, подключенных к IIC шине, необходимо узнать их адреса. Для этого используется программа — сканер I2C Arduino, которая позволяет узнать адреса всех устройств, подключенных в данный момент к шине. Соберите схему из двух текстовых экранов с IIC модулем (можно подключить только одно устройство), подключенных к Ардуино Уно, и загрузите следующий скетч.

Читайте также: По двум гладким замкнутым между собой шинам

Скетч. Сканер шины i2c для Arduino

Пояснения к коду:

  1. данный код позволяет узнать все адреса устройств, подключенных к шине IIC. Если устройство не было подключено или подключено неправильно — на мониторе порта будет выходить сообщение, что устройства не найдены;
  2. ниже, на скриншоте монитора порта Arduino IDE, выводится адрес LCD 1602.

Сканер шины i2c для Arduino с LCD дисплеем

Видео:Как подключить дисплей LCD 1602 к Arduino по шине I2CСкачать

Как подключить дисплей LCD 1602 к Arduino по шине I2C

Как подключить нескольких устройств по I2C Arduino

В следующем примере к шине IIC Arduino будет подключено сразу три устройства — текстовый дисплей 1602, датчик давления bmp180 и RTC модуль часов. После сборки схемы можно сделать предварительное сканирование шины, но адреса у всех устройств разные и изменить адрес можно только у дисплея. У других устройств адреса «вшиты» производителем и используются в библиотеках по умолчанию.

Скетч. Подключение нескольких устройств к шине i2c

После сборки схемы, убедитесь, что у вас установлены необходимые библиотеки для работы с устройствами по IIC протоколу, и загрузите следующий пример кода в микроконтроллер. Данная программа будет выводить на текстовый экран текущую дату и время суток (устанавливаются в процедуре void setup и время можно поменять), а также данные о температуре воздуха и атмосферном давлении.

Пояснения к коду:

  1. обновление информации на текстовом экране происходит каждую секунду, данный интервал можно увеличить по своему желанию;
  2. время выводится с секундами, формат вывода времени и даты также можно изменить в строчке LCD.print(time.gettime(«H:i:s — d.m»));

Заключение. Мы рассмотрели возможность подключения нескольких устройств по протоколу IIC к плате Arduino, что будет полезно знать при проектировании различных DIY поделок своими руками, например метеостанции на Ардуино с датчиком давления. Если у вас остались вопросы по сканеру IIC интерфейсной шины или подключении устройств по данному протоколу — смело оставляйте их в комментариях к этой записи.

Видео:Подключаем текстовый LCD 16x2 к arduino по I2CСкачать

Подключаем текстовый LCD 16x2 к arduino по I2C

Урок 26.3 Соединяем две arduino по шине I2C

При создании некоторых проектов, требуется разделить выполняемые задачи между несколькими arduino.

В этом уроке мы научимся соединять две arduino по аппаратной шине I2C.

Подключение по шине i2c ардуино

Преимущества:

  • Реализуется возможность подключения до 126 устройств.
    (не рекомендуется присваивать устройствам адреса 0x00 и 0x7F)
  • Не требуются дополнительные модули.
  • Все устройства одинаково подключаются к шине.
  • Каждое ведомое устройство имеет свой уникальный адрес на шине.

Недостатки:

Нам понадобится:

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

  • Библиотека LiquidCrystal_I2C_V112 (для подключения дисплеев LCD1602 по шине I2C).
  • Библиотека iarduino_I2C_connect (для удобства соединения нескольких arduino по шине I2C).

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE, а о том, как работать с LCD дисплеями, на странице Wiki — Работа с символьными ЖК дисплеями.

Видео:

Схема подключения:

На шине i2С находятся 4 устройства: 3 arduino и 1 LCD дисплей. Все устройства шины I2C соединены через Trema I2C Hub. Для подключения Arduino используются аппаратные выводы шины I2C.

  • Arduino master — к цифровому выводу D2 подключена trema кнопка.
  • Arduino slave 0x01 — к цифровому выводу D2 подключена trema кнопка.
  • Arduino slave 0x02 — к цифровому выводу D13 подключён trema светодиод, к аналоговому выводу A0 подключён Trema потенциометр.
  • LCD I2C дисплей — является устройством slave 0x27.

Подключение по шине i2c ардуино

На шине I2C не используются дополнительные подтягивающие резисторы (для линий SDA и SCL), так как они интегрированы в LDC I2C дисплее.

Читайте также: Размер шин рендж ровер спорт 2012

Код программы:

Arduino master:
Arduino slave 0x01:
Arduino slave 0x02:

Алгоритм работы:

  • Arduino master проверяет состояние собственной кнопки.
  • Arduino master опрашивает две Arduino Slave.
    • Arduino Slave 0x01 возвращает состояние кнопки.
    • Arduino Slave 0x02 возвращает значение падения напряжения плеча потенциометра.
    • Arduino Slave 0x02 включает или выключает светодиод, в соответствии с полученными данными.

    Настройка параметров шины I2C:

    Максимальная, аппаратно реализуемая частота передачи данных, может достигать 1/16 от тактовой частоты.

    Библиотека Wire позволяет устанавливать скорость передачи данных через функцию setClock(), которую требуется вызвать до функции begin().

    Библиотека Wire позволяет аппаратно подключить Arduino к шине I2C с указанием роли Arduino на шине: ведущий или ведомый.

    • Wire.setClock(400000); // скорость передачи данных 400 кБит/с.
    • Wire.begin(); // подключение к шине I2C в роли ведущего.
    • Wire.begin(адрес); // подключение к шине I2C в роли ведомого, с указанием адреса.

    Функции библиотеки iarduino_I2C_connect:

    В библиотеке iarduino_I2C_connect реализованы 4 функции: 2 для ведущего и 2 для ведомого.

    На ведомом устройстве достаточно вызвать функцию begin() с указанием массива, данные которого требуется сделать доступными для мастера. Далее можно работать с этим массивом, «забыв» про шину I2C. Мастер обращаясь к ведомому сможет получать и изменять данные элементов указанного массива (обращаясь к номеру элемента массива как к номеру регистра).

    Если требуется запретить мастеру менять значения некоторых ячеек массива, то достаточно вызвать «необязательную» функцию writeMask() с указанием маскировочного массива, каждый элемент которого является флагом, разрешающим запись в соответствующий элемент массива доступного по шине I2C.

    На ведущем устройстве доступны функции readByte() и writeByte(). Указывая в качестве параметров функций, адрес ведомого устройства и номер регистра, можно побайтно читать и записывать данные.

    Функции для ведомого:
    • Назначение: указание массива, элементы которого будут доступны для чтения/записи по шине I2C.
    • Синтаксис: begin(массив); // тип данных массива — byte.
    • Возвращаемые значения: Нет.
    • Примечание: Вызывается 1 раз в коде функции Setup().
    • Назначение: указание маскировочного массива, каждый элемент которого является флагом разрешения записи по шине I2C.
    • Синтаксис: writeMask(маскировочный_массив); // тип данных массива — bool.
    • Возвращаемые значения: Нет.
    • Примечание: Вызывается 1 раз в коде функции Setup().
    • Пример:
      #include
      #include
      iarduino_I2C_connect ccc;
      byte aaa[5]; // объявляем 5 элементов массива, к которому разрешим доступ.
      bool bbb[5] = ; // объявляем 5 элементов маскировочного массива.
      Wire.begin(0x33); // подключаемся к шине I2C в роли ведомого с адресом 0x33.
      ccc.begin(aaa); // разрешаем доступ к массиву aaa по шине I2C.
      ccc.wtiteMask(bbb); // маскируем разрешение на запись в массив aaa.
      • В соответствии со значениями массива bbb, мастер сможет записывать данные в ячейки 1,2,3 массива aaa, а попытка записи в 0 и 4 элементы будет проигнорирована.
      • Если массив aaa имеет больше элементов чем массив bbb, то попытка мастера записать данные в «лишние» элементы будет проигнорирована.
      • Если не объявлять маскировочный массив (не вызывать функцию writeMask() вообще), то все элементы массива aaa будут доступны для записи мастером.
      Функции для ведущего:
      • Назначение: Чтение одного байта данных из устройства на шине I2C.
      • Синтаксис: readByte(адрес_устройства, адрес_регистра);
      • Возвращаемые значения: uint8_t байт — данные считанные из указанного адреса, указанного устройства.
      • Примечание: Если производится чтение по шине I2C из массива объявленного функцией begin(), то адрес регистра соответствует номеру элемента массива.
      • Свежие записи
        • Нужно ли менять пружины при замене амортизаторов
        • Скрипят амортизаторы на машине что делать
        • Из чего состоит стойка амортизатора передняя
        • Чем стянуть пружину амортизатора без стяжек
        • Для чего нужны амортизаторы в автомобиле

        🔥 Видео

        Подключение I2C дисплея к ардуино. Русификация текста.Скачать

        Подключение I2C дисплея к ардуино. Русификация текста.

        Arduino I2C связь между контроллерамиСкачать

        Arduino I2C связь между контроллерами

        Как узнать адрес устройства подключенного к шине I2CСкачать

        Как узнать адрес устройства подключенного к шине I2C

        Введение в шину I2CСкачать

        Введение в шину I2C

        Как подключить несколько I²C с одинаковыми адресами. Железки АмперкиСкачать

        Как подключить несколько I²C с одинаковыми адресами. Железки Амперки

        Урок 24. Узнаём адреса устройств на шине I2CСкачать

        Урок 24. Узнаём адреса устройств на шине I2C

        Видеоуроки по Arduino. I2C и processing (7-я серия, ч1)Скачать

        Видеоуроки по Arduino. I2C и processing (7-я серия, ч1)

        LCD2004+I2C. Arduino. Обзор, подключение, поиск адресаСкачать

        LCD2004+I2C. Arduino. Обзор, подключение, поиск адреса

        Как настроить LCD ДИСПЛЕЙ и I2C на Arduino ?!Скачать

        Как настроить LCD ДИСПЛЕЙ и I2C на Arduino ?!
Поделиться или сохранить к себе:
Технарь знаток