I2C адресация. Чайниковский вопрос.

HiMem
Offline
Зарегистрирован: 14.04.2012

Пока почта России на медленных улитках везет Ардуино Уно, решил почитать теорию и остались вопросы по аппаратной адресации датчиков I2C.

1. Итак, в видео-лекциях на амперке.ру говорится "возьмет термодатчик, аппаратный адрес у него 72, подключим и считаем данные". Как мы узнали, что у него адрес 72, а не другой?

2. Датчики I2C подключаются "параллельно" на 2 провода. В моем проекте будет 10 термодатчиков. Не получится ли так, что купив пригоршню термодатчиков, они все окажутся с одинаковым прошитым адресом? Как этого избежать? Или я что-то не понимаю?

pumv
Offline
Зарегистрирован: 15.03.2012

Термодатчики, по крайней мере DS18B20 имеют иникальный номер во всей линейке и выпусках. В самом серийнике записан также его тип. Так что с этим проблем не будет.

Тут другое замечание. Уникальность подразумевает запоминание конкретных датчиков. Т.е. при запуске МС должен опросить всю цепочку и запомнить их серийники. При следующем старте - снова опрос.

И тут у меня самого возникает вопрос. Когда я расставлю датчики на местах, каждый серийник будет закреплен за конкретным местом. Потом, в случае необходимости один дачик меняем (или меняем их местами) и надо обновить схему в "голове" МС.

Существуют ли устоявшиеся готовые решения для этих случаев?

step962
Offline
Зарегистрирован: 23.05.2011

HiMem пишет:

1. Итак, в видео-лекциях на амперке.ру говорится "возьмет термодатчик, аппаратный адрес у него 72, подключим и считаем данные". Как мы узнали, что у него адрес 72, а не другой?

Взгляните на типичную схему подключения типичного I2C-устройства:

Кроме линий SCL и SDA, которые, собственно, и используются для обмена данными, вы увидите выводы A0...A3. В данном случае все они замкнуты на землю - микросхема сконфигурирована с адресом 000. Ничто не мешает вам любой из этих выводов бросить на + питания (сконфигурировать соответствующий бит адреса, как "1"). Как результат, в вашем распоряжении 8 разных адресов (от 000 до 111), т.е. вы можете подключить к I2C-шине до 8 микросхем.

А как же уверение в том, что I2C-шина может поддерживать до 128 устройств (при стандартной - 7-битной - адресации)? Тут все нормально - каждое из  I2C-устройств имеет зашитый в нее общий для всего семейства 4-битный адресный префикс. Например, открываем даташит на микросхему EEPROM-памяти 24AA64/24LC64 и узнаем, что для этого семейства префикс имеет вид "1010". Стало быть, адресное пространство для рассматриваемых микросхем - b01010000-b01010111 (0x50...0x57). Выбирайте любой из этих адресов - только следите за тем, чтобы выбранный для нового устройства адрес не конфликтовал с адресом уже подключенного к шине устройства.

В реальной жизни схема адресации может быть и посложнее, но, освоившись с ее простейшим (и самым распространенным) вариантом, в случае необходимости вы сможете дополнить свои знания и более сложными вариантами.

Цитата:

В моем проекте будет 10 термодатчиков

Исходя из вышеизложенного, на одну I2C-шину вы сможете подключить лишь 8 термодатчиков одного типа (если эти термодатчики, имея пины A0-A2, не имеют дополнительных - A3 и так далее до A7).

step962
Offline
Зарегистрирован: 23.05.2011

pumv пишет:

Термодатчики, по крайней мере DS18B20 имеют иникальный номер во всей линейке и выпусках. В самом серийнике записан также его тип. Так что с этим проблем не будет.

Это, а также все нижесказанное относится к 1-wire-устройством, что не есть аналог I2C.

HiMem
Offline
Зарегистрирован: 14.04.2012

step962 пишет:

Взгляните на типичную схему подключения типичного I2C-устройства:

Большое спасибо за очень подробный и понятный ответ!

Вообще-то я планировал купить термодатчики вроде DS2401 pdfserv.maxim-ic.com/en/ds/DS2401.pdf или DS18B20 datasheets.maxim-ic.com/en/ds/DS18B20.pdf. А, оказывается, 1-wire это не совсем I2C... В таком случае, мне понадобится только одна нога с Ардуино?

PS: Нашел термодатчики на aliexpress.com по 1 доллару при заказе 10-ти шт. и DHT-22 (заказать не успел, кончились). Может кто знает, где заказать дешевле/быстрее? У нас в Челябинске цены х5 и в наличии ничего нет ((

step962
Offline
Зарегистрирован: 23.05.2011

HiMem пишет:

 В таком случае, мне понадобится только одна нога с Ардуино?

В каком "таком"? I2C - SCL+SDA. 1-Wire - DQ.

Diemon
Offline
Зарегистрирован: 18.11.2011

HiMem пишет:

Может кто знает, где заказать дешевле/быстрее? У нас в Челябинске цены х5 и в наличии ничего нет ((

На ибее: 10 долларов 10 датчиков  DS18B20 www.ebay.com/itm/10PC-DS18B20-18B20-Thermometer-Temperature-Sensor-Dalla-/250896099812

Сенсоры DHT-22 www.ebay.com/sch/i.html

demon969
Offline
Зарегистрирован: 24.04.2012

А есть ли возможность подключить к UNO Serial LCD экран с помощью вот такой штуки http://www.ebay.com/itm/New-IIC-I2C-TWI-SP-I-Serial-Interface-Board-Modu...

а также часы реального времени и SD модуль ОДНОВРЕМЕННО? Если можно то как?

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Если нужно быстрее, то заказывайте в русских магазинах - срок от 1 до 2-х недель:

http://www.megachip.ru/item.php?item_id=716047

Но заметно дороже и нет бесплатной доставки :)

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

demon969 пишет:

А есть ли возможность подключить к UNO Serial LCD экран с помощью вот такой штуки http://www.ebay.com/itm/New-IIC-I2C-TWI-SP-I-Serial-Interface-Board-Modu...

а также часы реального времени и SD модуль ОДНОВРЕМЕННО? Если можно то как?

Масло масляное! Он же уже сериал! Этот модуль для того, чтобы из обычного делать сериал.

SD подключается по SPI, часы по I2C... какая проблема?

demon969
Offline
Зарегистрирован: 24.04.2012

Ну так как бы Serial LCD экран с переходником подключается к Analog In 4, а SCL (clock) к Analog In 5, и ту да же часы? Что то я запутался)

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

У них будут разные адреса - не волнуйтесь, заработает

demon969
Offline
Зарегистрирован: 24.04.2012

Вот бы кто нарисовал бы схемку как подключить два устройства на шину I2C одновременно и как их опрашивать (примерчик кода).

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

А чего тут рисовать? Подключаете параллельно (простой пример - тройник в розетке - каждый утюг в тройнике подключается параллельно остальным утюгам). Если на устройствах можно включать/выключать подтягивающие резисторы, то их оставить включенными только на самом удаленном устройстве. Примеры кода - от этих же устройств. С библиотеками идут примеры и в описаниях устройств часто идут примеры кода.