Изучаем Arduino: инструметы и методы технического волшебства - [43]

Шрифт
Интервал

C требуется установка подтягивающих резисторов.


Рис. 8.1. Схема подключения устройств I>2C

8.2.1. Взаимодействие и идентификация устройств

Протокол I>2C позволяет нескольким ведомым устройствам соединяться по одной шине с одним ведущим устройством. Далее роль ведущего устройства (мастера) будет играть плата Arduino. Мастер шины отвечает за инициирование обмена. Ведомые устройства не могут инициировать обмен данных, они способны только отвечать на запросы, которые посылает ведущее устройство. Так как к одной линии подключено несколько ведомых устройств, принципиально важно, что устанавливать связь может только ведущее устройство. В противном случае, сразу несколько устройств могли одновременно пытаться отправить данные, что привело бы к искажениям.

Все команды и запросы, отправленные от мастера, принимаются всеми устройствами на шине. Каждое ведомое устройство имеет уникальный 7-битовый адрес (идентификационный номер, ID устройства). Когда ведущее устройство инициирует связь, оно передает идентификатор ведомого. Ведомые устройства реагируют на данные, передающиеся по шине, только тогда, когда они направлены в их адрес.

Адрес каждого устройства на шине I>2C должен быть уникальным. Некоторые устройства I>2C имеют настраиваемые адреса, а другие - фиксированный адрес, заданный производителем. При подключении к одной шине нескольких I>2C-устройств, необходимо чтобы у них были различные идентификаторы.

Датчики температуры обычно допускают перепрограммирование I>2C-адреса, поэтому на одной шине I>2C может быть несколько таких датчиков. Далее мы рассмот

- 172 -

рим датчик температуры ТС74. Из рис. 8.2 видно, что этот датчик может иметь несколько разных адресов. В примерах данной главы у датчика TC74A0-5.0VAT (исполнение ТО-220) I>2C-адрес задан как 1001000.

Рис. 8.2. Фрагмент технического описания датчика ТС74. расшифровка обозначения и варианты адресов I>2C

Поскольку выпускаются датчики температуры с восьмью различными идентификационными номерами, к одной шине I>2C можно подключить до восьми разных датчиков. Для написания программ для этих датчиков необходимо знать их ID, чтобы отправлять правильные команды.

В датчиках другого типа, например, AD7414 и AD7415 есть контакт (AS), который позволяет настроить адрес устройства I>2C. Взгляните на данные датчика AD7414 из документации (рис. 8.3).

Датчик AD7414 выпускается в четырех вариантах исполнения, с контактом AS и без него. Адрес устройства, снабженного контактом AS, зависит от состояния этого контакта: отключен, подключен к питанию или земле.

Table 4. 1 1 С Address Selection

Рис. 8.3. Фрагмент технического описания датчика AD7414. цоколевка и варианты адресов I>2C

- 173 -

8.2.2. Требования к оборудованию и подтягивающие резисторы

Из рис. 8.1 ясно, что типовая конфигурация шины I>2C требует наличия подтягивающих резисторов на линиях синхронизации и передачи данных. Номинал резисторов зависит от ведомых устройств, данные можно посмотреть в документации на эти устройства. Мы рекомендуем взять резисторы номиналом 4,7 кОм, - это стандартное значение, которое указано во многих справочниках.

8.3. Связь с датчиком температуры I2C

Организация обмена данными с устройством I>2C зависит от требований конкретного устройства. К счастью, наличие в Arduino библиотеки I>2C освобождает от необходимости программирования операций синхронизации процесса обмена. Далее мы рассмотрим организацию обмена данными с I>2C-датчиком температуры. Этот пример позволит в будущем легко осуществить обмен с другими устройствами I>2C.

Основные шаги для управления любым I>2C-устройством таковы:

• Мастер посылает стартовый бит.

• Мастер посылает 7-разрядный адрес ведомого устройства.

• Мастер устанавливает на шине данных "1" (чтение) или "0" (запись) в зависимости от того, хочет ли он отправить данные в ведомое устройство или получить данные от него.

• Ведомое устройство выставляет бит АСК (логический уровень низкий).

• В режиме записи, мастер передает один байт информации, ведомое устройство выдает бит АСК. В режиме чтения, мастер получает один байт и посылает бит АСК в ведомое после каждого байта.

• Когда связь завершена, мастер посылает стоп-бит.

8.3.1. Сборка схемы устройства

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

Обратите внимание, что выводы SDA и SCL датчика подключены к контактам А4 и

AS платы. Напомним, что SDA и SCL - это линия передачи данных и линия синхронизации, соответственно. Контакты Arduino А4 и AS мультиплексируются между аналого-цифровым преобразователем (АЦП) и аппаратным интерфейсом I>2C.

При инициализации библиотеки Wire эти контакты подключены к контроллеру I>2C

в ATmega, обеспечивая взаимодействие объекта Wire с I>2C-устройствами. При этом