Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сопряжение нескольких atmega
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
Станис
Нужна связь между атмегами32. расстояние не больше полуметра незнаю с чего даже начать.. только начинаю осваивать..
SasaVitebsk
Какой объём информации? Насколько регулярный обмен?

Если скорость не большая, то можно обрабатывать и без приёмопередатчиков. Если объём значительный, то лучше использовать интерфейс rs485.
rezident
Связь внутри прибора на одной плате или между платами или межприборная? Условия эксплуатации какие (электромагнитная обстановка)? Гальваническая изоляция нужна или нет? Ведущий всегда один или любой МК может быть ведущим? Какие интерфейсы свободны? Наверное самое простое - использовать UART совместно с маркерным адресным протоколом связи.
Станис
связь внутри прибора, информации мало.. нужно только отправлять числа от ведущего МК в ведомые, свободны все интерфейсы..
Skaf
Смотря сколько мег и какая нужна скорость.

Если скорость нужна не очень большая я бы сделал на UART. Если скорость нужна большая- то SPI.
Станис
Цитата(Skaf @ Apr 5 2010, 12:27) *
Смотря сколько мег и какая нужна скорость.

Если скорость нужна не очень большая я бы сделал на UART. Если скорость нужна большая- то SPI.


Мег не больше 10... скорость некритична...
а примеров нет реализации?
Станис
Всетаки выбрал USART..

отправляю число с ведущего МК на ведомый:
printf("125");

на втором опрашивая getchar() получаю по порядку коды символов:
49;50;53

Дк вот вопрос как мне теперь эти когда можно преобразовать в число 125.
мозги догнали только до этого.. но я думаю это не гуманно biggrin.gif

