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

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

  1. roggedhorse

    roggedhorse Оракул

    Ответ на ваш вопрос опять же тут
    http://www.atmel.com/Images/doc8734.pdf
    на странице 9 в главе 7. Device Addressing


    P.S. Не забывайте про резисторы, когда подтягиваете к +
     
    sochicity нравится это.
  2. sochicity

    sochicity Нерд

    А где можно почитать как переводить 7 бит в понятный для ардуино адрес? В примере Джереми это было 72. 1001 000 BIN - 72 DEC Часто вижу адреса вида 0х50. Откуда их берут?
     
  3. roggedhorse

    roggedhorse Оракул

    Изучите код процедуры twi_readFrom из файла twi.c
    Обычно он лежит тут ...\libraries\Wire\utility\
    Обратите внимание на фрагмент
    Код (Text):
        // build sla+w, slave device address + w bit
        twi_slarw = TW_READ;
        twi_slarw |= address << 1;
     
    и на twi_writeTo фрагмент
    Код (Text):
      // build sla+w, slave device address + w bit
      twi_slarw = TW_WRITE;
      twi_slarw |= address << 1;
     

    Значения TW_WRITE и TW_READ определены в файле twi.h

    Это ответ на вопрос, откуда берется адрес

    Поясню:
    обычно в datasheet указывают адрес так SAD[7:1] и, например, его значение 0011001
    То есть всего 7 бит.
    Чтобы читать из устройства, надо сдвинуть адрес влево и в нулевой бит записать флаг R/W. Для чтения R/W равен 1, для записи = 0.
    Получается, что когда устройство имеет адрес 0011001 (0х19)
    то читая из него мы передаем 0011001 1 (0х33)
    а записывая в него передаем 0011001 0 (0х32)
     
  4. sochicity

    sochicity Нерд

    Благодарю за пояснение, единственное, что осталось непонятным это сама система перевода
    как 0011001 переведено в (0х19),а 00110011 в (0х33)
    понимаю, что для Вас это очевидно...

    Ну и если внесете ясность почему в примере Джереми адрес 72, а не вида 0х32 0х33, то вообще громадное спасибо добрый человек.
     
  5. roggedhorse

    roggedhorse Оракул

    Например, зашитый производителем внутрь чипа адрес устройства
    0011001 (двоичный) или 0x19 (Hex)
    Чтобы читать из устройства, нужно в шину I2C передать адрес устройства и команду "читать"
    Адрес устройства 0011001 - 7 старших бит
    "Команда" помещается в младший, нулевой бит. Команда "читать" - 1.
    Соответственно, в шину передается адрес 0011001 и 1 - всего 8 бит.

    Посему вначале мы формируем байт
    1) b = 0011001 (0x19 Hex) - это адрес сенсора из даташита, записанный в формате SAD[7:1] (SAD - Slave ADdress, MSB 7:1)
    2) сдвигаем его на 1 разряд влево и получаем 00110010 (0x32 Hex)
    3) записываем 1 в младший бит и получаем 00110011 (0x33 Hex)
    4) передаем этот байт в шину

    Все устройства слушают шину. Чей адрес, тот и водит :)
     
    Citrus и sochicity нравится это.
  6. roggedhorse

    roggedhorse Оракул

    Дайте ссылку на видео
     
  7. sochicity

    sochicity Нерд

    Благодарю за развернутый ответ. Двоичный адрес из datasheet переводим и общаемся уже по hex
    Только почему Джереми в своем примере использовал DEC адрес 72 (для 1001 000 по datasheet для TC74A0) Почему не HEX?

     
  8. roggedhorse

    roggedhorse Оракул

    Открываем даташит на термосенсор TC74 (http://ww1.microchip.com/downloads/en/devicedoc/21462c.pdf)
    Идем на страницу 13 PRODUCT IDENTIFICATION SYSTEM
    смотрим во вторую таблицу, так как сенсор Джеремни в корпусе TO-220
    и на нем маркировка TC74A0
    Согласной второй таблице (а она как раз про корпус TO-220) Address Options для сенсора Джеремни равно А0.
    Смотрим Default Address для опции А0:
    В первой колонке A0 = 1001 000 (двоичный адрес)
    1001000 B = 72 DEC = 0x48 HEX (конгруэнтны)

    Джереми пишет в примере адрес в десятичном формате

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

    Полагаю, теперь у вас не осталось вопросов :)
     
    sochicity нравится это.
  9. sochicity

    sochicity Нерд

    Нет теперь не осталось. Оказывается можно и в DEC адреса использовать и в HEX. У меня из-за этого некоторая путаница возникла. Кинь в личку, номер телефона или яндекс кошелек или что там удобно. Отблагодарю.
     
  10. roggedhorse

    roggedhorse Оракул

    спасибо, но вы меня уже отблагодарили
     
    sochicity нравится это.
  11. sochicity

    sochicity Нерд

    Правда, я такого объяснения для нубов, не знающих с чего начать, нигде не смог найти. Думаю, что кому-нибудь еще обязательно поможет.