Полная версия этой страницы:
Сопряжение нескольких atmega
Нужна связь между атмегами32. расстояние не больше полуметра незнаю с чего даже начать.. только начинаю осваивать..
SasaVitebsk
Apr 4 2010, 14:30
Какой объём информации? Насколько регулярный обмен?
Если скорость не большая, то можно обрабатывать и без приёмопередатчиков. Если объём значительный, то лучше использовать интерфейс rs485.
rezident
Apr 4 2010, 14:40
Связь внутри прибора на одной плате или между платами или межприборная? Условия эксплуатации какие (электромагнитная обстановка)? Гальваническая изоляция нужна или нет? Ведущий всегда один или любой МК может быть ведущим? Какие интерфейсы свободны? Наверное самое простое - использовать UART совместно с маркерным адресным протоколом связи.
связь внутри прибора, информации мало.. нужно только отправлять числа от ведущего МК в ведомые, свободны все интерфейсы..
Смотря сколько мег и какая нужна скорость.
Если скорость нужна не очень большая я бы сделал на UART. Если скорость нужна большая- то SPI.
Цитата(Skaf @ Apr 5 2010, 12:27)

Смотря сколько мег и какая нужна скорость.
Если скорость нужна не очень большая я бы сделал на UART. Если скорость нужна большая- то SPI.
Мег не больше 10... скорость некритична...
а примеров нет реализации?
Всетаки выбрал USART..
отправляю число с ведущего МК на ведомый:
printf("125");
на втором опрашивая getchar() получаю по порядку коды символов:
49;50;53
Дк вот вопрос как мне теперь эти когда можно преобразовать в число 125.
мозги догнали только до этого.. но я думаю это не гуманно
//цыкл
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
Apr 6 2010, 14:07
Станис Числа посылать числами:
printf("%c",125)
...
s = getchar(); // s равно 125
ps: гланды вырезаются через анальное отверстие...
mdmitry
Apr 6 2010, 16:47
А для достоверности работы не хотите ли использовать какой-нибудь протокол для передачи данных? Точно определяются в этом случае начало пакета, конец, CRC.
Сам использовал WAKE протокол.
rezident
Apr 6 2010, 17:43
Цитата(Станис @ Apr 6 2010, 15:53)

может подкажет как это делают умные люди?
Я же вам уже посоветовал использовать адресный протокол связи. Как пример, упомянутый mdmitry
протокол Wake.
printf("%c",125) можно отправить только чар число?
Реализации протокола Wake на CVAVR ни у кого нет??
скажите пожалуйста какое значение принимает getchar(); после того как все данные будут прочтены?? (не могу сделать условие чтоб при положительном значении только брались числа от туда..)
smalcom
Apr 7 2010, 14:49
уже сразу ищи компонент для Делфи
Цитата(smalcom @ Apr 7 2010, 21:04)

уже сразу ищи компонент для Делфи
Вопрос о сопряжении с ПК не рассматривается вообще.
Вот настроил USART на двух Мегах все работет.. общаются отлично.. а вот как третий мк к линии подсоединю так сразу все молчат... подскажите в чем дело?
Цитата(Станис @ Apr 8 2010, 09:50)

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

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

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

Читаете раздел Multi-processor Communication Mode для ATmega32. Соединял по USART 6 МК, один мастер 5 подчиненых. На линию TXD ставится резистор, выходы 5 передатчиков подчиненых в третьем состоянии, при передаче выход переключается на передачу. Все описано в DS, читайте и все у Вас получится.
А вы не поделитесь наработками в этом направлении?
Stas_R
Apr 12 2010, 12:24
Что Вас интересует. Спрашивайте.
Станис
Apr 13 2010, 04:02
Цитата(Stas_R @ Apr 12 2010, 18:39)

Что Вас интересует. Спрашивайте.
с битами не могу разобраться... первый раз с даташитом работаю.. а так все какими то кусочками кодов в нете питался..

вы уж извените.. я только начал изучять и не все так сразу мне дается..
я вот понял что можно настроить это все в мастере кодвизиона.. толко не все понятно..
вроде как так? для мастера/слейва
Цитата
вроде как так?
Режим наверное все таки асинхронный (Mode)
Станис
Apr 13 2010, 05:18
Цитата(XVR @ Apr 13 2010, 10:46)

Режим наверное все таки асинхронный (Mode)
UCPOL - полярность синхронизации. используется только в синхронном режиме. В асинхронном UCPOL=0.
или я не правильно чтото понял?
Цитата
UCPOL - полярность синхронизации. используется только в синхронном режиме. В асинхронном UCPOL=0.
или я не правильно чтото понял?
У меня нет CW, так что сказать не могу. А какие еще есть варианты в списке Mode?
Станис
Apr 13 2010, 06:27
Цитата(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, то как тогда различить мастер и слэйв?
Цитата
Asynchronous
Вот его
Цитата
Если поставить Asynchronous, то как тогда различить мастер и слэйв?
Изнутри контролера они не отличаются. Все отличие в схеме включения выводов TX и RX и в протоколе обмена
Станис
Apr 13 2010, 07:33
я хочу построить многопроцессорную систему.. но в ДШ не могу разобраться...
но там написано про бит UCPOL..
Stas_R
Apr 13 2010, 08:19
Читайте описание на регистр UCSRB. Там есть бит 3 TXEN который фактически переключает вывод порта как линия передачи TX или бит порта.
Мастер всегда скоммутирован как линия TX. Подчиненый скомутирован как бит порта. При необходимости передачи данных бит TXEN устанавливается в 1 и после окончания передачи сбрасывается в 0. На линии TX подчиненых МК которые паралелятся устанавливается подтягивающий резистор.
Станис
Apr 13 2010, 09:40
Решил использовать мегу2560 у него есть три USART... вот мне как раз и хватит.. и памяти графического меню предостаточно..
Всем спасибо за помошь!
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.