//цыкл
s=getchar();
if (i2>0) { i3=((s-48)); i=i1+i2+i3; i1=0; i2=0; i3=0;// получаем единицы и потом все складываем и обнуляем
if (i1>0) i2=((s-48)*10);//получаем десятки
if (i1==0) i1=((s-48)*100); //получаем сотни

он конечно работает но не всегда при повторной отправке числа 125 число насчитывает уже 512 почемуто.. а следующая отправка снова 125..
может подкажет как это делают умные люди?
baralgin
Станис Числа посылать числами:
printf("%c",125)
...
s = getchar(); // s равно 125

ps: гланды вырезаются через анальное отверстие...
mdmitry
А для достоверности работы не хотите ли использовать какой-нибудь протокол для передачи данных? Точно определяются в этом случае начало пакета, конец, CRC.

Сам использовал WAKE протокол.
rezident
Цитата(Станис @ Apr 6 2010, 15:53) *
может подкажет как это делают умные люди?
Я же вам уже посоветовал использовать адресный протокол связи. Как пример, упомянутый mdmitry протокол Wake.
Станис
printf("%c",125) можно отправить только чар число?

Реализации протокола Wake на CVAVR ни у кого нет??
Станис
скажите пожалуйста какое значение принимает getchar(); после того как все данные будут прочтены?? (не могу сделать условие чтоб при положительном значении только брались числа от туда..)
smalcom
уже сразу ищи компонент для Делфи
Станис
Цитата(smalcom @ Apr 7 2010, 21:04) *
уже сразу ищи компонент для Делфи


Вопрос о сопряжении с ПК не рассматривается вообще.
Станис
Вот настроил USART на двух Мегах все работет.. общаются отлично.. а вот как третий мк к линии подсоединю так сразу все молчат... подскажите в чем дело?
XVR
Цитата(Станис @ Apr 8 2010, 09:50) *
Вот настроил USART на двух Мегах все работет.. общаются отлично.. а вот как третий мк к линии подсоединю так сразу все молчат... подскажите в чем дело?
Прямое соединение USARTов возможно только в конфигурации точка-точка, т.е. ровно 2 штуки. Если нужно больше, то нужно делать либо шину (драйверами RS485 или буферами с 3мя состояниями) либо кольцо.
Станис
Цитата(XVR @ Apr 8 2010, 12:05) *
Прямое соединение USARTов возможно только в конфигурации точка-точка, т.е. ровно 2 штуки. Если нужно больше, то нужно делать либо шину (драйверами RS485 или буферами с 3мя состояниями) либо кольцо.

если в кольцо нужно делать последовательную пересылку от МК до МК?
XVR
Цитата(Станис @ Apr 8 2010, 14:56) *
если в кольцо нужно делать последовательную пересылку от МК до МК?
Да. TX первого соединяешь с RX 2го. TX 2го с RX 3го. TX 3го с RX 1го. (3 штуки в кольце). Топология крайне нестандартная и такая же ненадежная - выход из строя (или подвисание) одного МК блокирует все кольцо
Stas_R
Читаете раздел Multi-processor Communication Mode для ATmega32. Соединял по USART 6 МК, один мастер 5 подчиненых. На линию TXD ставится резистор, выходы 5 передатчиков подчиненых в третьем состоянии, при передаче выход переключается на передачу. Все описано в DS, читайте и все у Вас получится.
Станис
Цитата(Stas_R @ Apr 11 2010, 23:18) *
Читаете раздел Multi-processor Communication Mode для ATmega32. Соединял по USART 6 МК, один мастер 5 подчиненых. На линию TXD ставится резистор, выходы 5 передатчиков подчиненых в третьем состоянии, при передаче выход переключается на передачу. Все описано в DS, читайте и все у Вас получится.


А вы не поделитесь наработками в этом направлении?
Stas_R
Что Вас интересует. Спрашивайте.
Станис
Цитата(Stas_R @ Apr 12 2010, 18:39) *
Что Вас интересует. Спрашивайте.


с битами не могу разобраться... первый раз с даташитом работаю.. а так все какими то кусочками кодов в нете питался.. laughing.gif вы уж извените.. я только начал изучять и не все так сразу мне дается..
я вот понял что можно настроить это все в мастере кодвизиона.. толко не все понятно..

вроде как так? для мастера/слейва
XVR
Цитата
вроде как так?
Режим наверное все таки асинхронный (Mode)
Станис
Цитата(XVR @ Apr 13 2010, 10:46) *
Режим наверное все таки асинхронный (Mode)


UCPOL - полярность синхронизации. используется только в синхронном режиме. В асинхронном UCPOL=0.
или я не правильно чтото понял?
XVR
Цитата
UCPOL - полярность синхронизации. используется только в синхронном режиме. В асинхронном UCPOL=0.
или я не правильно чтото понял?
У меня нет CW, так что сказать не могу. А какие еще есть варианты в списке Mode?
Станис
Цитата(XVR @ Apr 13 2010, 12:35) *
У меня нет CW, так что сказать не могу. А какие еще есть варианты в списке Mode?


Asynchronous
Sync. master UCPOL=0
Sync. master UCPOL=1
Sync. slave UCPOL=0
Sync. slave UCPOL=1

Если поставить Asynchronous, то как тогда различить мастер и слэйв?
XVR
Цитата
Asynchronous
Вот его
Цитата
Если поставить Asynchronous, то как тогда различить мастер и слэйв?
Изнутри контролера они не отличаются. Все отличие в схеме включения выводов TX и RX и в протоколе обмена
Станис
я хочу построить многопроцессорную систему.. но в ДШ не могу разобраться...
но там написано про бит UCPOL..
Stas_R
Читайте описание на регистр UCSRB. Там есть бит 3 TXEN который фактически переключает вывод порта как линия передачи TX или бит порта.
Мастер всегда скоммутирован как линия TX. Подчиненый скомутирован как бит порта. При необходимости передачи данных бит TXEN устанавливается в 1 и после окончания передачи сбрасывается в 0. На линии TX подчиненых МК которые паралелятся устанавливается подтягивающий резистор.
Станис
Решил использовать мегу2560 у него есть три USART... вот мне как раз и хватит.. и памяти графического меню предостаточно..
Всем спасибо за помошь!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.