Использование протокола I2C. Подробное описание интерфейса I2C Эквалайзеры с i2c интерфейсом

Использование протокола I2C. Подробное описание интерфейса I2C Эквалайзеры с i2c интерфейсом

С номиналами от 10 Ом до 1 МОм);

  • 2 резистора по 4,7 кОм (из того же набора);
  • соединительные провода (например, вот хороший набор);
  • компьютер с Arduino IDE.
  • 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, но не получает подтверждения (NAK). Обмен заканчивается.


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

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

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


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

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

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

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

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

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

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


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

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


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

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

    #include // подключаем библиотеку "Wire" byte val = 0; // значение для передачи потенциометру void setup() { Wire.begin(); // подключаемся к шине I2C как мастер } void loop() { Wire.beginTransmission(44); // начинаем обмен с устройством с I2C адресом "44" (0x2C) Wire.write(byte(0x00)); // посылаем инструкцию записи в регистр RDAC Wire.write(val); // задаём положение 64-позиционного потенциометра Wire.endTransmission(); // завершаем I2C передачу val++; // инкрементируем val на 1 if (val == 63) { // по достижении максимума потенциометра val = 0; // сбрасываем val } delay(500); }

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

    I2C - последовательная шина данных для связи интегральных схем, также известна как IIC и I2C.
    В простой системе I2C может быть один ведущий и несколько ведомых.
    Ведущий - это устройство, которое инициирует передачу данных и вырабатывает сигналы синхронизации. При этом любое адресуемое устройство считается ведомым по отношению к ведущему. Типичная конфигурация оборудования показана на рисунке ниже:

    SDA - линия данных
    SCL - линия сихронизации
    Обратите внимание, что к линиям SDA и SCL можно подключить несколько ведомых устройств. SDA и SCL являются двунаправленными линиями и подключаются к источнику питания через оттягивающий резистор. В большинстве случаев ведущим устройством выступает микроконтроллер, а ведомыми могут быть часы реального времени и датчики температуры, например, DS1307 и DS1624 от www.maxim-ic.com.

    Сигналы START и STOP

    Данные могут передаваться только после создания стартого условия. Переход линии SDA из ВЫСОКОГО состояния в НИЗКОЕ, в то время как SCL находится в ВЫСОКОМ состоянии, означает START. После каждой передачи данных выполняется условие остановки. Переход линии SDA из НИЗКОГО состояния в ВЫСОКОЕ при SCL в ВЫСОКОМ состоянии означает STOP.


    Длина данных, передаваемых по линии SDA, всегда равна 8 битам (включая команды чтения и записи). Каждый байт должен оканчиваться битом подтверждения. Старший бит MSB передается первым. Если происходит команда записи, то R/W бит = 0, и если чтения - R/W бит = 1. Подтверждение при передаче данных обязательно. Приемник должен удерживать линию данных в течение подверждения в стабильно Низком состоянии. Приёмник, которому были адресованы данные, обязан генерировать подтверждение после каждого принятого байта, исключая те случаи, когда посылка начинается с адреса CBUS. В том случае, когда ведомый-приёмник не может подтвердить свой адрес, линия данных должна быть оставлена в ВЫСОКОМ состоянии. После этого ведущий может выдать сигнал СТОП для прерывания пересылки данных. Ведущий может в любое время остановить передачу данных.
    Допустим, у нас есть ведомое устройство с адресом 1101000, и ведущий хочет, чтобы он выступал в роле приемника.


    На рисунке можно увидеть, что ведомый всегда порождает условия старта и посылает ведущему R/W бит, равный 0. После этого ведущий может начать передачу данных или остановить ее условием СТОП.


    На рисунке показано все то же самое, только R/W бит равен 1. Ведомый может начать передачу данных после потверждения от ведущего, он также может прекратить прием данных, создав условие СТОП.
    Пример.
    Этот пример показывает, как настроить чтение с датчика температуры DS1624.
    Схема подключения DS1624.


    Код программы представлен ниже.

    $regfile = "m88def. dat" ;Define the chip you use
    $crystal = 8000000 ;Define speed
    $baud = 19200 ;Define UART BAUD rate
    ;Declare RAM for temperature storage
    Dim I2ctemp As Byte ;Storage for the temperature
    ;Configure pins we want to use for the I²C bus
    Config Scl = Portd. 1 ;Is serial clock SCL
    Config Sda = Portd. 3 ;Is serial data SDA
    ;Declare constants – I2C chip addresses
    Const Ds1624wr = &B10010000 ;DS1624 Sensor write
    Const Ds1624rd = &B10010001 ;DS1624 Sensor read
    ;This section initializes the DS1624
    I2cstart ;Sends start condition
    I2cwbyte Ds1624wr ;Sends the address
    ;byte with r/w 0
    ;Access the CONFIG register (&HAC address byte)
    I2cwbyte &HAC
    ;Set continuous conversion (&H00 command byte)
    I2cwbyte &H00
    I2cstop ;Sends stop condition
    Waitms 25 ;We have to wait some time after a stop
    I2cstart
    I2cwbyte Ds1624wr
    ;Start conversion (&HEE command byte)
    I2cwbyte &HEE
    I2cstop
    Waitms 25
    ;End of initialization
    Print ;Print empty line
    Do
    ;Get the current temperature
    I2cstart
    I2cwbyte Ds1624wr
    I2cwbyte &HAA ;Read temperature (&HAA command byte)
    I2cstart
    I2cwbyte Ds1624rd ;The chip will give register contents
    ;Temperature is stored as 12, 5 but the , 5 first
    I2crbyte I2ctemp
    ;So you"ll have to read twice… first the , 5
    I2crbyte I2ctemp , Nack
    ;And then the 12… we don"t store the , 5
    I2cstop
    ;That"s why we read twice.
    ;We give NACK if the last byte is read
    ;Finally we print
    Print "Temperature: " ; Str(i2ctemp) ; " degrees" ; Chr(13);
    Waitms 25
    Loop
    End

    Отметим, что используемые команды в этом примере можно найти в документации к DS1624.
    Программа написана в среде Bascom AVR IDE, в которой можно разрабатывать программы для микроконтроллеров на языке высокого уровня Бейсик (Basic). Bascom AVR имеет встроенный компилятор, который преобразует программы, написанные на языке Basic, в шестнадцатеричный код, который, в свою очередь, можно запрограммировать (прошить) в микроконтроллер.
    Краткий обзор команд.
    Config Sda = Portx. x
    Настраивает контактный порт для использования в качестве последовательной передачи данных SDA.
    Config Scl = Portx. x
    Настраивает контактный порт для использования в качестве линии SCL.
    I2cstart
    Отправляет условие СТАРТ.
    I2cstop
    Отправляет условие СТОП.
    I2cwbyte
    Записывает один байт в I2C.
    I2crbyte
    Считывает один байт из I2C.
    I2csend
    Записывает количество байт, I2C.
    I2creceive
    Читает количество байтов от I2C.

    Практика
    Ниже показано, как реализовать I2C. В схеме использeтся контроллер Mega88 как мастер.

    Опубліковано 07.11.2014

    I2C Шина (TWI)

    I2C – последовательная шина данных для связи интегральных схем, использует две двунаправленные линии связи (SDA и SCL). Используется для соединения низкоскоростных периферийных компонентов. Название является аббревиатурой слов Inter-Integrated Circuit. TWI (Two Wire Interface) или TWSI (Two Wire Serial Interface) по сути та же шина I2C, но использует другое название с лицензионных причин. I2C использует две двунаправленные линии, подтянутые к напряжению питания и управляемые через открытый коллектор или открытый сток – последовательная линия данных (SDA, англ. Serial DAta) и последовательная линия тактирования (SCL, англ. Serial CLock). Стандартные напряжения питания +5 В или +3,3 В.

    Классическая адресация включает 7-битный адресное пространство с 16 зарезервированными адресами. То есть 112 свободных адресов для подключения периферии на одну шину. Основной режим работы – 100 Кбит/с; 10 Кбит/с в режиме с пониженной скоростью. Стандарт допускает приостановление тактирования при работе с медленными устройствами.

    После пересмотра стандарта в 1992 году стало возможным подключение еще большего количества устройств на одну шину (за счет 10-битной адресации), а также увеличилась скорость до 400 Кбит/с в скоростном режиме. Соответственно, доступное количество свободных узлов возросло до 1008. Максимальная допустимое количество микросхем, подключенных к одной шине, ограничивается максимальной емкостью шины в 400 пФ. Версия стандарта 2.0 1998 представила высокоскоростной режим работы со скоростью до 3,4 Мбит/с с пониженным энергопотреблением. Версия 2.1 2001 внесла лишь незначительные доработки.

    Послідовність передачі даних

    Состояние СТАРТ и СТОП

    Процедура обмена начинается с того, что ведущий формирует состояние СТАРТ: генерирует переход сигнала линии SDA из ВЫСОКОГО состояния в НИЗКОЕ при ВЫСОКОМ уровне на линии SCL. Этот переход воспринимается всеми устройствами, подключенными к шине, как признак начала процедуры обмена. Генерация синхросигнала - это всегда обязанность ведущего; каждый ведущий генерирует свой собственный сигнал синхронизации при пересылке данных по шине. Процедура обмена завершается тем, что ведущий формирует состояние СТОП - переход состояния линии SDA из низкого состояния в ВЫСОКОЕ при ВЫСОКОМ состоянии линии SCL. Состояния СТАРТ и СТОП всегда вырабатываются ведущим. Считается, что шина занята после фиксации состояния СТАРТ. Шина считается освободившейся через некоторое время после фиксации состояния СТОП. При передаче посылок по шине I2C каждый ведущий генерирует свой синхросигнал на линии SCL. После формирования состояния СТАРТ, ведущий опускает состояние линии SCL в НИЗКОЕ состояние и выставляет на линию SDA старший бит первого байта сообщения. Количество байт в сообщении не ограничено. Спецификация шины I2C разрешает изменения на линии SDA только при НИЗКОМ уровне сигнала на линии SCL. Данные действительны и должны оставаться стабильными только во время ВЫСОКОГО состояния синхроимпульса. Для подтверждения приема байта от ведущего-передатчика ведомым-приемником в спецификации протокола обмена по шине I2C вводится специальный бит подтверждения, выставляемый на шину SDA после приема 8 бита данных.

    Подтверждение

    Таким образом передача 8 бит данных от передатчика к приемнику завершаются дополнительным циклом (формированием 9-го тактового импульса линии SCL), при котором приемник выставляет низкий уровень сигнала на линии SDA, как признак успешного приема байта. Подтверждение при передаче данных обязательно, кроме случаев окончания передачи ведомой стороной. Соответствующий импульс синхронизации генерируется ведущим. Передатчик отпускает (ВЫСОКОЕ) линию SDA на время синхроимпульса подтверждения. Приёмник должен удерживать линию SDA в течение ВЫСОКОГО состояния синхроимпульса подтверждения в стабильном НИЗКОМ состоянии. В том случае, когда ведомый-приёмник не может подтвердить свой адрес (например, когда он выполняет в данный момент какие-либо функции реального времени), линия данных должна быть оставлена в ВЫСОКОМ состоянии. После этого ведущий может выдать сигнал СТОП для прерывания пересылки данных. Если в пересылке участвует ведущий-приёмник, то он должен сообщить об окончании передачи ведомому-передатчику путем не подтверждения последнего байта. Ведомый-передатчик должен освободить линию данных для того, чтобы позволить ведущему выдать сигнал СТОП или повторить сигнал СТАРТ.

    Синхронизация

    Синхронизация выполняется с использованием подключения к линии SCL по правилу монтажного И. Это означает, что ведущий не имеет монопольного права на управление переходом линии SCL из НИЗКОГО состояния в ВЫСОКОЕ. В том случае, когда ведомому необходимо дополнительное время на обработку принятого бита, он имеет возможность удерживать линию SCL в низком состоянии до момента готовности к приему следующего бита. Таким образом, линия SCL будет находиться в НИЗКОМ состоянии на протяжении самого длинного НИЗКОГО периода синхросигналов. Устройства с более коротким НИЗКИМ периодом будут входить в состояние ожидания на время, пока не кончится длинный период. Когда у всех задействованных устройств кончится НИЗКИЙ период синхросигнала, линия SCL перейдет в ВЫСОКОЕ состояние. Все устройства начнут проходить ВЫСОКИЙ период своих синхросигналов. Первое устройство, у которого кончится этот период, снова установит линию SCL в НИЗКОЕ состояние. Таким образом, НИЗКИЙ период синхролинии SCL определяется наидлиннейшим периодом синхронизации из всех задействованных устройств, а ВЫСОКИЙ период определяется самым коротким периодом синхронизации устройств. Механизм синхронизации может быть использован приемниками как средство управления пересылкой данных на байтовом и битовом уровнях. На уровне байта, если устройство может принимать байты данных с большой скоростью, но требует определенное время для сохранения принятого байта или подготовки к приему следующего, то оно может удерживать линию SCL в НИЗКОМ состоянии после приема и подтверждения байта, переводя таким образом передатчик в состояние ожидания. На уровне битов, устройство, такое как микроконтроллер без встроенных аппаратных цепей I2C или с ограниченными цепями, может замедлить частоту синхроимпульсов путем продления их НИЗКОГО периода. Таким образом скорость передачи любого ведущего адаптируется к скорости медленного устройства.

    Адресация в шине I2C

    Каждое устройство, подключённое к шине, может быть программно адресовано по уникальному адресу. Для выбора приемника сообщения ведущий использует уникальную адресную компоненту в формате посылки. При использовании однотипных устройств, ИС часто имеют дополнительный селектор адреса, который может быть реализован как в виде дополнительных цифровых входов селектора адреса, так и в виде аналогового входа. При этом адреса таких однотипных устройств оказываются разнесены в адресном пространстве устройств, подключенных к шине. В обычном режиме используется 7-битная адресация. Процедура адресации на шине I2C заключается в том, что первый байт после сигнала СТАРТ определяет, какой ведомый адресуется ведущим для проведения цикла обмена. Исключение составляет адрес «Общего вызова», который адресует все устройства на шине. Когда используется этот адрес, все устройства в теории должны послать сигнал подтверждения. Однако, устройства, которые могут обрабатывать «общий вызов», на практике встречаются редко. Первые семь битов первого байта образуют адрес ведомого. Восьмой, младший бит, определяет направление пересылки данных. «Ноль» означает, что ведущий будет записывать информацию в выбранного ведомого. «Единица» означает, что ведущий будет считывать информацию из ведомого. После того, как адрес послан, каждое устройство в системе сравнивает первые семь бит после сигнала СТАРТ со своим адресом. При совпадении устройство полагает себя выбранным как ведомый-приёмник или как ведомый-передатчик, в зависимости от бита направления. Адрес ведомого может состоять из фиксированной и программируемой части. Часто случается, что в системе будет несколько однотипных устройств (к примеру ИМС памяти, или драйверов светодиодных индикаторов), поэтому при помощи программируемой части адреса становится возможным подключить к шине максимально возможное количество таких устройств. Все специализированные ИМС, поддерживающие работу в стандарте шины I2C, имеют набор фиксированных адресов, перечень которых указан производителем в описаниях контроллеров. Комбинация бит 11110ХХ адреса зарезервирована для 10-битной адресации. Как следует из спецификации шины, допускаются как простые форматы обмена, так и комбинированные, когда в промежутке от состояния СТАРТ до состояния СТОП ведущий и ведомый могут выступать и как приемник, и как передатчик данных. Комбинированные форматы могут быть использованы, например, для управления последовательной памятью. Во время первого байта данных можно передавать адрес в памяти, который записывается во внутренний регистр-защелку. После повторения сигнала СТАРТа и адреса ведомого выдаются данные из памяти. Все решения об авто-инкременте или декременте адреса, к которому произошел предыдущий доступ, принимаются конструктором конкретного устройства. Поэтому, в любом случае лучший способ избежать неконтролируемой ситуации на шине перед использованием новой (или ранее не используемой) ИМС следует тщательно изучить ее описание (datasheet или reference manual), получив его с сайта производителя.

    Возможные проблемы

    На сегодняшний момент наиболее популярная скорость использования I2C – 100 Кбит/с и 400 Кбит/с. Однако, надо понимать, что использование на одной шине нескольких устройств, имеющих различные реализации протокола, и работают на разных скорости может привести к непредвиденным проблемам. Чаще всего для обеспечения стабильной работы приходится ограничивать скорость шины до скорости самого медленного устройства. Некоторые устройства, работающие в режиме MASTER не поддерживают приостановление тактирования для медленных устройств (clock stretching). В результате чего возникают ошибки при работе. В этом случае приходится значительно уменьшать скорость шины или, если есть такая возможность, разносить быстрые и медленные устройства на разные шины.

    Пример реализации I2C Slave на AVR микроконтроллере Atmega8

    #include #include #include #define I2CSLAVE_ADDR 0x4E #define PORT_DDR 0xB0 // PORTB Settings #define PORT_IN 0xB1 // Get PINB #define PORT_OUT 0xB2 // Set PORTB unsigned char regaddr; // Store the Requested Register Address unsigned char regdata; // Store the Register Address Data void i2c_slave_action(unsigned char rw_status) { switch(regaddr) { // PORT case PORT_DDR: if (rw_status == 0) // read regdata = DDRB; else // write DDRB = regdata; break; case PORT_IN: if (rw_status == 0) // read regdata = PINB; break; case PORT_OUT: if (rw_status == 1) // write PORTB = regdata; break; } } ISR(TWI_vect) { static unsigned char i2c_state; unsigned char twi_status; // Disable Global Interrupt cli(); // Get TWI Status Register, mask the prescaler bits (TWPS1,TWPS0) twi_status=TWSR & 0xF8; switch(twi_status) { case TW_SR_SLA_ACK: // 0x60: SLA+W received, ACK returned i2c_state=0; // Start I2C State for Register Address required break; case TW_SR_DATA_ACK: // 0x80: data received, ACK returned if (i2c_state == 0) { regaddr = TWDR; // Save data to the register address i2c_state = 1; } else { regdata = TWDR; // Save to the register data i2c_state = 2; } break; case TW_SR_STOP: // 0xA0: stop or repeated start condition received while selected if (i2c_state == 2) { i2c_slave_action(1); // Call Write I2C Action (rw_status = 1) i2c_state = 0; // Reset I2C State } break; case TW_ST_SLA_ACK: // 0xA8: SLA+R received, ACK returned case TW_ST_DATA_ACK: // 0xB8: data transmitted, ACK received if (i2c_state == 1) { i2c_slave_action(0); // Call Read I2C Action (rw_status = 0) TWDR = regdata; // Store data in TWDR register i2c_state = 0; // Reset I2C State } break; case TW_ST_DATA_NACK: // 0xC0: data transmitted, NACK received case TW_ST_LAST_DATA: // 0xC8: last data byte transmitted, ACK received case TW_BUS_ERROR: // 0x00: illegal start or stop condition default: i2c_state = 0; // Back to the Begining State } // Clear TWINT Flag TWCR |= (1<Тактовая частота микроконтроллера должен быть не менее 8 MHz.

    В этом примере, обращаясь по шине I2C к устройству по адресу указанному в строке:

    #define I2CSLAVE_ADDR 0x4E

    можно управлять портом B микроконтроллера, используя адреса:

    #define PORT_DDR 0xB0 // PORTB Settings #define PORT_IN 0xB1 // Get PINB #define PORT_OUT 0xB2 // Set PORTB

    Для программирования порта на вход, следует записать 0x00 по адресу 0xB0 .
    Для получения состояния входов порта B нужно прочитать один байт по адресу 0xB1 .
    Для программирования порта на выход записать 0xFF по адресу 0xB0 .
    Чтобы установить все выходы порта в 1 надо записать 0xFF по адресу 0xB2 .

    Используя этот пример можно создавать свои специфические I2C Slave устройства на базе AVR микроконтроллеров. Например, модули сенсоров, дисплеев и т.д., интерфейс которых нужно унифицировать.

    В современной бытовой технике, промышленной электронике и различном телекоммуникационном оборудовании достаточно часто можно встретить аналогичные решения, хотя изделия могут быть практически не связаны между собой. К примеру, практически каждая система включает в себя следующее:

    • определенный «умный» узел управления, который в преимущественном большинстве случаев представляет собой однокристалльную микроЭВМ;
    • узлы общего назначения наподобие буферов ЖК, ОЗУ, портов ввода/вывода, ЭСПЗУ или же специализированные преобразователи данных;
    • специфические узлы, включающие в себя схемы цифровой настройки и обрабатывания сигналов для видео- и радиосистем.

    Как оптимизировать их применение?

    Чтобы обеспечить максимально эффективное использование таких общих решений для выгоды конструкторов и самих производителей, а также для повышения общей степени производительности различной аппаратуры и упрощения применяемых схемотехнических узлов, компания Philips задалась целью разработать предельно простую двухпроводную двунаправленную шину, обеспечивающую наиболее продуктивное межмикросхемное управление. Данная шина обеспечивает через интерфейс I2C.

    На сегодняшний день ассортимент указанного производителя включает в себя более 150 КМОП, а также биполярных устройств, совместимых с I2C и предназначенных для ведения работы в любых перечисленных категориях. При этом стоит отметить, что интерфейс I2C является изначально встроенным во все совместимые устройства, за счет чего они и могут безо всяких сложностей поддерживать связь между собой при использовании специальной шины. За счет применения такого конструкторского решения получилось решить достаточно большое количество проблем сопряжения различного оборудования, что является довольно характерным для сферы разработки цифровых систем.

    Основные преимущества

    Даже если посмотреть кратко SPI, I2C, можно выделить следующие преимущества последнего:

    • Для работы нужно всего две линии - синхронизации и данных. Любое устройство, которое подключается к такой шине, в дальнейшем может программно адресоваться по абсолютно уникальному адресу. В любой момент существует простое отношение, позволяющее ведущим работать в качестве ведущего-передатчика или ведущего-приемника.
    • Данная шина предусматривает возможность иметь сразу несколько ведущих, предоставляя все необходимые средства для определения коллизий, а также арбитраж, позволяющий предотвратить повреждение данных в том случае, если два или большее количество ведущих начинает одновременно передавать информацию. В стандартном режиме предусматривается только передача последовательных восьмибитных данных при скорости не более 100 кбит/с, а в быстром режиме этот порог может быть увеличен в четыре раза.
    • В микросхемах используется специальный встроенный фильтр, который достаточно эффективно подавляет всплески и обеспечивает максимальную целостность данных.
    • Предельно возможное количество микросхем, которые могут быть подсоединены к одной шине, ограничивается только ее предельно возможной емкостью, составляющей 400 пФ.

    Преимущества для конструкторов

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

    Есть масса преимуществ, которые выделяют интерфейс I2C. Описание, в частности, позволяет увидеть следующие достоинства для конструкторов:

    • Блоки на всецело соответствуют микросхемам, и при этом обеспечивается достаточно быстрый переход от функциональных к принципиальным.
    • Нет никакой необходимости заниматься разработкой шинных интерфейсов, потому что шина уже изначально интегрирована в специальные микросхемы.
    • Интегрированные протоколы передачи информации и адресация устройств предоставляют системе возможность быть полностью программно определяемой.
    • Одинаковые типы микросхем при необходимости можно использовать в абсолютно разных приложениях.
    • Общее время разработки существенно снижается за счет того, что конструкторы довольно быстро могут ознакомиться с наиболее часто используемыми функциональными блоками, а также всевозможными микросхемами.
    • При желании можно добавлять или убирать из системы микросхемы, и при этом не оказывать особого влияния на прочее оборудование, подключенное к одной шине.
    • Общее время разработки программного обеспечения можно значительно снизить за счет того, что здесь допускается применение библиотеки повторно применяемых программных модулей.

    Помимо всего прочего, стоит отметить предельно простую процедуру диагностики возникших сбоев и дальнейшую отладку, которой отличается интерфейс I2C. Описание говорит о том, что при необходимости можно безо всякого труда моментально отслеживать даже незначительные отклонения в работе такого оборудования и, соответственно, принимать соответствующие меры. Также стоит отметить, что конструкторы получают специальные решения, которые, в частности, являются довольно привлекательными для различного портативного оборудования и систем, предусматривающих батарейное питание, используя I2C интерфейс. Описание на русском также указывает на то, что его применение позволяет обеспечить следующие немаловажные достоинства:

    • Достаточно высокую степень устойчивости к любым возникающим помехам.
    • Предельно низкое потребление энергии.
    • Широчайший диапазон питающего напряжения.
    • Широкий температурный диапазон.

    Преимущества для технологов

    Стоит отметить, что не только конструкторы, но и технологи достаточно часто в последнее время начали использовать специализированный I2C интерфейс. Описание на русском указывает довольно широкий диапазон достоинств, которые обеспечиваются этой категории специалистов:

    • Стандартная двухпроводная последовательная шина с таким интерфейсом позволяет минимизировать соединения между микросхемами, то есть в них присутствует меньше контактов и требуется меньшее количество дорожек, благодаря чему печатные платы становятся не такими дорогими и имеют гораздо меньшие габариты.
    • Полностью интегрированный I2C интерфейс LCD1602 или какой-то другой вариант полностью устраняет необходимость в использовании дешифраторов адреса, а также другой внешней мелкой логике.
    • Предусматривается возможность использования одновременно нескольких ведущих на такой шине, благодаря чему существенно ускоряется тестирование и последующая настройка оборудования, так как шина может быть подключена к компьютеру сборочной линии.
    • Доступность совместимых с этим интерфейсом микросхем в VSO, SO и специализированном DIL-корпусе позволяет существенно снизить требования к размеру устройства.

    Это только краткий список преимуществ, которыми отличается I2C интерфейс LCD1602 и другие. Кроме того, совместимые микросхемы позволяют значительно увеличить гибкость используемой системы, обеспечивая предельно простое конструирование различных вариантов оборудования, а также относительно легкую модернизацию для дальнейшей поддержки разработки на современном уровне. Таким образом, можно разработать целое семейство различного оборудования, используя в качестве основы определенную базовую модель.

    Дальнейшая модернизация оборудования и расширение его функций могут осуществляться посредством стандартного подключения к шине соответствующей микросхемы, использующей 2C интерфейс Arduino или какой-нибудь другой из доступного перечня. Если требуется обеспечение большей ПЗУ, то в таком случае достаточно будет только выбрать другой микроконтроллер, имеющий увеличенный объем ПЗУ. Так как обновленные микросхемы при необходимости способны полностью заместить старые, можно запросто добавлять новые свойства в оборудование или повышать его общую производительность посредством обычного отсоединения уже устаревших микросхем и дальнейшей замены их на более новое оборудование.

    ACCESS.bus

    За счет того, что шина имеет двухпроводную природу, а также возможность программной адресации, для ACCESS.bus одной из наиболее идеальных платформ является именно I2C интерфейс. Спецификация (описание на русском представлено в статье) данного устройства делает его гораздо более дешевой альтернативой активно использующемуся ранее интерфейсу RS-232C для подсоединения различной периферии к компьютерам, используя стандартный четырехконтактный коннектор.

    Введение в спецификацию

    Для современных приложений 8-битного управления, в которых используются микроконтроллеры, предусматривается возможность установки некоторых конструкторских критериев:

    • полная система в преимущественном большинстве случае включает в себя один микроконтроллер и прочие в том числе память и всевозможные порты ввода/вывода;
    • общая стоимость объединения различных устройств внутри одной системы должна быть предельно минимизирована;
    • система, на которую возлагаются функции управления, не предусматривает необходимость в обеспечении высокоскоростной передачи информации;
    • общая эффективность непосредственно зависит от выбранного оборудования, а также от природы соединяющей шины.

    Для разработки системы, полностью соответствующей перечисленным критериям, нужно использовать шину, в которой будет использоваться последовательный интерфейс I2C. Несмотря на то что в последовательной шине нет пропускной способности параллельных, ей требуется меньшее количество соединений, а также меньше контактов микросхем. При этом не стоит забывать о том, что шина включает в себя не только соединяющие провода, но еще и различные процедуры и форматы, необходимые для обеспечения связи внутри системы.

    Устройства, для связи которых используется программная эмуляция интерфейса I2C или соответствующая шина, должны иметь определенный протокол, который позволяет упредить различные возможности столкновений, потери или же блокирования информации. У быстрых устройств должна быть возможность связаться с медленными, и при этом система не должна зависеть от подключенного к ней оборудования, так как в противном случае все улучшения и модификации не смогут быть использованы. Также нужно разрабатывать процедуру, с помощью которой реально установить, какое конкретно устройство на данный момент обеспечивает управление шиной и в какой момент времени. Помимо этого, если различные устройства, имеющие разные тактовые частоты, подключены к одной шине, нужно определиться с источником ее синхронизации. Всем этим критериям соответствует I2C интерфейс для AVR и любые другие из этого перечня.

    Основная концепция

    Шина I2C может поддерживать любые использующиеся технологии изготовления микросхем. Интерфейс I2C LabVIEW и другие аналогичные ему предусматривают использования двух линий для переноса информации - данных и синхронизации. Любое устройство, подключенное таким образом, распознается за счет уникального адреса вне зависимости от того, идет ли речь о ЖКИ-буфере, микроконтроллере, памяти или интерфейсе клавиатуры, и при этом может работать в качестве приемника или передатчика в зависимости от того, для чего конкретно предназначается данное оборудование.

    В преимущественном большинстве случаев ЖКИ-буфер представляет собой стандартный приемник, а память может не только принимать, но и передавать различные данные. Помимо всего прочего, по процессу перемещения информации приборы можно классифицировать как ведомые и ведущие.

    В данном случае ведущим называется устройство, которым инициируется передача данных, а также вырабатываются сигналы синхронизации. При этом любые адресуемые приборы будут считаться по отношению к нему ведомыми.

    Интерфейс связи I2C предусматривает наличие сразу нескольких ведущих, то есть более чем одно устройство, способное осуществлять управление шиной, способно к ней подключаться. Возможность использования более одного микроконтроллера в одной шине говорит о том, что более чем от одного ведущего может осуществляться пересылка в определенный момент времени. Чтобы устранить потенциальный хаос, который рискует появиться при возникновении такой ситуации, разработана специализированная процедура арбитража, которую использует I2C интерфейс. Расширители и другие приборы предусматривают подключение устройств к шине по так называемому правилу монтажного И.

    Генерация синхросигнала представляет собой обязанность ведущего, и каждый из них вырабатывает собственный сигнал в процессе пересылки данных, и в дальнейшем он может изменяться только в том случае, если его «вытягивает» медленное ведомое устройство или другое ведущее при возникновении столкновения.

    Общие параметры

    Как SCL, так и SDA представляют собой двунаправленные линии, которые подключаются к положительному источнику питания при помощи подтягивающего резистора. Когда шина оказывается абсолютно свободной, каждая линия пребывает в высоком положении. Выходные каскады устройств, которые подключены к шине, должны быть с открытым стоком или открытым коллектором, чтобы могла обеспечиваться функция монтажного И. Информация через I2C интерфейс может передаваться при скорости не более 400 кбит/с в быстром режиме, в то время как в стандартном скорость не превышает 100 кбит/с. Общее же количество устройств, которые могут быть одновременно подключены к шине, зависит только от одного параметра. Это емкость линии, составляющая не более 400 пф.

    Подтверждение

    Подтверждение представляет собой обязательную процедуру в процессе передачи данных. Ведущий генерирует соответствующий импульс синхронизации, в то время как передатчик отпускает линию SDA в течение данного синхроимпульса как подтверждение. После этого приемник должен обеспечить стабильное удержание линии SDA в течение высокого состояния синхроимпульса в стабильно низком состоянии. В данном случае нужно обязательно принимать во внимание время установки и удержания.

    В преимущественном большинстве случаев адресованный приемник должен в обязательном порядке сгенерировать подтверждение после каждого полученного байта, и единственным исключением здесь являются только те ситуации, когда начало посылки включает в себя адрес CBUS.

    Если у ведомого-приемника нет возможности отправить подтверждение собственного адреса, нужно оставлять линию данных в высоком состоянии, и после этого у ведущего будет возможность выдачи сигнала "Стоп", который прервет отправку всей информации. Если же адрес был подтвержден, но при этом ведомый не может в течение длительного времени больше принимать какие-либо данные, ведущим также должна быть прервана посылка. Чтобы это сделать, ведомый не подтверждает следующий полученный байт и просто оставляет линию данных в высоком состоянии, вследствие чего ведущим генерируется сигнал "Стоп".

    Если же в процедуре пересылки предусматривается наличие ведущего-приемника, то в таком случае он должен сообщать ведомому об окончании проведенной передачи, и делается это посредством неподтверждения последнего полученного байта. При этом ведомый-передатчик сразу освобождает линию данных, чтобы ведущий мог выдать сигнал "Стоп" или снова повторить сигнал "Старт".

    Чтобы проверить работоспособность оборудования, можно попробовать ввести стандартные примеры скетчей для интерфейса I2C в Arduino, как на фото выше.

    Арбитраж

    Ведущим может начинаться пересылка информации только после полного освобождения шины, но при этом два и более ведущих могут провести генерирование сигнала о старте при времени минимального удерживания. Это в конечном итоге приводит к определенному сигналу "Старт" на шине.

    Работа арбитража осуществляется на шине SDA в те моменты, пока SCL-шина пребывает в высоком состоянии. Если один из ведущих начинает передавать на линию данных низкий уровень, но при этом другой - высокий, то последний полностью отключается от нее, потому что состояние SDL является не соответствующим высокому состоянию его внутренней линии.

    Продолжение арбитража может осуществляться на протяжении нескольких бит. За счет того, что сначала осуществляется передача адреса, а потом данных, арбитраж может иметь длительность до окончания адреса, а если ведущими будет адресоваться одно и то же устройство, то в таком случае в арбитраже будут принимать участие и различные данные. Вследствие такой схемы арбитража при возникновении каких-либо столкновений данные не потеряются.

    Если ведущий проигрывает арбитраж, то в таком случае он может выдавать импульсы синхронизации в SCL до конца байта, в течение которого и был потерян доступ.

    LCD дисплей – частый гость в проектах ардуино. Но в сложных схемах у нас может возникнуть проблема недостатка портов Arduino из-за необходимости подключить экран, у которого очень очень много контактов. Выходом в этой ситуации может стать I2C /IIC переходник, который подключает практически стандартный для Arduino экран 1602 к платам Uno, Nano или Mega всего лишь при помощи 4 пинов. В этой статье мы посмотрим, как можно подключить LCD экран с интерфейсом I2C, какие можно использовать библиотеки, напишем короткий скетч-пример и разберем типовые ошибки.

    Жидкокристаллический дисплей (Liquid Crystal Display) LCD 1602 является хорошим выбором для вывода строк символов в различных проектах. Он стоит недорого, есть различные модификации с разными цветами подсветки, вы можете легко скачать готовые библиотеки для скетчей Ардуино. Но самым главным недостатком этого экрана является тот факт, что дисплей имеет 16 цифровых выводов, из которых обязательными являются минимум 6. Поэтому использование этого LCD экрана без i2c добавляет серьезные ограничения для плат Arduino Uno или Nano. Если контактов не хватает, то вам придется покупать плату Arduino Mega или же сэкономить контакты, в том числе за счет подключения дисплея через i2c.

    Краткое описание пинов LCD 1602

    Давайте посмотрим на выводы LCD1602 повнимательней:

    Каждый из выводов имеет свое назначение:

    1. Земля GND;
    2. Питание 5 В;
    3. Установка контрастности монитора;
    4. Команда, данные;
    5. Записывание и чтение данных;
    6. Enable;

    7-14. Линии данных;

    1. Плюс подсветки;
    2. Минус подсветки.

    Технические характеристики дисплея:

    • Символьный тип отображения, есть возможность загрузки символов;
    • Светодиодная подсветка;
    • Контроллер HD44780;
    • Напряжение питания 5В;
    • Формат 16х2 символов;
    • Диапазон рабочих температур от -20С до +70С, диапазон температур хранения от -30С до +80 С;
    • Угол обзора 180 градусов.

    Схема подключения LCD к плате Ардуино без i2C

    Стандартная схема присоединения монитора напрямую к микроконтроллеру Ардуино без I2C выглядит следующим образом.

    Из-за большого количества подключаемых контактов может не хватить места для присоединения нужных элементов. Использование I2C уменьшает количество проводов до 4, а занятых пинов до 2.

    Где купить LCD экраны и шилды для ардуино

    LCD экран 1602 (и вариант 2004) довольно популярен, поэтому вы без проблем сможете найти его как в отечественных интернет-магазинах, так и на зарубежных площадках. Приведем несколько ссылок на наиболее доступные варианты:

    Модуль LCD1602+I2C с синим экраном, совместим с Arduino Простой дисплей LCD1602 (зеленая подсветка) дешевле 80 рублей Большой экран LCD2004 с I2C HD44780 для ардуино (синяя и зеленая подсветка)
    Дисплей 1602 с IIC адаптером и синей подсветкой Еще один вариант LCD1602 со впаянным I2C модулем Модуль адаптера Port IIC/I2C/TWI/SPI для экрана 1602, совместим с Ардуино
    Дисплей с RGB-подсветкой! LCD 16×2 + keypad +Buzzer Shield for Arduino Шилд для Ардуино с кнопками и экраном LCD1602 LCD 1602 LCD дисплей для 3D принтера (Smart Controller for RAMPS 1.4, Text LCD 20×4), модулем кардридера SD и MicroSD-

    Описание протокола I2C

    Прежде чем обсуждать подключение дисплея к ардуино через i2c-переходник, давайте вкратце поговорим о самом протоколе i2C.

    I2C / IIC (Inter-Integrated Circuit) – это протокол, изначально создававшийся для связи интегральных микросхем внутри электронного устройства. Разработка принадлежит фирме Philips. В основе i2c протокола является использование 8-битной шины, которая нужна для связи блоков в управляющей электронике, и системе адресации, благодаря которой можно общаться по одним и тем же проводам с несколькими устройствами. Мы просто передаем данные то одному, то другому устройству, добавляя к пакетам данных идентификатор нужного элемента.

    Самая простая схема I2C может содержать одно ведущее устройство (чаще всего это микроконтроллер Ардуино) и несколько ведомых (например, дисплей LCD). Каждое устройство имеет адрес в диапазоне от 7 до 127. Двух устройств с одинаковым адресом в одной схеме быть не должно.

    Плата Arduino поддерживает i2c на аппаратном уровне. Вы можете использовать пины A4 и A5 для подключения устройств по данному протоколу.

    В работе I2C можно выделить несколько преимуществ:

    • Для работы требуется всего 2 линии – SDA (линия данных) и SCL (линия синхронизации).
    • Подключение большого количества ведущих приборов.
    • Уменьшение времени разработки.
    • Для управления всем набором устройств требуется только один микроконтроллер.
    • Возможное число подключаемых микросхем к одной шине ограничивается только предельной емкостью.
    • Высокая степень сохранности данных из-за специального фильтра подавляющего всплески, встроенного в схемы.
    • Простая процедура диагностики возникающих сбоев, быстрая отладка неисправностей.
    • Шина уже интегрирована в саму Arduino, поэтому не нужно разрабатывать дополнительно шинный интерфейс.

    Недостатки:

    • Существует емкостное ограничение на линии – 400 пФ.
    • Трудное программирование контроллера I2C, если на шине имеется несколько различных устройств.
    • При большом количестве устройств возникает трудности локализации сбоя, если одно из них ошибочно устанавливает состояние низкого уровня.

    Модуль i2c для LCD 1602 Arduino

    Самый быстрый и удобный способ использования i2c дисплея в ардуино – это покупка готового экрана со встроенной поддержкой протокола. Но таких экранов не очень много истоят они не дешево. А вот разнообразных стандартных экранов выпущено уже огромное количество. Поэтому самым доступным и популярным сегодня вариантом является покупка и использование отдельного I2C модуля – переходника, который выглядит вот так:

    С одной стороны модуля мы видим выводы i2c – земля, питание и 2 для передачи данных. С другой переходника видим разъемы внешнего питания. И, естественно, на плате есть множество ножек, с помощью которых модуль припаивается к стандартным выводам экрана.


    Для подключения к плате ардуино используются i2c выходы. Если нужно, подключаем внешнее питание для подстветки. С помощью встроенного подстроечного резистора мы можем настроить настраиваемые значения контрастности J

    На рынке можно встретить LCD 1602 модули с уже припаянными переходниками, их использование максимально упощено. Если вы купили отдельный переходник, нужно будет предварительно припаять его к модулю.

    Подключение ЖК экрана к Ардуино по I2C

    Для подключения необходимы сама плата Ардуино, дисплей, макетная плата, соединительные провода и потенциометр.

    Если вы используете специальный отдельный i2c переходник, то нужно сначала припаять его к модулю экрана. Ошибиться там трудно, можете руководствоваться такой схемой.


    Жидкокристаллический монитор с поддержкой i2c подключается к плате при помощи четырех проводов – два провода для данных, два провода для питания.

    • Вывод GND подключается к GND на плате.
    • Вывод VCC – на 5V.
    • SCL подключается к пину A5.
    • SDA подключается к пину A.

    И это все! Никаких паутин проводов, в которых очень легко запутаться. При этом всю сложность реализации i2C протокола мы можем просто доверить библиотекам.

    Библиотеки для работы с i2c LCD дисплеем

    Для взаимодействие Arduino c LCD 1602 по шине I2C вам потребуются как минимум две библиотеки:

    • Библиотека Wire.h для работы с I2C уже имеется в стандартной программе Arduino IDE.
    • Библиотека LiquidCrystal_I2C.h, которая включает в себя большое разнообразие команд для управления монитором по шине I2C и позволяет сделать скетч проще и короче. Нужно дополнительно установить библиотеку После подключения дисплея нужно дополнительно установить библиотеку LiquidCrystal_I2C.h

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

    #include #include // Подключение библиотеки //#include // Подключение альтернативной библиотеки LiquidCrystal_I2C lcd(0x27,16,2); // Указываем I2C адрес (наиболее распространенное значение), а также параметры экрана (в случае LCD 1602 - 2 строки по 16 символов в каждой //LiquidCrystal_PCF8574 lcd(0x27); // Вариант для библиотеки PCF8574 void setup() { lcd.init(); // Инициализация дисплея lcd.backlight(); // Подключение подсветки lcd.setCursor(0,0); // Установка курсора в начало первой строки lcd.print("Hello"); // Набор текста на первой строке lcd.setCursor(0,1); // Установка курсора в начало второй строки lcd.print("ArduinoMaster"); // Набор текста на второй строке } void loop() { }

    Описание функций и методов библиотеки LiquidCrystal_I2C:

    • home() и clear() – первая функция позволяет вернуть курсор в начало экрана, вторая тоже, но при этом удаляет все, что было на мониторе до этого.
    • write(ch) – позволяет вывести одиночный символ ch на экран.
    • cursor() и noCursor() – показывает/скрывает курсор на экране.
    • blink() и noBlink() – курсор мигает/не мигает (если до этого было включено его отображение).
    • display() и noDisplay() – позволяет подключить/отключить дисплей.
    • scrollDisplayLeft() и scrollDisplayRight() – прокручивает экран на один знак влево/вправо.
    • autoscroll() и noAutoscroll() – позволяет включить/выключить режим автопрокручивания. В этом режиме каждый новый символ записывается в одном и том же месте, вытесняя ранее написанное на экране.
    • leftToRight() и rightToLeft() – Установка направление выводимого текста – слева направо или справа налево.
    • createChar(ch, bitmap) – создает символ с кодом ch (0 – 7), используя массив битовых масок bitmap для создания черных и белых точек.

    Альтернативная библиотека для работы с i2c дисплеем

    В некоторых случаях при использовании указанной библиотеки с устройствами, оснащенными контроллерами PCF8574 могут возникать ошибки. В этом случае в качестве альтернативы можно предложить библиотеку LiquidCrystal_PCF8574.h. Она расширяет LiquidCrystal_I2C, поэтому проблем с ее использованием быть не должно.

    Проблемы подключения i2c lcd дисплея

    Если после загрузки скетча у вас не появилось никакой надписи на дисплее, попробуйте выполнить следующие действия.

    Во-первых, можно увеличить или уменьшить контрастность монитора. Часто символы просто не видны из-за режима контрастности и подсветки.

    Если это не помогло, то проверьте правильность подключения контактов, подключено ли питание подсветки. Если вы использовали отдельный i2c переходник, то проверьте еще раз качество пайки контактов.

    Другой часто встречающейся причиной отсутствия текста на экране может стать неправильный i2c адрес. Попробуйте сперва поменять в скетче адрес устройства с 0x27 0x20 или на 0x3F. У разных производителей могут быть зашиты разные адреса по умолчанию. Если и это не помогло, можете запустить скетч i2c сканера, который просматривает все подключенные устройства и определяет их адрес методом перебора. Пример скетча i2c сканера .

    Если экран все еще останется нерабочим, попробуйте отпаять переходник и подключить LCD обычным образом.

    Заключение

    В этой статье мы рассмотрели основные вопросы использования LCD экрана в сложных проектах ардуино, когда нам нужно экономить свободные пины на плате. Простой и недорогой переходник i2c позволит подключить LCD экран 1602, занимая всего 2 аналоговых пина. Во многих ситуациях это может быть очень важным. Плата за удобство – необходимость в использовании дополнительного модуля – конвертера и библиотеки. На наш взгляд, совсем не высокая цена за удобство и мы крайне рекомендуем использовать эту возможность в проектах.

    © 2024 dhmoscow.ru - Компьютер надо изучать