- 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-устройствами. При этом
- 174 -
Рис. 8.4. Схема подключения датчика температуры использовать А4 и AS как аналоговые входы нельзя, потому что они заняты обменом с устройствами I 2C.
8.3.2. Анализ технического описания датчика
Теперь нужно написать программу, которая определяет действия Arduino для получения данных от I 2 С-датчика температуры. С помощью библиотеки Wire сделать это довольно легко. Чтобы не допустить ошибки, следует внимательно прочесть справочную информацию об алгоритме связи, который поддерживает именно этот чип. Давайте проанализируем протокол взаимодействия, представленный в таблицах и на графиках, показанных на рис. 8.5 и 8.6.
На рис. 8.6 показано, как осуществлять чтение и запись данных для датчика ТС74.
Микросхема имеет два регистра: в первом хранится значение текущей температуры
- 175 -
рис. 8.5. Протокол обмена датчика ТС74
в градусах Цельсия, во втором - информация о конфигурации чипа (включая режим ожидания и режим передачи данных). Это ясно из табл. 4.1 на рис. 8.6. Нет необходимости вникать в юоансы конфигурации, требуется только получить значение температуры от устройства. В табл. 4.3 и 4.4 на рис. 8.6 показано, как хранится информация о температуре внутри 8-разрядного регистра.
В секции Write Byte fonnat на рис. 8.5 показано, как прочитать значение температуры из ТС74:
• послать адрес устройства в режиме записи и выставить 0, чтобы указать, что нужно перейти в режим чтения из регистра данных;
• отправить на адрес устройства команду запроса (1 байт) на чтение информации от устройства;
• подождать прихода всех 8 битов информации о значении температуры.
Теперь становится понятно, как работать с подобными I 2C-устройствами. Если вы еще не все уяснили, поищите в Интернете примеры программ подключения Arduino
Читать дальше