I2C адресация. Чайниковский вопрос.
- Войдите на сайт для отправки комментариев
Сб, 14/04/2012 - 13:22
Пока почта России на медленных улитках везет Ардуино Уно, решил почитать теорию и остались вопросы по аппаратной адресации датчиков I2C.
1. Итак, в видео-лекциях на амперке.ру говорится "возьмет термодатчик, аппаратный адрес у него 72, подключим и считаем данные". Как мы узнали, что у него адрес 72, а не другой?
2. Датчики I2C подключаются "параллельно" на 2 провода. В моем проекте будет 10 термодатчиков. Не получится ли так, что купив пригоршню термодатчиков, они все окажутся с одинаковым прошитым адресом? Как этого избежать? Или я что-то не понимаю?
Термодатчики, по крайней мере DS18B20 имеют иникальный номер во всей линейке и выпусках. В самом серийнике записан также его тип. Так что с этим проблем не будет.
Тут другое замечание. Уникальность подразумевает запоминание конкретных датчиков. Т.е. при запуске МС должен опросить всю цепочку и запомнить их серийники. При следующем старте - снова опрос.
И тут у меня самого возникает вопрос. Когда я расставлю датчики на местах, каждый серийник будет закреплен за конкретным местом. Потом, в случае необходимости один дачик меняем (или меняем их местами) и надо обновить схему в "голове" МС.
Существуют ли устоявшиеся готовые решения для этих случаев?
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).
Термодатчики, по крайней мере DS18B20 имеют иникальный номер во всей линейке и выпусках. В самом серийнике записан также его тип. Так что с этим проблем не будет.
Это, а также все нижесказанное относится к 1-wire-устройством, что не есть аналог I2C.
Взгляните на типичную схему подключения типичного 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 и в наличии ничего нет ((
В таком случае, мне понадобится только одна нога с Ардуино?
В каком "таком"? I2C - SCL+SDA. 1-Wire - DQ.
Может кто знает, где заказать дешевле/быстрее? У нас в Челябинске цены х5 и в наличии ничего нет ((
На ибее: 10 долларов 10 датчиков DS18B20 www.ebay.com/itm/10PC-DS18B20-18B20-Thermometer-Temperature-Sensor-Dalla-/250896099812
Сенсоры DHT-22 www.ebay.com/sch/i.html
А есть ли возможность подключить к UNO Serial LCD экран с помощью вот такой штуки http://www.ebay.com/itm/New-IIC-I2C-TWI-SP-I-Serial-Interface-Board-Modu...
а также часы реального времени и SD модуль ОДНОВРЕМЕННО? Если можно то как?
Если нужно быстрее, то заказывайте в русских магазинах - срок от 1 до 2-х недель:
http://www.megachip.ru/item.php?item_id=716047
Но заметно дороже и нет бесплатной доставки :)
А есть ли возможность подключить к UNO Serial LCD экран с помощью вот такой штуки http://www.ebay.com/itm/New-IIC-I2C-TWI-SP-I-Serial-Interface-Board-Modu...
а также часы реального времени и SD модуль ОДНОВРЕМЕННО? Если можно то как?
Масло масляное! Он же уже сериал! Этот модуль для того, чтобы из обычного делать сериал.
SD подключается по SPI, часы по I2C... какая проблема?
Ну так как бы Serial LCD экран с переходником подключается к Analog In 4, а SCL (clock) к Analog In 5, и ту да же часы? Что то я запутался)
У них будут разные адреса - не волнуйтесь, заработает
Вот бы кто нарисовал бы схемку как подключить два устройства на шину I2C одновременно и как их опрашивать (примерчик кода).
А чего тут рисовать? Подключаете параллельно (простой пример - тройник в розетке - каждый утюг в тройнике подключается параллельно остальным утюгам). Если на устройствах можно включать/выключать подтягивающие резисторы, то их оставить включенными только на самом удаленном устройстве. Примеры кода - от этих же устройств. С библиотеками идут примеры и в описаниях устройств часто идут примеры кода.