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

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

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

Сообщение KiCom » 18 июл 2006, 19:04

Как можно организовать связь? Напрашиваетьс несколько вариантов: USART, SPI ... Собственно что лучше?
KiCom
 
Сообщения: 345
Зарегистрирован: 22 окт 2005, 11:15
Откуда: Красноярск

Сообщение avr123.nm.ru » 18 июл 2006, 19:21

Cмотря что свободно. Апноут на эту тему есть у AVR. pic16f628.narod.ru/01.htm
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

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

Проще всего UART. Если нужно организовывать шину (мастер и много слейвов) - I2C или SPI, но там все уже не так просто...
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

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Вольтам.

Так что выбирай :)
SfS
 
Сообщения: 47
Зарегистрирован: 05 июл 2006, 05:55
Откуда: Томск

Сообщение KiCom » 19 июл 2006, 06:58

Да неверно остановлюсь на UART по крайней мере уже с ним работал. Я так понимаю это последоватьтельный интерфейс. Например есть три МК соеденить надо так: Rx_1-Tx_2  Rx_2-Tx-3 Rx_3-Tx_1
KiCom
 
Сообщения: 345
Зарегистрирован: 22 окт 2005, 11:15
Откуда: Красноярск

Сообщение SfS » 19 июл 2006, 07:01

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


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

У тебя система "мастер-слейв" или все равноправные ?
SfS
 
Сообщения: 47
Зарегистрирован: 05 июл 2006, 05:55
Откуда: Томск

Сообщение KiCom » 19 июл 2006, 07:05

Нет все равноправные, тоесть нужно соединять все МК паралельно? Если я использую UART.
KiCom
 
Сообщения: 345
Зарегистрирован: 22 окт 2005, 11:15
Откуда: Красноярск

Сообщение SfS » 19 июл 2006, 07:08

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


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

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

Я сейчас исчезну на часок-другой, потом тебе схемку кину как из UARTа шину сделать.
SfS
 
Сообщения: 47
Зарегистрирован: 05 июл 2006, 05:55
Откуда: Томск

Сообщение SfS » 19 июл 2006, 09:27

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

Правда в этом случае возникает проблема коллизий (как быть если передаать хотят одновременно два устройства?).  Тут решений может бытиь тоже несколько, например таймауты, как  в ethernet или динамический мастер шины...
Вложения
bus.png
bus.png (4.01 КиБ) Просмотров: 3333
SfS
 
Сообщения: 47
Зарегистрирован: 05 июл 2006, 05:55
Откуда: Томск

Сообщение KiCom » 19 июл 2006, 09:47

Отлично, спасибо.
KiCom
 
Сообщения: 345
Зарегистрирован: 22 окт 2005, 11:15
Откуда: Красноярск

Сообщение avr123.nm.ru » 19 июл 2006, 10:04

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

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

======

и все же:  почему не воспользоваться апноутом ???
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение SfS » 19 июл 2006, 10:25

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


Потому что нету этого аппноута у меня. Логично ? Ну еще потому что этот вариант проверен и работает на куче устройств...
SfS
 
Сообщения: 47
Зарегистрирован: 05 июл 2006, 05:55
Откуда: Томск

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

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

Сообщение SfS » 28 июл 2006, 07:21

А воощето есть еще шинный интерфейс RS485.
Вешаешь преобразователь ADM485 на UART и одну ногу - на переключатель прием-передача...
И все работает.
SfS
 
Сообщения: 47
Зарегистрирован: 05 июл 2006, 05:55
Откуда: Томск


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6