Шина i2c в avr

Опыт нашей предыдущей работы с микроконтроллерами AVR показал то, что мы уже многому научились, в том числе общаться с внешними устройствами типа ПК. Теперь, я думаю, все понимают, что этого недостаточно. Есть масса устройств и датчиков, которые нам хочется подключить к микроконтроллера и, мало того, ещё ими и поуправлять, забрать у них какие-то данные. Только данные девайзы подключаются к МК с помощью проводов и существует несколько видов подключений. Один из таких видов – шина I2C. Данный интерфейс является авторской разработкой компании Phillips и поэтому Atmel, чтобы не нарушать авторские права, немного изменила наименование данной шины и назвала её TWI (Two-wire Serial Interface).

Вот мы сегодня и заёмёмся изучением данного интерфейса, а также в данном уроке мы попробуем его как-то и использовать, что-то к нему подключить и с этим чем-то по общаться под интерфейсу TWI.

Как мы уже поняли, данный интерфейс предаёт данные по проводам. Причем именно по двум проводам

Видео:AVR 47# Программный I2CСкачать

AVR 47# Программный I2C

Шина i2c в avr

Как мы видим из данной блок-схемы, у нас есть два провода или контакта – SDA и SCL, подсоединённые к контроллеру к его соответствующим ножкам, а затем к этим проводам мы ещё подключаем какое-нибудь устройство или несколько устройств. Теоретически мы можем подключить до 127 устройств, впоследствии мы поймём, почему именно столько. Ножка SDA отвечает за передачу и приём данных по данной шине, а ножка SCL – это ножка тактирования, таким образом шина I2C является синхронной, что увеличивает стабильность и гарантированность передачи данных по ней. Также в данной блок-схеме мы наблюдаем то, что ещё к данным ножкам необходимо подтянуть резисторы на шину питания, причём как правило в каких-то модулях или устройствах данные резисторы уже подтянуты, и. если мы подключим их несколько, то у нас получится ряд параллельно подключенных подтягивающих резисторов, что будет очень нехорошо и придется оставить их в каком-то одном усторйстве, а в других выпаять. Всё это происходит потому, что есть ограничение на номинал данных резисторов в зависимости от определенных условия

Шина i2c в avr

Как показала практика, данные резисторы не должны быть сопротивлением более 10 килоом и менее 4,7 килоом.

Видео:Лекция 308. Шина I2CСкачать

Лекция 308.  Шина I2C

Также, само собой, сигналы должны быть толерантными к логическим уровням нашего МК, поэтому подключенные устройства должны быть соответствующим образом запитаны, а также общий провод устройств и контроллера также должен быть объединён.

Хочу подчеркнуть, что данный интерфейс в микроконтроллрах AVR реализован на аппаратном уровне. Можно также организовывать его и программным способом, путём включение в определённое время двух любых ножек портов в определенные логические состояния, но само собой, аппаратная организация всегда лучше по всем показателям. Программная реализация как правило используется, если не хватит одной шины, но как правило хватает, так как мы выше уже видели, что устройств можно к одной шине подключить несколько. Таким образом, мы будем рассматривать именно аппаратную реализацию – на уровне регистров контроллера.

В сдедующей блок-схеме мы видим следующие регистры интерфейса TWI в контроллере Atmega8

Шина i2c в avr

Видео:Урок №7. Подключаем шину I2C в микроконтроллере Atmega8.Скачать

Урок №7. Подключаем  шину I2C в микроконтроллере Atmega8.

Давайте с ними кратко ознакомимся.

Регистр TWBR – это регистр, в котором мы устанавливаем значения для обеспечения определённой скорости шины. Устройства, которые мы подключаем по I2C требуют определённой скорости ну или определённого диапазона скоростей. Расчитывается эта скорость или битрейт по следующей формуле

Шина i2c в avr

Как мы видим, в данной формуле для расчета частоты шины участвует частота тактирования контроллера, значение регистра TWBR, а также значение TWPS, судя по формуле представляющий собой предделитель, то есть, чем он больше, тем больше будет коэффициент деления, так как в степерь значения данного регистра мы возводим цифру 4.

Видео:AVR Урок 12. I2C.Скачать

AVR Урок 12. I2C.

Причем TWPS – это не отдельный регистр, а совокупность всего лишь двух битов статусного регистра TWSR, в котором помимо этих битов есть ещё и другие, посредством которых мы будем отслеживать определенные состояния или ошибки обмена данными. Есть перечень кодов статуса, по которым мы и будем узнавать, удачно ли прошла команда или что-то не так.

Также само собой существует ещё и управляющий регистр TWCR, с помощью установки в соответствующее состояния битов которого мы будем определённым образом настраивать нашу шину.

Есть ещё адресный регистр TWAR, с помощью которого, если мы настраиваем контроллер ведущим устройством, мы передаем ведомому устройству 7-битный адрес (отсюда и 127 максимально устройств на шине), по которому-то как раз и будет обращение именно к определённому устройству из всех навешанных на наши два провода. А восьмой бит к адресу будет добавляться для того, чтобы передать, читаем мы данные или пишем. А если у нас контроллер будет настроен как ведомое устройство, то в данном регистре мы будем получать от ведущего адрес и сравнивать его с определённым, чтобы понять, обратился ведущий именно к нам или к кому-то другому.

Ну, само собой, есть и регистр данных, в который мы в случае ведущего устройства записываем данные для передачи по шине, а в случае ведомого считываем пришедшие по шине данные.

Видео:AVR 48# Аппаратный I2CСкачать

AVR 48# Аппаратный I2C


🎥 Видео

Аппаратная реализация шины I2C на AtmegaСкачать

Аппаратная реализация шины I2C на Atmega

Введение в шину I2CСкачать

Введение в шину I2C

Программирование МК AVR. Урок 16. Интерфейс TWI (I2C). Часть 1Скачать

Программирование МК AVR. Урок 16. Интерфейс TWI (I2C). Часть 1

Программирование МК AVR. Урок 16. Интерфейс TWI (I2C). Часть 6Скачать

Программирование МК AVR. Урок 16. Интерфейс TWI (I2C). Часть 6

Программирование МК AVR. Урок 16. Интерфейс TWI (I2C). Часть 3Скачать

Программирование МК AVR. Урок 16. Интерфейс TWI (I2C). Часть 3

AVR 46# I2CСкачать

AVR 46# I2C

Что такое I2C ??? Подключаем GY-521 и Oled 96*16 к STM 32Скачать

Что такое I2C ??? Подключаем GY-521 и Oled 96*16 к STM 32

Шина I2C.Скачать

Шина I2C.

Урок 24. Узнаём адреса устройств на шине I2CСкачать

Урок 24. Узнаём адреса устройств на шине I2C

Подключение нескольких устройств, датчиков по I2C (АйТуСи) шинеСкачать

Подключение нескольких устройств, датчиков по I2C (АйТуСи) шине

AVR Ассемблер. Урок 13. TWI(I2C). AVR Assembler. Lesson 13. TWI(I2C).Скачать

AVR Ассемблер. Урок 13. TWI(I2C). AVR Assembler. Lesson 13. TWI(I2C).

AvrStudio 4. Библиотека для AVR. Модуль для I2C или TWIСкачать

AvrStudio 4. Библиотека для AVR. Модуль для I2C или TWI

Программирование МК AVR. Урок 16. Интерфейс TWI (I2C). Часть 4Скачать

Программирование МК AVR. Урок 16. Интерфейс TWI (I2C). Часть 4
Поделиться или сохранить к себе:
Технарь знаток