Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как связать два или более AVR по i2C
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Denis89
Вообщем в этом и есть мой вопрос. В некотрых случаях так бывает меньше проблем, чем упаковывать всю перефирию и программный код в один кристал. laughing.gif

Есть ссылки на такой материал? Исходники там какие может( на С подобных языках естественно rolleyes.gif )
Stanislav_S
Посмотрите вот здесь, там много всяких апонтов по реализации и применению I2C.
Denis89
Смотрел по этой ссылке какаето муть. Лучше свяжу кристалы по UART. Сделать простую адресацию, чтобы контроллер определился ему ли это команда прилитела, и всё будет пучком laughing.gif
Artem_Petrik
Если есть возможность выбирать интерфейс, то лучше, ИМХО, выбрать SPI. Интерфейс быстрый, прост как пробка, а следовательно, вызывает меньше проблем при реализации. Проводов правда больше, но это не большая плата за остальные удобства.
xemul
Цитата(Denis89 @ Apr 12 2009, 21:14) *
Смотрел по этой ссылке какаето муть.

По ссылке - переводы атмеловских аппнотов.
Цитата
Лучше свяжу кристалы по UART. Сделать простую адресацию, чтобы контроллер определился ему ли это команда прилитела, и всё будет пучком laughing.gif

Флаг в руки, барабан на шею. Если предполагаете мультимастер - два флага.
Хинт: на I2C (хоть я его и не люблю), если устройств >2, будет проще, но придется ознакомиться с мутью.
Herz
Цитата(Artem_Petrik @ Apr 12 2009, 19:29) *
Если есть возможность выбирать интерфейс, то лучше, ИМХО, выбрать SPI. Интерфейс быстрый, прост как пробка, а следовательно, вызывает меньше проблем при реализации. Проводов правда больше, но это не большая плата за остальные удобства.

+1. IIC есть смысл применять, ИМХО, если устройств действительно много. Если они далеко и лишних проводов нет. А с SPI гораздо проще, да и быстрее, наверное.
SasaVitebsk
Связывать контроллеры по SPI как раз сложнее. Особенно если их больше 2. Обязательно необходим какой-то протокол.

Применить I2C значительно проще. Я связываю как память. То есть на контроллере слэйв, реализую имитацию 24с01. При этом адрес устройства - применяю уникальный.
Herz
Цитата(SasaVitebsk @ Apr 12 2009, 23:16) *
Связывать контроллеры по SPI как раз сложнее. Особенно если их больше 2. Обязательно необходим какой-то протокол.

Применить I2C значительно проще. Я связываю как память. То есть на контроллере слэйв, реализую имитацию 24с01. При этом адрес устройства - применяю уникальный.

Не могу согласится. Если их не более двух - вообще нет никаких проблем. Если более ... О каком протоколе Вы говорите? А что, в случае с IIC - нет?
XVR
И UART и SPI предполагают подключение точка-точка. Если нужно связать более 2х девайсов придется делать какую то обвязку. Так что в этом случае (БОЛЕЕ 2х девайсов) - I2C предпочтительнее. Если же девайсов 2 - то предпочтительнее использовать то, что останеться на них свободным rolleyes.gif Сложность обслуживания всех 3х вариантов реализации около 0.
zltigo
Цитата(XVR @ Apr 13 2009, 09:55) *
SPI предполагают подключение точка-точка....

Отнюдь. И параллелятся (ибо выходы трехстабильные) и в цепочку соединяются...
Herz
Цитата(XVR @ Apr 13 2009, 09:55) *
И UART и SPI предполагают подключение точка-точка. Если нужно связать более 2х девайсов придется делать какую то обвязку.

Вы что-то путаете. Больше двух контроллеров соединять по SPI мне пока не приходилось - врать не стану. Но использование множества устройств (пассивных) на одном физическом SPI-интерфейсе - совершенно штатный режим, для этого он и создавался. Этим давно и успешно пользуюсь.
xemul
Автор пока озвучил только "хочу воспарить и полетать" без какой-либо детализации.
Если мультимастер ему не нужен, или устройств всего два, то SPI, безусловно, и проще, и быстрее.
Если нужен, и устройств поболе, то I2C (с ее зачатками хардварного арбитража и адресации) может оказаться удобнее.
SasaVitebsk
Цитата(Herz @ Apr 13 2009, 09:48) *
Не могу согласится. Если их не более двух - вообще нет никаких проблем. Если более ... О каком протоколе Вы говорите? А что, в случае с IIC - нет?

С точки зрения аппаратной, если рассматривать несколько устр-в, реализуются все интерфейсы с теми или иными ограничениями.
Если брать SPI и пускать кольцо, то пропускная способность падает пропорционально колличеству учитывая % протокола. Если параллелить, то требуются линии выборки.
Если брать UART, то требуются драйверы.
И лишь I2C и 1-wire допускают подключение дополнительных устр-в без внесения аппаратных изменений в линию.

Если учесть, что мы находимся в разделе для начинающих, то я и посоветовал так.
В случае с I2C есть протокол. Но он, фактически, определён самим стандартом. В случае SPI - этого нет. Разработчику самому придётся выдумывать протокол для связи своих устр-в. Причём если предполагается приём/передача данных/команд, то протокол будет - как положено. Обязательно байтстаффинг + адрес устройства + контроль целостности пакета и т.д.

Приведу пример, просто по приколу, реализации протокола с учётом передачи данных и команд.

Передача комманд
St-AdW-Ar-Cmd-Ar-Par1-Ar-Par2-Ar-....ParN-Ar-Sp

Передача данных
St-AdW-Ar-01-Ar-Dat1-Ar-Dat2-Ar-....DatN-Ar-Sp

Чтение данных
St-AdW-Ar-Cmd-Ar-Sp St-AdR-Ar-Dat1-Aw-Dat2-Aw-....DatN-Sp

Где
St - старт
Sp - стоп
AdW/AdR - адрес с битами записи/чтения соответственно
Cmd - команда
Ar/Aw - ASK
Par/Dat - параметры/данные
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.