Страница 1 из 2

Связь двух МК через обычный порт

Добавлено: Ср мар 14, 2012 16:42:26
radiolubitel2011
Всем доброго времени суток! Вот собираю робота на танковой платформе. Основная управляющая часть будет состоять из 2 микроконтроллеров - ATMega8 и ATMega32.

На ATMega8 будет реализована функция ИК-бампера (для обнаружения препятствий, вот по такой схеме: http://railab.ru/begin/labrab/mIRBumper.htm). Только TSOP'ов будет 3 штуки.
Управлять двигателями (через драйвер L298N) будет ATMega32 (соответственно, и двигатели соединены к ней).

Задумка такая: чтобы не занимать сразу 4 порта на МК (для управления направлением вращения двигателей) я хотел бы соединить эти два МК через один порт. Т.е. смысл в чём - если на ATMega8 сработал, к примеру, первый TSOP-приёмник, то ATMega8 передает на ATMega32 какой-нибудь определённый код, а ATMega32 в свою очередь читает этот код, определяет по нему, какой из TSOP'ов сработал, и в зависимости от этого изменяет направление движения.

Вообще, это легко и просто можно было реализовать через USART, но на USART у меня будет связь с компьютером... Вообще, возможно ли сделать такую передачу данных на обычном порте у этих МК?

Буду очень благодарен за помощь!

Re: Связь двух МК через обычный порт

Добавлено: Ср мар 14, 2012 16:46:36
ploop
Можно, и проблем совсем никаких. Придумай свой протокол и всё.

Re: Связь двух МК через обычный порт

Добавлено: Ср мар 14, 2012 16:49:25
radiolubitel2011
ploop писал(а):Можно, и проблем совсем никаких. Придумай свой протокол и всё.
В принципе, я тоже думаю, что должно получиться, просто хотел уточнить. И ещё: какой примерно алгоритм должен быть у протокола?
P.S. Да, кстати, а ничего что МК работают на разных частотах - одна на 7,3 МГц, а другая на 16 МГц?

Re: Связь двух МК через обычный порт

Добавлено: Ср мар 14, 2012 18:08:19
Meteor
А что мешает затактировать от одного источника?
Проблем с тактированием можно наерное избежать, если делать синхронный протокол.
И тут кстати вопрос почему не SPI, раз занят UART?

Re: Связь двух МК через обычный порт

Добавлено: Ср мар 14, 2012 18:14:30
hybroid
Есть SPI, USART, TWI. ИМХО, последнего с лихвой хватит. USART для этого даже жирно, имхо.

Re: Связь двух МК через обычный порт

Добавлено: Ср мар 14, 2012 18:36:12
radiolubitel2011
Meteor писал(а):А что мешает затактировать от одного источника?
Кстати, хорошо что напомнили. :) Сразу встречный вопрос: по той ссылке, которую я привёл в самом начале, на схеме установлен кварц на 7,3 МГц. При этом частота TSOP-приёмника 36 кГц. Как я понимаю, все расчёты там делались именно для 36 кГц. Ведь если я изменю частоту процессора, то и частоту для TSOP'а придётся полностью пересчитывать? Или я неправ?
hybroid писал(а):Есть SPI, USART, TWI.
А можно поподробнее? Я, если честно, только с USART работал...

Re: Связь двух МК через обычный порт

Добавлено: Чт мар 15, 2012 17:27:17
radiolubitel2011
Вопрос про альтернативные интерфейсы остается в силе. В интернете я что-то маловато информации нашёл. Может, не там искал. Подскажите, пожалуйста, как в частности работать с SPI или TWI. Или проще свой протокол связи сделать?

Re: Связь двух МК через обычный порт

Добавлено: Чт мар 15, 2012 17:57:41
Meteor
SPI простейший последовательный протокол для обмена одного ведущего устр-ва с несколькими ведомыми устр-вами.Одномоментно может осуществлять обмен только с одним ведомым. Требует всего 4 сигнала:
SCK- тактовый
MOSI-передатчик ведущего- приемник ведомого
MISO- передатчик ведомого- приемник ведущего
CS- выбор приемника.
Содержит 8 битную посылку. Настройки заключаются в установки скорости и активного фронта.
Ведущий устанавливает у ведомого сигнал CS в 0. и затем осуществляет передачу. Наличие раздельных линий передачи-приема позволяет за 8 тактов SCK обменяться 2мя байтами.
TWI, он же I2C, он же IIC более сложный и менее скоростной интерфейс. Позволяет обмениваться нескольким устройствам по 2м проводам. Писать долго и лень - найдите книгу Евстифеева про микроконтроллеры AVR - там есть все

Re: Связь двух МК через обычный порт

