Помогите с I2C сенсорами!

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем <Lame>, 19 янв 2013.

  1. <Lame>

    <Lame> Гик

    Здравствуйте дамы и господа, граждане и гражданки, девочки, и не девочки, мальчики, мужики, деды и бабки.:D

    Вобщем с приветом все!
    Тут такая проблема-стал счастливым обладателем трёх i2c штуковин одновременно, а именно: 3-axis digital compass(Honeywell HMC5883L), 3-axis digital gyro(ITG3200), barometer(BMP085 от bosch). Куплено всё в родной амперке. Вопрос-а какие slave адреса имеют все эти три сенсора? Заранее спасибо.
     
  2. Lizard_2k1

    Lizard_2k1 Нерд

    что подразумевается под slave номер - пин куда слать адрес или сам адрес?
     
  3. <Lame>

    <Lame> Гик

    Адрес
     
  4. Lizard_2k1

    Lizard_2k1 Нерд

    Как я уже ответил в соседней ветке:
    ITG3200 I2C address = 110-1000 | 110-1001
    последний бит 0|1 определяется pin Ado (num 9)
    Взято из: http://garden.seeedstudio.com/images/a/a9/ITG-3200.pdf

    Для HMC5883L
    The default (factory) 8-bit slave address is 0x3C for write operations, or 0x3D for read operations
    (0011-1100 и 0011-1101 соотв)
    Взято из http://files.amperka.ru/datasheets/HMC5883L.pdf

    Для BMP085
    I2C address = 1110-1110|1110-1111
    последний бит 0|1 определяет режим чтения/записи
    Взято из: http://mkpochtoi.narod.ru/BMP085_ds.pdf
     
    nailxx нравится это.
  5. Vir

    Vir Гик

    Я так понимаю реально подключить все 3 сенсора к одному I2C выходу на Arduino? Как это правильно сделать? Можно ли VCC и GND на каждом разбросать по разным портам (у меня на Mega IO Shield их много), а SDL и SDA спаять между с собой?
     
  6. <Lame>

    <Lame> Гик

    Отличительные особенности i2c:
    • Двунаправленный обмен по двум линиям
    • Высокая скорость обмена до 100 кбит и выше
    • Возможность адресации до 128 устройств
    • Простота программной реализации «Master»-абонента
    • Временная независимость процесса передачи
    Обратите внимание на кол-во устройств, которое можно адресовать.
    Тоесть к одной i2c шине от одного master устройства можно подключить до 128 устройств одновременно, и последовательно обращаться к каждому из них по одной трёхпроводной(SDA, SCL, GND) шине, а вы ещё удивляетесь, что оказывается можно подключить 3 сенсора по одной шине.
     
  7. Vir

    Vir Гик

    Не, то что подключить несколько можно, я ещё из уроков Джереми Блюма (или как там его?) узнал. Вопрос в том, если я просто спаяю SDL и SDA от двух устройств и воткну, будут ли они корректно работать, или надо ещё что-то дополнительно сделать...
     
  8. <Lame>

    <Lame> Гик

    Именно так и надо. Вы логически подумайте, это же то же самое, что и последовательно подключить, точнее это и есть оно!
     
  9. Lizard_2k1

    Lizard_2k1 Нерд

    SDL от первого с SDL от второго спаять вместе можно
    SDL от первого с SDA от первого нет.
    Спаянные(соединенные,скрепленные) вместе одноименные контакты как раз и представляют собой шину.
     
  10. <Lame>

    <Lame> Гик

    Я об этом и говорю.
     
  11. Lizard_2k1

    Lizard_2k1 Нерд

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

    Vir Гик

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

    sochicity Нерд

    А что делать когда несколько одинаковых устройств и адрес одинаковый? Как их можно различить?
    Например из примера Джереми TC74A0-3.3VCT 1001 000 Если я их несколько штук навесить захочу?

    П.С. после примера Джереми посмотрел в даташит. Там адрес 1001 000, а подключение производится по ID 72
    Я не сразу понял откуда это 72 взялось. Может кому поможет: открываем Windows калькулятор переводим в режим программист, в BIN режиме вводим адрес и нажимаешь перевести в DEC получим 72
     
  14. roggedhorse

    roggedhorse Оракул

    Посмотрите тут
    http://www.pololu.com/catalog/product/1268
    на рисунке Schematic Diagram
    как вешаются на шину родственные вашим устройства. Сразу все станет понятно
     
    sochicity нравится это.
  15. roggedhorse

    roggedhorse Оракул

    Обычно, когда производитель предполагает, что несколько одинаковых устройств сядут на шину, то в чипе предусматриваются дополнительные пины, отвечающие за выбор адреса. В таком случае фактический адрес устройства выбирается путем заземления или подтяжки этих пинов. Как правило это описано в даташите/
    Например, вот здесь
    http://www.atmel.com/Images/doc8734.pdf
    есть ноги A0-A2 для этих целей
     
    sochicity нравится это.
  16. sochicity

    sochicity Нерд

    Я только начал разбираться, поэтому пока каша в голове, пытаюсь разложить все по полочкам. Благодарю, но я не про родственные, а одинаковые, с одинаковым адресом. Как прочитал на зарубежном форуме: Normally, if manufacture has defined that I2C slave-address; then they may produce same sensors with several I2C slave-addresses.

    This will enable to connect several sensors (devices) to a single I2C. When you order, you should select these sensors to have different I2C addresses.

    Как понимаю из сказанного, два одинаковых датчика с одинаковым адресом на одну i2c шину не повесить.
     
  17. sochicity

    sochicity Нерд

    СПАСИБО ОГРОМНОЕ! Теперь, что-то становится понятным.
     
  18. roggedhorse

    roggedhorse Оракул

    Всегда первым делом отыщите datasheet на чип/сенсор.
    Прочтите первые 2 страницы.
    Как правило там вся необходимая информация имеется (особенно в таблице Pin Configuration)

    Если в I2C чипе/сенсоре нет Address select pins то, конечно, сделать такое вам не удастся без бубна и танцев :)
     
  19. Citrus

    Citrus Нерд

    по существу заданного вопроса посоветую прочитать вот эту ветку форума =)
    вырываю из контекста...
     
    sochicity нравится это.
  20. sochicity

    sochicity Нерд

    Спасибо, братцы. А то вообще чем-то страшным эта I2c казалась. А адрес после префикса задаем припаиванием А выводов к земле (0) или к + (1)? Но ведь не у всех устройств есть такие А выводы,без них получается только одно устройство можно будет повесить.

    Подскажите еще как 7 бит переводить в адрес типа 0x50
    Как понимаю именно через такой адрес нужно обращаться к датчику