В этой главе вы познакомились со всеми аспектами использования памяти и хранения данных в Arduino. В следующих главах мы займемся исследованием приемов программирования различных последовательных интерфейсов в Arduino, начав с шины I2C.
7. Интерфейс I2C
Интерфейсная шина I2C (произносится «и квадрат си») — стандартный способ подключения периферийных устройств к микроконтроллерам. Иногда интерфейс I2C называют двухпроводным интерфейсом (Two Wire Interface, TWI). Все платы Arduino имеют хотя бы один интерфейс I2C, к которому можно подключать широкий диапазон периферийных устройств. Некоторые из таких устройств представлены на рис. 7.1.
Все три устройства в верхнем ряду на рис. 7.1 являются модулями отображения информации, выпускаемыми компанией Adafruit. В нижнем ряду слева находится модуль УКВ-приемника TEA5767. Эти модули можно приобрести на сайте eBay или где-то в другом месте за несколько долларов. Приобретая модуль TEA5767, вы получаете полноценный приемник УКВ, который можно настроить на определенную частоту командами через интерфейс I2C. В центре находится модуль часов реального времени (Real-Time Clock, RTC), включающий микросхему обслуживания шины I2C и кварцевый резонатор, обеспечивающий высокую точность измерения времени. Установив текущие время и дату через интерфейс I2C, вы сможете в любой момент прочитать текущие время и дату через тот же интерфейс I2C. Этот модуль включает также литиевую батарейку с длительным сроком службы, обеспечивающую работу модуля даже в отсутствие электропитания от внешнего источника. Наконец, справа находится 16-канальный ШИМ/сервопривод, добавляющий к вашей плате Arduino 16 дополнительных аналоговых выходов.
Рис. 7.1. Устройства с интерфейсом I2C
Стандарт I2C определяется как стандарт шины, потому что допускает подключение множества устройств друг к другу. Например, если вы уже подключили дисплей к микроконтроллеру, к той же паре контактов на «ведущем» устройстве можно подключить целое множество «ведомых» устройств. Плата Arduino выступает в роли «ведущего» устройства, а все «ведомые» устройства имеют уникальные адреса, идентифицирующие устройства на шине.
На рис. 7.2 изображена возможная схема подключения к плате Arduino двух компонентов I2C: часов реального времени и модуля дисплея.
Через интерфейс I2C можно также соединить две платы Arduino и организовать обмен данными между ними. В этом случае одна из плат должна быть настроена как ведущее устройство, а другая — как ведомое.
Рис. 7.2. Arduino управляет двумя устройствами I2C
Аппаратная часть I2C
Электрически линии соединения интерфейса I2C могут действовать подобно цифровым выходам или входам (их также называют выводами
На разных моделях Arduino интерфейс I2C подключается к разным контактам. Например, в модели Uno используются контакты A4 и A5 — линии SDA и SCL соответственно, а в модели Leonardo используются контакты D2 и D3. (Подробнее о линиях SDA и SCL рассказывается в следующем разделе.) На обеих моделях линии SDA и SCL выводятся также на колодку, находящуюся рядом с контактом AREF (рис. 7.3).
В табл. 7.1 перечисляются наиболее распространенные модели платы Arduino и контакты, соответствующие интерфейсу I2C.
Рис. 7.3. Контакты I2C на плате Arduino Uno
Таблица 7.1. Контакты I2C в разных моделях Arduino
Модель
Контакты
Примечания
Uno
A4 (SDA) и A5 (SCL)
Контакты подписаны SCL и SDA и находятся рядом с контактом AREF. Эти линии интерфейса выводятся также на контакты A4 и A5
Leonardo
D2 (SDA) и D3 (SCL)
Контакты подписаны SCL и SDA и находятся рядом с контактом AREF. Эти линии интерфейса выводятся также на контакты D2 и D3
Mega2560
D20 (SDA) и D21 (SCL)
—
Due
D20 (SDA) и D21 (SCL)
Модель Due имеет вторую пару контактов I2C, подписанных SDA1 и SCL1
Протокол I2C