Добавлено: Чт мар 15, 2012 19:18:54
radiolubitel2011
А на этих портах (SCK, MOSI, MISO) будет подключен внутрисхемный программатор... Не повлияет он, случайно, на передачу данных по SPI и наоборот? Прошивать я во время работы конечно же не буду... Просто COM-интерфейс для программирования через RS232 и буфер 74HC00 будет сделан прямо на этой же плате и подключен к МК.

Re: Связь двух МК через обычный порт

Добавлено: Чт мар 15, 2012 20:28:35
Ser60
Зачем ставить 2 МК для управления танком? Там и одному делать нечего. Вот для информации пара ссылок на подобные проекты:
http://mcs.uwsuper.edu/sb/Electronics/Trackbot/
http://mcs.uwsuper.edu/sb/327/Projects/2009/Trackbot/

Re: Связь двух МК через обычный порт

Добавлено: Чт мар 15, 2012 21:27:30
Meteor
radiolubitel2011 писал(а):.. Не повлияет он, случайно, на передачу данных по SPI и наоборот?
Поставьте джампера - во время программирования убираете их, во время работы соответственно ставите замыкая связь между МК.
Более изящный вариант - поставить мультиплексор. Но боюсь вам это слишком рано

Re: Связь двух МК через обычный порт

Добавлено: Чт мар 15, 2012 21:42:48
SmarTrunk
Аппаратным SPI довольно легко пользоваться. И МК не отвлекается, записал все в регистры, а оно там само передается-принимается. И скорости могут быть высокие.
Можно обойтисть и без джамперов, если резисторов туда наставить... В общем, внутрисхемное программирование никому не мешало задействовать в схеме этот полезный интерфейс.

Re: Связь двух МК через обычный порт

Добавлено: Чт мар 15, 2012 22:50:07
radiolubitel2011
Ser60 писал(а):Зачем ставить 2 МК для управления танком? Там и одному делать нечего...
У меня он (танк) будет не просто тупо реагировать на свет и ездить туда-сюда... Некоторые из функций - ИК-бампер (на МК) - используется 6 портов для ИК-светодиодов, и ещё несколько для TSOP'ов, приём команд с ПДУ (10 каналов), управление 2-мя моторами и 2-мя сервоприводами, контроль тока у двигателей, контроль заряда аккумуляторов и тому подобное. У одного МК выводов ну никак не хватит. Так что, я решил немного разгрузить основной контроллер, и поставить ещё один дополнительный (под рукой как раз была ATMega8).
Meteor писал(а):...Поставьте джампера - во время программирования убираете их, во время работы соответственно ставите замыкая связь между МК...
Вся плата целиком будет в корпусе, так что каждый раз переключать джампера не очень-то удобно...
SmarTrunk писал(а):...Можно обойтисть и без джамперов, если резисторов туда наставить...
А можно немножко поподробнее? Куда нужно поставить резисторы?

Re: Связь двух МК через обычный порт

Добавлено: Чт мар 15, 2012 23:00:02
Meteor
ся плата целиком будет в корпусе, так что каждый раз переключать джампера не очень-то удобно...
Как всегда даем советы находясь почти в полном неведении.
Поставьте разъемы под шлейф: разъединяете и подключаете программатор, соединяете и имеете связь между МК. :idea:

Re: Связь двух МК через обычный порт

Добавлено: Чт мар 15, 2012 23:17:26
radiolubitel2011
Meteor, вероятно, можно поставить переключатели и вывести из наружу. У меня как раз есть такой маленький тройной DIP-переключатель. Если его вывести наружу, то можно легко отключать при программировании, а затем обратно включать. Там ведь, вроде как раз 3 канала будет задействовано - SCK, MOSI, MISO. Или что-то ещё?

Re: Связь двух МК через обычный порт

Добавлено: Чт мар 15, 2012 23:22:34
Meteor
Для программирования еще надо вывести ресет

Re: Связь двух МК через обычный порт

Добавлено: Чт мар 15, 2012 23:30:24
radiolubitel2011
Нет, я про интерфейс SPI. По идее, программирование будет постоянно подключено, а этим переключателем я смогу включать/отключать передачу данных через SPI.

Re: Связь двух МК через обычный порт

Добавлено: Пт мар 16, 2012 01:07:10
demson
на USART у меня будет связь с компьютером
Тогда почему бы не применить бутлоадер? SPI освободится сразу.

Re: Связь двух МК через обычный порт

Добавлено: Пт мар 16, 2012 10:11:49
radiolubitel2011
Я прошу прощения, а что такое "бутлоадер"? И как его в данном случае применить?

Re: Связь двух МК через обычный порт

Добавлено: Пт мар 16, 2012 13:22:44
radiolubitel2011
Да, кстати, как вообще осуществлять передачу данных через интерфейс, к примеру, SPI?