Raspberry Pi 3 + Troyka Cap + Arduino Leonardo via i2c

Тема в разделе "Raspberry Pi", создана пользователем ostin654, 9 фев 2019.

  1. ostin654

    ostin654 Нуб

    Добрый день!
    Есть малина, на ней сверху Troyka Cap. Пытаюсь соединить их с arduino leonardo через i2c.
    Малина не видио ардуинку. Думал, что проблема в Cap или в чем-то еще, пробовал подключать датчик BMP280 (просто как тестовое устройство i2c), итог:
    0) малина видит Cap по i2c
    1) малина видит BMP280 по i2c
    2) ардуино видит BMP280 по i2c
    3) 2 ардуины видят друг друга по i2c
    4) малина НЕ видио ардуину по i2c
    5) малина БЕЗ Cap тоже НЕ видит ардуину

    Для проверки использовал эти скетчи:
    https://www.arduino.cc/en/Tutorial/MasterReader
    https://playground.arduino.cc/Main/I2cScanner
    На малине смотрю через i2cdetect

    Также пробовал питон-скрипты и программы на c++ - все они выдают ошибку при чтении данных. А вот например с BMP280 что-то читается!

    В интернете полно статей, как соединять, и там все работает. Достаточно просто залить скетч "slave" на ардуину и она сразу станет видна. По сути это делает строка Wire.begin(SLAVE_ADDRESS);

    Для соединения использую просто 2 провода SDA и SCL. По идее этого должно хватать? Например, для двух ардуин хватает.

    Пробовал выставлять
    dtparam=i2c_baudrate=10000
    в /boot/config.txt, но это не помогло, ничего не изменилось.
     
  2. NikitOS

    NikitOS Public enemy Администратор

    А в дуину нужный скетч залит?
    По стандарту она не определится как устройство i²c
     
  3. ostin654

    ostin654 Нуб

    Скетч залит. Ну другая ардуина то видио его через сканнер. И число считывается. И в интернете примеры приводят, что ардуина видна через i2cdetect. Неужели просто из-за того, что ардуины неоригинальные?
     
  4. parovoZZ

    parovoZZ Гуру

    Не понял - вопрос в чем? I2C - это интерфейс с определенными правилами пересылки пакетов. Что там будет пересылаться - это прерогатива прогоаммиста. Поэтому разрабатываете простейший протокол и наслаждаетесь результатом. Благо что все железо поддерживает данный интерфейс на аппаратном уровне.
     
  5. ostin654

    ostin654 Нуб

    Вопрос в том, что не могу ни одного байта переслать. Протокол будет, как только будут пересылаться байты.
     
  6. ostin654

    ostin654 Нуб

    Нужно обязательно подключать GND малины к GND ардуины. Пока не понял, почему так. Но все работает.
     
  7. NikitOS

    NikitOS Public enemy Администратор

    Гмм...
    А Вы этого раньше не сделали? О_о
     
  8. ostin654

    ostin654 Нуб

  9. Потому что нужно знать школьную физику, прежде чем провода подключать к чему-нибудь. Ток течет по петле. Нет пути возврата - нет тока.
     
  10. parovoZZ

    parovoZZ Гуру

    I2C не является балансной линией передачи, поэтому нулевые потенциалы устройств необходимо между собой уровнять.
     
  11. ostin654

    ostin654 Нуб

    Ну ок, с голой малиной разобрался. Теперь надел Troyka Cap, присоединил GND. Опять не работает.
     
  12. NikitOS

    NikitOS Public enemy Администратор

    Адреса I2C разные?
     
  13. ostin654

    ostin654 Нуб

    Адрес ардуины 18, был виден, пока не было Troyka Cap. Теперь видно только адрес самой Cap - 2a.
     
  14. parovoZZ

    parovoZZ Гуру

    Изучи внимательно I2C и делай всё ручками. Кто-то держит линию SCL дольше, чем надо, вот и результат. А вообще ЛА или осцилл в помощь. Так можно до седины гадать.