Псевдо устройства на i2c
- Войдите на сайт для отправки комментариев
Добрый день.
Возникла проблема с подключением i2c устройств. гугл, к сожалению, внятного ответа не дал.
имеется схема Raspberry Pi2, arduino mini pro, гироскоп MPU6050. все подключены между собой по i2c( по факту, закорочены SDA, SCL, GND этих трёх устройств, SDA к SDA, SCL к SCL ). Rpi является мастером, ардуина - слейв, MPU тоже слейв(по умолчанию)
при этом возникает 2 проблемы:
1) MPU отказывается инициализироваться, если RPi выключен(как только включаю, еще до загрузки оси MPU уже начинает работать)
2) после инициализации MPU на шине забиваются все устройства(смотрю на RPi, т.к. Serial на ардуине не доступен).
если закоментировать mpu.initialize(), на шине 2 утройства (0х4 ардуина и 0х68 MPU). если раскоментировать, то уже через пару секунд будет забит весь пул устройств.
скетч абсолютно простой (под рукой нет, поэтому псевдокод =( )
на RPi запущена только ось. список устройств смотрю командой i2cdetect -y 1
#include <Wire.h> #include <MPU6050.h> MPU6050 mpu; void setup() { Wire.begin(0x4); Mpu.initialize(); } void loop() {}
> уже через пару секунд будет забит весь пул устройств.
Какой такой пул устройств?
имеется ввиду, после вызова на ардуине mpu.initialize() "i2cdetect -y 1" на RPi показывает устройство на каждом из возможных адресов. т.е. не 2 устройства, как должно быть(0x4 и 0x68), а все.
Ищи сопли в подключении и глюки в коде. Кто-то отчечает на любой адрес.
из-за плохого контакта можеть быть подобное? в коде, вроде бы, негде косякам спрятаться...
собрано всё на макетке с перемычками, так что контакт может быть и плохой
так же замечено: после каждой перепрошивки датчик лучше ребутнуть по питанию. в этом случае всё ок и косяки появляются только при попытке добавить еще кода. например:
тут уж даже ребут не спасает. всегда и сразу "забиты" все адреса.
Почитай про сам протокол i2c и его аппаратную реализацию. Без фильтров и подтягивающий резисторов, там уверенно Маяк можно ловить. :)
Про i2c почитал первым делом. Но это мой первый проект, так что про Маяк пока еще не в курсе =)
резисторы, по идее, не нужны, хотя ведутся ожесточенные споры по поводу необходимости конвертора логических уровней между RPi и arduino. а вот к фильтрам надо присмотреться внимательней.
а нельзя ли как-нибудь сделать, чтоб RPi общался _только_ с ардуиной, а ардуина уже со всей переферией?
Я не про делители, а про подтяжку, чтобы на пине было четко LOW или четко HIGH.
судя по всему, дело дествительно в подтяжке. как найду резисторы и попробую, отпишусь. Спасибо.
p.s. еще бы понять, почему не работает при выключенной малинке...
p.s. еще бы понять, почему не работает при выключенной малинке...
А как должно работать без малины , по-вашему? По каким признакам вы поймете что работает?
Rpi является мастером, ардуина - слейв, MPU тоже слейв(по умолчанию)
еще до загрузки оси MPU уже начинает работать
проверяю просто:
добавляю в setup строки
на RPi еще никакого мастера нет. наверное я немного неправильно выразился. думаю, тут дело именно в питании на соответсвующие пины. а вот почему без этого не заводится MPU - мне не понятно.
А чего непонятного. Ведь
никто MPU не инитил, вот он и не работает. Боюсь без мультимастера никак.
никто MPU не инитил, вот он и не работает. Боюсь без мультимастера никак.
mpu.initialize() я вызываю
эх. видимо придётся разбираться с мультимастером. а то еще где-то пишут, что малина его хардварно не поддерживает.