Несколько MMA7455 по одному SPI, подскажите

Ivan
Offline
Зарегистрирован: 21.08.2011

Подскажите, как рабовать с несколькими MMA7455 по одному SPI?

maksim
Offline
Зарегистрирован: 12.02.2012

1. А почему именно SPI ? а не I2C ?
2. Пробовали в гугле набирать "подключение нескольких устройств по spi" ?

leshak
Offline
Зарегистрирован: 29.09.2011

 

Как выше уже заметил Максим выбор SPI несколько странен. I2C для него более "родной". Есть готовые ардуино библиотеки (гугл находит спокойно).

 

SPI-й же, в отличает от I2C, изначально предполагает наличие только одного устройства на шине. Следовательно если туда хочется подключить несколько устройств, то их нужно еще "выключать/выключать" за спиной у SPI. Включили первое устройство, "поговорили с ним" - выключили, выключили второе - поговорили с ним и т.п. Но еще раз,

Некоторые SPI устройства, для этого имееют специальный пин Enable. Выставля который можно сказать устройству нужно ему сейчас слушать
SPI или нет. Если такого пина нет, то нужно городить обвязку что-бы вырубать питание с устройства или "отключать его от линии" по мере надобности.

 

maksim
Offline
Зарегистрирован: 12.02.2012

"Общение" с устройствами осуществляется выбором SS (CS) это и есть тот самый Enable для SPI. 

 

Ivan
Offline
Зарегистрирован: 21.08.2011

Прошу прощение, в действительности я использую в данном случае I2C, перепутал. Как для I2C использовать несколько устройств?

leshak
Offline
Зарегистрирован: 29.09.2011

 

Кстати, судя по даташиту на модуль - у негое таки есть и I2C и SPI. Так что не сильно-то вы и ошиблись. И учитывая "ущербность" его I2C особого выигрыша между I2C/SPI - не видно.

 

А вообще, любое изучение, любого модуля - стоит начинать с изучения даташитов (пусть даже не все там понятно, но на какое-то время это будет вашей библией. это "первоисточник"). И ссылки можно на них давать для экономии времени другим.
http://www.parallax.com/Portals/0/Downloads/docs/prod/sens/28526-MMA7455... - краткий
http://www.investigacion.frc.utn.edu.ar/sensores/Equipamiento/aceleracio... - длинный.

Как правило там ищут и команды которые понимает чип, и как его конфигурировать, и примеры типичных подключений и т.п.

Думаю, стоит начать с набора в гугле "Arduino I2C" и прочитать несколько статей.
Вообщем "читаем", если что-то осталось не понятно - тогда спрашиваем.
А то у вас очень "обный вопрос". Даже не понятно что вас интересует "как програмно их отличать" или "схема подключения".
Ну не начинать же тут, в самом деле, писать статью про I2С что-бы осветить все что нужно про нее знать.

Да и на форуме, правда с другими устройствами, обсуждалось. Но принцип везде один.
Все устройства - подключаем на линии паралельно. Избегаем стандартной ошибки новичка в виде попытки сделать несколько подтягивающих, к питанию резисторов (как правило во всех схемах это то что вы видите в виде резисторов 4.7K). Многи пытаются "раз подключили два устройства", то и количество резисторов нужно удвоить - это ошибка. Сколько-бы устройст небыло (до 127-ми) - подтягивающий только один нужен.

С програмной стороны - читайте доки/смотрите примеры библиотеки Wire. Вы заметите что многие методы принимает параметр address. Это и есть "магическое число" которые указывает какому устройствоу нужно послать комнаду/запросить данные.
Как правило его узнают из даташита (24-тая страница полного).
Что-бы работать сразу с двумя устройствами - у них должны быть два разных адреса.
Тут, обычно, подхода бывает
1. У чипа есть специальные ноги, подтягивая которые к питанию или земле мы задаем какой у него адрес (что за ноги - опять-таки в даташит смотрим)
2. Чип имеет "адрес по умолчанию". Но его можно сменить програмно. Для этого вначале подключаем "один чип". Обращаемся к нему "по дефолтному". Посылаем ему команду "измени адрес". И в будущем уже обращаемся к нему по этому адресу.

Судя по всему - у вас третий случай (но я могу ошибатся, очень детально не вчитывался в даташит). Чим имеет адрес по умолчанию, но производитель решил не стоит вам разрешать менять его.Видимо они подумали что два таких акселерометра на одной шине - никому не понадобятся. И сделал адресс ReadOnly без возможности его менять.
Значит нужно либо брать акселерометр от другого производителя (у которого будет другой адрес), либо так же как и с SPI "включать/выключать". Либо вешать второй акселеромтр, на другие пины. И организовыать там еще один програмный I2C.
Вообщем I2C вроде как-бы и есть, но его поддержка "ущербна" (по беглому впечатлению).

 

 

 

 

 

Ivan
Offline
Зарегистрирован: 21.08.2011

leshak спасибо Вам за развернутый ответб полезные мысли.

"...либо так же как и с SPI "включать/выключать" - т.е. есть у меня пара акселерометров, и я по очереди подключаю к ним питание и считываю информацию?

Странно, что я не нашел в сети информации о том что кто-то пытался подключить более одного акселерометра к одному мастер-устройству.

leshak
Offline
Зарегистрирован: 29.09.2011

Ivan пишет:

leshak спасибо Вам за развернутый ответб полезные мысли.

"...либо так же как и с SPI "включать/выключать" - т.е. есть у меня пара акселерометров, и я по очереди подключаю к ним питание и считываю информацию?

Ну это самый жесткий вариант. Плох тем что для этого доп. обвзяка нужна и тем что само устройство при этом выключается. А ведь есть куча устройств которым не желательно это. Которые должны работать. Ведь не только "общением по шине" устройство может заниматся. Да и инициализация может занимать существенно время.

Обычно, как уже говорилось выше, устройства имеют специальный PIN-выключатель. Который отключает не устройство целиком, и менно его "общательную часть". То есть он не выключается, а становится "глухим/немым".

Смотрите схему которую нарисовал Максим. Пины SS0,SS1,SS2 ....  это и есть такие выключатели. Активируем один из них - общаемся с соотвествующим устройством. Потом другой и т.д.

В вашем случае, все чуть-чуть "более мутно". Похоже они решили этот Enable пин использовать еще и для того что-бы переключать какую шину использовать SPI или I2C. Скорее всего одно состояние у них означает "слушаю SPI, плюю на I2C", а другое - наоборот.

Вообщем попробуте подключить (неважно как SPI или I2C) и поигратся с этим Chip Select пином. В одном состоянии устройство должно отвечать, в другом - молчать.

Ivan пишет:

Странно, что я не нашел в сети информации о том что кто-то пытался подключить более одного акселерометра к одному мастер-устройству.

Видимо производитель - тоже :) Но ведь действительно не так уж и часто это бывает. Как ни крути а два акселеромтра на одной плате, теоретически должны давать одинаковый результат. Поэтому "зачем два"  - вопрос довольно загадочный.

Ivan
Offline
Зарегистрирован: 21.08.2011

Как ни крути а два акселеромтра на одной плате, теоретически должны давать одинаковый результат. Поэтому "зачем два" - вопрос довольно загадочный.

Например для автоматизации некоторого процесса, где нужно контролировать положение каких-то плоскостей.