![]() |
Модераторы: PILOT, ManiaK, Mazzi |
![]() ![]() ![]() |
|
Zprime |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 22.8.2010 Репутация: нет Всего: нет |
Здравствуйте.
Я занимаюсь программированием микроконтроллеров, и впервые столкнулся с весьма своеобразной проблемой - требуется передавать даные по протоколу USART между 2мя микроконтроллерами Atmel mega 8515. Суть проблемы в том, что вход и выход USART на каждом микроконтроллере объеденены физически одним проводом (примерно =---=), соответственно каждый раз при передаче данных первым МК, принимают данные оба, что каким-то образом блокирует приём данных от второго. Понимаю, что этот вопрос несколько отвлечён от общей тематики форума, но всё равно надеюсь на то, что кто-либо мог сталкиваться с чем-то подобным, и предложит какой-нибудь вариант решения. С уважением. |
|||
|
||||
Den64 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 6.4.2006 Где: Курск Репутация: 1 Всего: 2 |
Если использовать его как UART то там вывод Tx одного контроллера соединяется в выводом Rx другого. И Tx вывод другого контроллера соединяется с выводом Rx первого контроллера. Всё должно работать нормально.
--------------------
Инагда пишу звуками. |
|||
|
||||
Zprime |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 22.8.2010 Репутация: нет Всего: нет |
В том-то и дело, что по проекту, есть возможность между всеми 4-мя выводами только 1 провод провести. Возможно, есть какие-нибудь аналоги битов TXEN и RXEN регистра UCSRB, которыми можно непосредственно в ходе программы активировать/деактивировать трансмит и ресив почерёдно? Или по ходу программы, сразу после передачи сбрасывать регистр приёма, и тогда он не будет забит к приёму значащей информации. Данные идут не потоком, а только как реакция на срабатывание кнопок.
|
|||
|
||||
AVR32 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 28.4.2007 Где: СПб Репутация: 1 Всего: 1 |
Т.е. объёдинить Rx и Tx одного микроконтроллера с Rx и Tx другого в одну физическую цепь? Так? Да, можно, но немного программно усложниться приём/передача. По умолчанию в алгоритме должны быть вырублены передатчики. Так же надо будет подтянуть объёдинённую цепь к питанию через резистор - логическая “1”. |
|||
|
||||
cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 8 Всего: 99 |
Zprime, а еще лучше сразу выкладывайте Вашу схему, чтобы понятней было, что Вам нужно сделать...
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
А может быть в этом случае больше подойдёт 1-wire?
|
|||
|
||||
Mazzi |
|
|||
![]() Правильный ![]() ![]() Профиль Группа: Комодератор Сообщений: 825 Регистрация: 3.4.2003 Репутация: 9 Всего: 21 |
Не вижу никаких проблем. Один мастер, остальные слейвы соединены одним проводом и Rx и Tx.
Все устройства "слушают" линию. Перед передачей посылки выключается приём и спокойно передаём. После окончания передачи снова включаем приём. Для вашего случая (AtMega8515)
-------------------- Мне нужны помощники. |
|||
|
||||
zumanah |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Данные между процессорами должны передавться в одном направлении? Если да, то проблем нет - соединете ножку Tx мастера с ножкой Rx слейва и все в норме. Если же необходим двусторонний обмен, то при разветелении сигналов необходимо разделить процесс передачи по времени: 1) мастер настроен на передатчик, а слейв на приемник. 2) мастер посылает данные и переключается на приемик отключив передатчик, включив при этом время ожидание ответа (время через которое он опять включится на передатчик даже если ответ не пришел). 3) слейв получив посылку отключает приемник, включает передатчик и посылает посылку перед этим включив выдержку через которую посылка точно будет отпарвлено и он переключится на приемник. 4) Мастер получает посылку или проходит время ее ожидание и отключает приемник, включает передатчик. Далее по циклу.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |