roboforum.ru

Технический форум по робототехнике.

Связь между МК Atmel Mega (16/32)

Связь между МК Atmel Mega (16/32)

KiCom » 18 июл 2006, 19:04

Как можно организовать связь? Напрашиваетьс несколько вариантов: USART, SPI ... Собственно что лучше?

avr123.nm.ru » 18 июл 2006, 19:21

Cмотря что свободно. Апноут на эту тему есть у AVR. pic16f628.narod.ru/01.htm

-= Александр =- » 18 июл 2006, 22:04

Проще всего UART. Если нужно организовывать шину (мастер и много слейвов) - I2C или SPI, но там все уже не так просто...

Re: Связь между МК Atmel Mega (16/32)

SfS » 19 июл 2006, 06:56

KiCom писал(а):Как можно организовать связь? Напрашиваетьс несколько вариантов: USART, SPI ... Собственно что лучше?


Ты не полностью обрисовал проблему.
Тут может быть несколько вариантов:

1. Если тебе нужна большая скорость (до мегабит) - то SPI. НО! Только на коротких линиях (порядка не более десятков см).

2. Если тебе нужна дальность связи в метры, то UART. НО! Скорость получишь не более сотен килобит.

3. Если тебе пофиг на скорость, то лучше UART - прощеподключать (всего три провода - Rx, Tx и Общий), тогда как SPI - четыре провода (MOSI, MISO, SCK и Общий).

Опять же UART на дальние расстояния надо делать с преобразователем 5B<->+-12B, тогда как на коротких можно соединять и без преобразователя - сразу по 5Вольтам.

Так что выбирай :)

KiCom » 19 июл 2006, 06:58

Да неверно остановлюсь на UART по крайней мере уже с ним работал. Я так понимаю это последоватьтельный интерфейс. Например есть три МК соеденить надо так: Rx_1-Tx_2  Rx_2-Tx-3 Rx_3-Tx_1

SfS » 19 июл 2006, 07:01

KiCom писал(а):Да неверно остаовлюсь на UART по крайней мере уже с ним работал. Я так понимаю это последоватьтельный интерфейс Например есть три МК соеденить надо так: Rx_1-Tx_2  Rx_2-Tx-3 Rx_3-Tx_1


Последовательно чтоли ? Тода ты не сможешь передать напрямую от 3го к 1му данные.

У тебя система "мастер-слейв" или все равноправные ?

KiCom » 19 июл 2006, 07:05

Нет все равноправные, тоесть нужно соединять все МК паралельно? Если я использую UART.

SfS » 19 июл 2006, 07:08

KiCom писал(а):Нет все равноправные, тоесть нужно соединять все МК паралельно? Если я использую UART.


Если все равноправные, то UART не подойдет - он не для того предназначен (конечно можно и с ним извратится, могу схемку кинуть попозже).

Тебе нужна шина. Например I2C. Но тогда одновременно по шине могут общаться не более 2х контроллеров.

Я сейчас исчезну на часок-другой, потом тебе схемку кину как из UARTа шину сделать.

SfS » 19 июл 2006, 09:27

Вот схема шины на UART по 5вольтам. Как видим все входы Rx микроконтроллеров соединяются вместе, а выходы Tx - через транзисторы, чтобы исключить сквозные токи и выгорания UARTов.
Все слышат всех, в один момент может передавать только один.

Правда в этом случае возникает проблема коллизий (как быть если передаать хотят одновременно два устройства?).  Тут решений может бытиь тоже несколько, например таймауты, как  в ethernet или динамический мастер шины...
Вложения
bus.png
bus.png (4.01 КиБ) Просмотров: 3331

KiCom » 19 июл 2006, 09:47

Отлично, спасибо.

avr123.nm.ru » 19 июл 2006, 10:04

все RXD соединить а TXD подсоединить к RXD  через резистор. Их сопротивление должно быть более (колич. UART * 500) Ом.

Чем меньше скорость тем больше могут быть резисторы.

======

и все же:  почему не воспользоваться апноутом ???

SfS » 19 июл 2006, 10:25

avr123.nm.ru писал(а):и все же:  почему не воспользоваться апноутом ???


Потому что нету этого аппноута у меня. Логично ? Ну еще потому что этот вариант проверен и работает на куче устройств...

Змей-Горыныч » 27 июл 2006, 09:32

USART всё ж не для этого. Как раз для таких систем, где куча устройств общается друг с другом, умные люди и придумали специальные шины/протоколы. По-моему I2C здесь самый правильный вариант. Конечно по первости трудности с пониманием и программированием, но насколько проще аппаратно реализовавать. Всего два проводка - и цепляй столько устройств, сколько захочешь(ну, до 128-ми  :D )! А если ещё контроллер с аппаратным модулем I2C (TWI в AVR) - совсем праздник. Надо что-то передать всем сразу - на то есть общие вызовы в протоколе.

SfS » 28 июл 2006, 07:21

А воощето есть еще шинный интерфейс RS485.
Вешаешь преобразователь ADM485 на UART и одну ногу - на переключатель прием-передача...
И все работает.


cron
Rambler\'s Top100 Mail.ru counter