Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
Глава 13. Интерфейс ТW/ (12С) и его применение 345 ЗАМЕТКИ НА полях Это надо иметь в виду при подключении готовых модулей с 1 2 С-интерфейсом - они обычно имеют встроенные «подтягивающие» резисторы в пределах 4, 7-1 0 кОм , при чем чаще встречается сопротивление, равное нижнему пределу 4,7 кОм . И подключе ние более трех модулей к одной шине не рекомендуется . Обычно более трех и не требуется , но об этом надо помнить и стараться вместо готовых модулей (например, часов или каких-нибудь датчиков) устанавливать соответствующую «голую» микро схему, что обычно и удобнее, и существенно дешевле. Обратите внимание, что все устройства в этом случае обязаны иметь выход с «от крытым коллектором», а привязка к шине питания обеспечивается парой этих са мых внешних резисторов . Как мы знаем, выходы портов АVR построены иначе - по симметричной КМОП-схеме с третьим состоянием. Чтобы обеспечить совмес тимость с «открытым коллектором» и в программной имитации 1 2 С, и в аппаратном TWI предусмотрен хитрый прием : состояние «разрыва» (т. е. выключенного тран зистора на выходе) имитируется установкой выхода в третье состояние, т. е. факти чески - в режим работы вывода порта на вход, а включенное состояние - уста новкой вывода порта на выход и при этом обязательно в состояние логического нуля. ЗАМЕТКИ НА полях При такой постановке дела в качестве «подтягивающих» использовать встроенные резисторы портов неудобно - приходится каждый раз при переключении на вход сле дить за их подключением через регистр данных PORT х. Кроме того , номинал встроен ных «подтягивающих» резисторов чересчур велик и годится только для самых мед ленных скоростей обмена. Потому в схемах с интерфейсом 1 2 С принято всегда ставить внешние «подтягивающие» резисторы . Нужно только не забывать о том , что при пере ходе в «спящий» режим выводы , подсоединенные к этим резисторам, нельзя остав лять в состоянии выхода с логическим нулем . Вообще-то сам протокол 1 2 С такого не позволяет (о чем далее) , но лишний раз убедиться в этом никогда не вредно. Чтобы несколько соединенных по интерфейсу I 2 c устройств отличались друг от друга, каждое из них обязано иметь индивидуальный адрес . Он задается 7-битовым кодом (восьмой - младший - бит байта адреса служит для других целей, как мы увидим далее), потому всего таких устройств на одной линии может быть 1 27 . Этот адрес обычно задает изготовитель (в некоторых случаях его можно изменить про граммно или внешними соединениями). За право присвоения индивидуального ад реса изготовитель, возможно, по сей день платит лицензионные отчисления фирме Phi l ips - так или иначе, но найти два разных устройства с одинаковыми адресами мне не удалось. В самом АVR он, разумеется, задается программно, но для наших целей этого не потребуется, т. к. «мастер» (МК) у нас один, и «ведомые» устройст ва не будут к нему обращаться . Типовой вариант обмена информацией по интерфейсу I 2 c показан на рис . 1 3 . 2 . Кратко расшифруем эту диаграмму. Любой сеанс передачи по протоколу I 2 c начи нается с состояния линии, именуемого START (когда сигнал на линии SDA меняет ся с логической 1 на логический О при высоком уровне на линии SCL). START мо жет выдаваться неоднократно - тогда он называется «повторный старт». Заканчи вается сеанс сигналом STOP (состояние линии SDA меняется с логического О на
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==