Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: управление ADM485
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
vitko
Как можно заставить AVR апаратно генерить сигнал разрешение передачи DE для ADM485 при обнаружении старт бита?
Завожу сигнал передачи от MAX232 на вход Т0 и конфигурирую таймер0 на внешний сигнал по спадающему фронту, таймер должен дергать выводом ОС0А по совпадению А, задаю TCNT=(OCRА-1) чтоб нога ОС0А дергалась по первому же спаду. Но она дергается только по второму.
Можно это как то по другому организовать без внешних элементов - платка маленькая, некуда их впаивать?
NVade
ADM должен быть всегда в приеме!
принял, разобрал, перевел в передачу, передал и опять в прием.
Если же имеется в виду просто конвертор rs232-485, то его можно и без контроллера сделать.
alexander55
Цитата(vitko @ Oct 3 2007, 13:27) *
Как можно заставить AVR апаратно генерить сигнал разрешение передачи DE для ADM485 при обнаружении старт бита?
Завожу сигнал передачи от MAX232 на вход Т0 и конфигурирую таймер0 на внешний сигнал по спадающему фронту, таймер должен дергать выводом ОС0А по совпадению А, задаю TCNT=(OCRА-1) чтоб нога ОС0А дергалась по первому же спаду. Но она дергается только по второму.
Можно это как то по другому организовать без внешних элементов - платка маленькая, некуда их впаивать?

Эта тема обсуждалась в форуме по интерфейсам. Там есть хорошее решение от Сергея Борща.
defunct
Цитата(vitko @ Oct 3 2007, 12:27) *
Как можно заставить AVR апаратно генерить сигнал разрешение передачи DE для ADM485 при обнаружении старт бита?

аппаратно никак.
если речь о конвертере 232<->485, то проблема решается диодом и RC цепочкой.
vitko
Устройство - проеобразователь RS232/485 c настраиваемой скоростью на тини2313, MAX232, ADM485. У ADM485 RE всегда разрешен, DE - включается от тини2313 только на время передачи 1 байта при обнаружении стартбита от RS232. Стартбит ловится по внешнему прерыванию, по которому включается DE. Только получается слишком большая задержка включения на 115200 - бывают сбои. Вот и думаю как выкрутиться с минимумом переделок - желательно используя возможности контроллера

А судя по даташиту таймер/счетчик должен ловить каждый фронт/спад внешнего сигнала:

An external clock source applied to the T1/T0 pin can be used as Timer/Counter clock
(clkT1/clkT0). The T1/T0 pin is sampled once every system clock cycle by the pin synchronization
logic. The synchronized (sampled) signal is then passed through the edge
detector. Figure 38 shows a functional equivalent block diagram of the T1/T0 synchronization
and edge detector logic. The registers are clocked at the positive edge of the
internal system clock (clkI/O). The latch is transparent in the high period of the internal
system clock.
The edge detector generates one clkT1/clkT0 pulse for each positive (CSn2:0 = 7) or negative
(CSn2:0 = 6) edge it detects.

Но у меня почемо-то начинает счет со второго перепада - проверял и при счете по фронту, и по спаду...
defunct
Цитата(vitko @ Oct 3 2007, 14:52) *
Вот и думаю как выкрутиться с минимумом переделок - желательно используя возможности контроллера

Вот думаю зачем тут контроллер, если трафик через него не проходит.
Может быть проще сделать просто конвертер 232<->485 с работой в широком диапазоне скоростей? И tiny не нужен. В инете есть куча схем конвертеров с подробным описанием работы, некоторые из них можно посмотреть здесь http://www.rs485.com/pconverters.html. Советую начать с этого.
Dog Pawlowa
Цитата(vitko @ Oct 3 2007, 12:27) *
Как можно заставить AVR апаратно генерить сигнал разрешение передачи DE для ADM485 при обнаружении старт бита?
Завожу сигнал передачи от MAX232 на вход Т0 и конфигурирую таймер0 на внешний сигнал по спадающему фронту, таймер должен дергать выводом ОС0А по совпадению А, задаю TCNT=(OCRА-1) чтоб нога ОС0А дергалась по первому же спаду. Но она дергается только по второму.
Можно это как то по другому организовать без внешних элементов - платка маленькая, некуда их впаивать?

Для повышения помехоустойчивости обычно рекомендуется, чтобы передача была включена не менее длительности одного байта до посылки первого стартового бита. То есть нужно установить программно передачу, запустить соответствующий тайм-аут, после его окончания передать байт.
Сейчас подтянется народ и скажет, что все работает и так. Бремя выбора правильного решения за Вами smile.gif
Ага, применение увидел... Стирать не буду, совет такой - сделайте
разрешение Tx = сигнал, которым запускаете "одновибратор" ИЛИ сигнал самого одновибратора. Ну, с точностью до полярностей smile.gif
alexander55
[quote name='vitko' date='Oct 3 2007, 15:52' post='302283']
Устройство - проеобразователь RS232/485 c настраиваемой скоростью на тини2313, MAX232, ADM485. У ADM485 RE всегда разрешен, DE - включается от тини2313 только на время передачи 1 байта при обнаружении стартбита от RS232.
[quote]
Все оказывается проще, чем Вы вначале нарисовали.

Я решал задачу так.
1.На ADM485 RE и DE соединены вместе.
2.При инициализации запрещение передачи (разрешение приема).
3.Перед передачей пакета разрешаю передачу (запрещается прием).
4.По окончанию передачи (прерывание TxC) ее запрещаю (разрешается прием).

PS. Не так страшен черт, как его малютки. (Афоризм).
IceS
Цитата(vitko @ Oct 3 2007, 13:27) *
... апаратно генерить сигнал разрешение передачи DE для ADM485 при обнаружении старт бита?


Со стороны компа можно управлять направлением передачи, к примеру, линией RTS.

Можно сделать переходник USB<=>RS-485 на FT232R+ADM485 или FT232R+ADM2483+DC/DC. Со стороны компа девайс будет выглядеть как COM-порт. FT232R аппаратно переключает прием/передачу. Второй вариант с ADM2483 получается дороже, но! с гальванической развязкой (а без нее 485, как правило, бесполезен ибо стоит куча девайсов и выход из строя компа это дело времени) и малоточным питанием драйверов шины RS-485.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.