почему не работает RS485
|
|
vladh |
Дата: Ср, 02.09.2015, 11:17 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Добрый день. Второй день не могу разобраться. Написал простой код передачи данных по USART. Вроде как работает. Хотя, через некоторое время работы данные пятого измерения начинают повторять первое измерение. Затем соединяю те же МК через MAX487. Код тот же. Но данные чего то не передаются. Где отгадка на это дело?
Добавлено (02.09.2015, 10:37) --------------------------------------------- Жаль, что никто не высказал своих догадок .Ну да ладно. Сегодня мне удалось добиться положительного результата. Правда в некоторых случаях я не понимаю почему это приводит к положительному эффекту. 1. Если в коде приемника(Pult.bas)? перед строками, которые осуществляют вывод на LCD, установить запрет прерываний, а в строке 44 их снова разрешить, то программа общения по RS232 станет более стабильной.
INTCON.7 =0 If I < 4 Then Print At I+1,1,Dec Number If I= 4 Then Print At 1,11,Dec Number INTCON.7= 1
2. И если в коде передатчика(Peredatchik.bas) в 36 строке убратьпереключение порта C.5 наприем (PORTС.5 = 0), тотогда и в случае с RS485все работает. Но мне, вообще то, надо переводить приемник USART в процессе работытуда-сюда. Как теперь выйти из этой проблемы?Добавлено (02.09.2015, 11:17) --------------------------------------------- Сегодня добавил новую запись, в которой указаны некоторые ошибки в исходном коде, а редактор поместил мою запись в предыдущий блок. И в результате далеко не сразу видно, что были сделаны изменения к предыдущему, а также старый пример находится в месте, в котором подразумевался бы он как новый. что то не так работает.
Сообщение отредактировал
vladh - Ср, 02.09.2015, 10:39
|
|
|
|
ivan_fd |
Дата: Ср, 02.09.2015, 12:36 | Сообщение # 2 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Цитата vladh ( ) 2. И если в коде передатчика(Peredatchik.bas) в 36 строке убратьпереключение порта C.5 наприем (PORTС.5 = 0), тотогда и в случае с RS485все работает. Но мне, вообще то, надо переводить приемник USART в процессе работытуда-сюда. Как теперь выйти из этой проблемы?
Поставьте после Код HSerOut [n, Napr] ' ×òåíèå ÀÖÏ À.n небольшую паузу и можно переводить в приемник.
|
|
|
|
vladh |
Дата: Ср, 02.09.2015, 12:43 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата ivan_fd ( ) Поставьте послеКод HSerOut [n, Napr] ' ×òåíèå ÀÖÏ À.n небольшую паузу и можно переводить в приемник. Пробовал. И даже большую паузу. Не помогало.
|
|
|
|
ivan_fd |
Дата: Ср, 02.09.2015, 15:21 | Сообщение # 4 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Что не помогало, не передаются данные? Я посмотрел терминалом, что на передаче то и на приеме, совпадает, с паузой в 10мс.
|
|
|
|
vladh |
Дата: Ср, 02.09.2015, 16:17 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Если в режиме только USART, все передается. Но если в режиме RS485 - нет. Причем вроде как по на экране в том месте где должно меняться значение передаваемой величины первого АЦП, отображается не нулевое значение. Чаще всего 255. Но постоянное, хотя движок переменника меняется. И еще. Если анализировать пошаговый режим, то можно увидеть, что в режиме USART (схема RS232) код пульта на команду приема данных тратит 18 мкс на команду HSerIn. Зато в другом режиме (схема RS485) эта же команда выполняется с с переменным временем. То 18 мкс, то 8,6 мс, то 8,1 мс, то снова 18 мкс. Почему? Ведь МК не знают, что у них в цепи появились М/сх MAX487. Причем, если отключить в передатчике переключение вывода на прием(ПОРТС.5 = 0) то время отработки этой команды становится таким же как и без М/схем MAX487. Вновь подключил немного переделанные примеры.Добавлено (02.09.2015, 16:17) --------------------------------------------- Кстати, сейчас проверил на реальном объекте. Передача не только по чистому USART идет нормально, но и по RS485. Похоже что Протеус не дорабатывает.
|
|
|
|
AndrF |
Дата: Ср, 02.09.2015, 17:23 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
145
Замечания:
±
На сайте с 03.02.2012
Статус:
Offline
|
А нагрузка-то в линии есть? Какая?
Лично я применял ADM2582E/2587E - интересные микросхемки, представляющие из себя конвертор с опторазвязкой. Все работало нормально. Но я не на протоне писал. Точнее сначала на нем, а потом съехал на Swordfish.
|
|
|
|
dimvad |
Дата: Ср, 02.09.2015, 19:15 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
80
Замечания:
±
На сайте с 20.07.2012
Статус:
Offline
|
Странно, а у меня если задержку 10мс убрать, то все работает, а с ней висит 255
|
|
|
|
vladh |
Дата: Чт, 03.09.2015, 08:25 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата dimvad ( ) Странно, а у меня если задержку 10мс убрать, то все работает, а с ней висит 255 Что интересно и у меня дома пример стал себя вести также. Т.е. если задержку убрать то информация принимается и время выполнения команды приема одно и то же - 18 мкс. С задержкой все плохо. Утром, на работе еще раз проверю.Добавлено (03.09.2015, 08:25) --------------------------------------------- Странно, сейчас попробовал на работе. Все так как написал dimvad. Но попробовал переместить команду на передачу(ПОРТС.5 = 1) поставив её перед непосредственной передачей, как сразу все испаганилось. И уже наличие или отсутствие задержки после передачи мало влияет. Все равно передача идет плохо.
|
|
|
|
ivan_fd |
Дата: Чт, 03.09.2015, 09:32 | Сообщение # 9 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
vladh, а Вы какой пример пробовали, dimvad?
Если да, то посмотрите внимательно на настройки скорости (19200) Эта скорость, при кварце 8МГц, дает ошибку.
Хотя, смотрю Код 'Declare Hserial_SPBRG 6 ; Значение регистра SPBRG для выбранной скорости у Вас закоментировано, и компилятор сам пишет в регистр SPBRG.
Сообщение отредактировал
ivan_fd - Чт, 03.09.2015, 09:46
|
|
|
|
vladh |
Дата: Чт, 03.09.2015, 11:43 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата ivan_fd ( ) vladh, а Вы какой пример пробовали, dimvad? И dimvad'а и свой. Я так думаю если установки скорости стоят одинаковые и в приемнике, и в передатчике, ошибка будет у обоих одинакова и поэтому они должны друг с другом "разговаривать". Вот для общения с комп-ом могли быть проблемы.Добавлено (03.09.2015, 11:43) ---------------------------------------------
Цитата AndrF ( ) Лично я применял ADM2582E/2587E - интересные микросхемки, представляющие из себя конвертор с опторазвязкой. Все работало нормально. Но я не на протоне писал. Точнее сначала на нем, а потом съехал на Swordfish Вживую я использую MAX485, а в Протеусе - то что нашел. На Рыбе очень тяжело писать для 16F877A .
|
|
|
|
AndrF |
Дата: Чт, 03.09.2015, 12:07 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
145
Замечания:
±
На сайте с 03.02.2012
Статус:
Offline
|
Цитата vladh ( ) На Рыбе очень тяжело писать для 16F877A Ну так зачем выискивать древние чипы - чтобы себя ограничивать? К тому же и стоят они зачастую дороже современных.
|
|
|
|
vladh |
Дата: Чт, 03.09.2015, 12:33 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата AndrF ( ) Ну так зачем выискивать древние чипы - чтобы себя ограничивать? К тому же и стоят они зачастую дороже современных. Все не так просто в этом подлунном мире. У меня стоит задача и её надо закончить к декабрю. Плата уже разложена и изготовлена под неё, да и распаяна. Не подключены только внешние цепи. Под этот контроллер я часто писал программы. И пока проблем не было. Так что к контроллеру вопросов нет. Рыба же, насколько я знаю, заточена под 18 серию. А это очень узкая специализация. А значит осваивать этот язык не перспективно. Скорее лучще осваивать МикроБейсик. Там и АВРы и АРМы и многое другое.
Сообщение отредактировал
vladh - Чт, 03.09.2015, 12:34
|
|
|
|
AndrF |
Дата: Чт, 03.09.2015, 13:48 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
145
Замечания:
±
На сайте с 03.02.2012
Статус:
Offline
|
Цитата vladh ( ) Рыба же, насколько я знаю, заточена под 18 серию. А это очень узкая специализация. А значит осваивать этот язык не перспективно. Неправда. Дальнейшее развитие рыбы - Firewing. Можно использовать сразу его, тем более что бесплатен и работает со всеми сериями, начиная с 18-ой.
И вы так и не написали - нагрузка-то в линии есть и какая? Какая длина линии?
--------------------------- Я работал вообще без прерываний. Просто опрашивал входной буфер в цикле...
Сообщение отредактировал
AndrF - Чт, 03.09.2015, 14:10
|
|
|
|
vladh |
Дата: Чт, 03.09.2015, 14:34 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата AndrF ( ) Дальнейшее развитие рыбы - Firewing. Можно использовать сразу его, тем более что бесплатен и работает со всеми сериями, начиная с 18-ой. При беглом взгляде на Ваш Firewing там начиная с 8 разрядной серии, но почему то пропуская 14 разрядную. Ну да ладно. О вкусах и пристрастиях спорить бесполезно. Цитата AndrF ( ) И вы так и не написали - нагрузка-то в линии есть и какая? Какая длина линии? Сейчас длина линии 10 см! Нагрузка с двух сторон 120 Ом. Но я пока живую модель почти не трогаю. Провожу эксперименты в Протеусе. Это он мне сейчас сильно морочит голову. Вот я прикладываю свою работу, правда чуть подсокращенную. Так вот я устанавливаю точку останова на начало подпрограммы прерывания кода Apparat.bas(левый контроллер) И хочу спросить. Может кто догадается почему после запуска симуляции через 559 мкс этот Мк переходит на обработку прерываний? Причем это для случая RS485 интерфейса. В случае связи по USART такого нет.
|
|
|
|
ivan_fd |
Дата: Чт, 03.09.2015, 15:34 | Сообщение # 15 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Прерывание происходит когда Вы устанавливаете в пульте PORTC.5 = 0. Видимо в MAX487 меняется уровень на выходе, и приемник думает, что, что то пришло и устанавливает флаг прерывания по USART.
|
|
|
|