===== Интерфейсы. Шина I2C ===== В цифровой электронике очень широко применяются различные интерфейсы для обмена данными между устройствами и/или блоками одного устройства. Например, хорошо знакомый интерфейс USB применяется для связи компьютера с периферийным устройством. Интерфейс HDMI применяется для обмена данными между компьютером и монитором. Интерфейс RS485 применяется для обмена данными между устройствами промышленной автоматизации. Различных интерфейсов очень много. Интерфейсы различаются по назначению, скорости передачи данных. Они бывают последовательные и параллельные. Различаются они и топологией — количеством ведущих и ведомых устройств, их ролями в протоколе обмена. Интерфейсы нужны в первую очередь для стандартизации и унификации. Несколько различных производителей устройств, которые никогда не слышали о существовании друг друга, могут производить устройства, которые успешно работают вместе, благодаря тому, что поддерживают один и тот же стандартный интерфейс. Микроконтроллеры обычно включают в себя в качестве периферийных устройств контрóллеры различных интерфейсов. Мы будем использовать интерфейс I2C для работы с LCD дисплеем нашего конструктора. I2C — последовательная асимметричная шина для связи между интегральными схемами внутри электронных приборов. Использует две двунаправленные линии связи (SDA и SCL), применяется для соединения низкоскоростных периферийных компонентов с процессорами и микроконтроллерами (например, на материнских платах, во встраиваемых системах, в мобильных телефонах). Разработана фирмой Philips Semiconductors в начале 1980-х как простая 8-битная шина внутренней связи для создания управляющей электроники. Была рассчитана на частоту 100 кГц. Стандартизована в 1992 году, в первой версии к стандартному режиму 100 кбит/с добавлен скоростной режим 400 кбит/с (Fast-mode, Fm); за счёт 10-битной адресации становится возможным подключение на одну шину более 1000 устройств. Протокол обмена данными по шине I2C достаточно сложен, рассматривать его сейчас мы не будем. Для нас работа с ним будет заключаться в вызове функций стандартной библиотеки Python. [[https://ru.wikipedia.org/wiki/I²C|Подробнее о шине I2C]] Для нас важно то, что * для обмена данными шина I2C использует две линии связи, грубо говоря два провода * интерфейс подразумевает деление устройств на ведущих и ведомых * ведущее устройство может быть только одно, ведомых несколько * обменом управляет ведущее устройство * только ведущее устройство может быть инициатором обмена данными * для того, чтобы ведомые устройства поняли к кому из них обращается ведущий, используется адрессация. У каждого ведомого устройства есть свой адрес