Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > [avr] Работа с USART на ATmega8515 (Си) |
Автор: Zprime 22.8.2010, 18:50 |
Здравствуйте. Я занимаюсь программированием микроконтроллеров, и впервые столкнулся с весьма своеобразной проблемой - требуется передавать даные по протоколу USART между 2мя микроконтроллерами Atmel mega 8515. Суть проблемы в том, что вход и выход USART на каждом микроконтроллере объеденены физически одним проводом (примерно =---=), соответственно каждый раз при передаче данных первым МК, принимают данные оба, что каким-то образом блокирует приём данных от второго. Понимаю, что этот вопрос несколько отвлечён от общей тематики форума, но всё равно надеюсь на то, что кто-либо мог сталкиваться с чем-то подобным, и предложит какой-нибудь вариант решения. С уважением. |
Автор: Den64 22.8.2010, 19:42 |
Если использовать его как UART то там вывод Tx одного контроллера соединяется в выводом Rx другого. И Tx вывод другого контроллера соединяется с выводом Rx первого контроллера. Всё должно работать нормально. |
Автор: Zprime 22.8.2010, 19:54 |
В том-то и дело, что по проекту, есть возможность между всеми 4-мя выводами только 1 провод провести. Возможно, есть какие-нибудь аналоги битов TXEN и RXEN регистра UCSRB, которыми можно непосредственно в ходе программы активировать/деактивировать трансмит и ресив почерёдно? Или по ходу программы, сразу после передачи сбрасывать регистр приёма, и тогда он не будет забит к приёму значащей информации. Данные идут не потоком, а только как реакция на срабатывание кнопок. |
Автор: AVR32 22.8.2010, 22:30 | ||
Т.е. объёдинить Rx и Tx одного микроконтроллера с Rx и Tx другого в одну физическую цепь? Так? Да, можно, но немного программно усложниться приём/передача. По умолчанию в алгоритме должны быть вырублены передатчики. Так же надо будет подтянуть объёдинённую цепь к питанию через резистор - логическая “1”. |
Автор: cardinal 22.8.2010, 23:40 |
Zprime, а еще лучше сразу выкладывайте Вашу схему, чтобы понятней было, что Вам нужно сделать... |
Автор: UniBomb 27.8.2010, 14:07 |
А может быть в этом случае больше подойдёт 1-wire? |
Автор: Mazzi 27.10.2010, 14:28 | ||
Не вижу никаких проблем. Один мастер, остальные слейвы соединены одним проводом и Rx и Tx. Все устройства "слушают" линию. Перед передачей посылки выключается приём и спокойно передаём. После окончания передачи снова включаем приём. Для вашего случая (AtMega8515)
|
Автор: zumanah 21.1.2011, 16:54 |
Данные между процессорами должны передавться в одном направлении? Если да, то проблем нет - соединете ножку Tx мастера с ножкой Rx слейва и все в норме. Если же необходим двусторонний обмен, то при разветелении сигналов необходимо разделить процесс передачи по времени: 1) мастер настроен на передатчик, а слейв на приемник. 2) мастер посылает данные и переключается на приемик отключив передатчик, включив при этом время ожидание ответа (время через которое он опять включится на передатчик даже если ответ не пришел). 3) слейв получив посылку отключает приемник, включает передатчик и посылает посылку перед этим включив выдержку через которую посылка точно будет отпарвлено и он переключится на приемник. 4) Мастер получает посылку или проходит время ее ожидание и отключает приемник, включает передатчик. Далее по циклу. |