реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> 2 USART под RS485 на ATMega162
vetalxh
сообщение Mar 17 2009, 08:15
Сообщение #16





Группа: Новичок
Сообщений: 13
Регистрация: 28-06-08
Пользователь №: 38 608



Цитата(defunct @ Mar 17 2009, 03:19) *
А какие проблемы? далаете нормальный протоколо-независимый драйвер UART'а c буферизированным приемом и передачей.
Пишете две функции-задачи по очереди вызываемые в основном цикле программы, одна для обслуживания мастера, вторая для слейва. Никаких Delay_ms и прочий хлам не использовать!! Если слейв требует какого-то реалтайма для выдержки 3.5 символьного интервала, что организуется одним из таймеров, то modbus мастер - это совершенно неприхотливая задача. Выплевывать данные в UART и забирать ответ через скажем 100ms. Вот и вся ее суть.

В принципе, я так и сделал. На Slave постоянно включено прерывание по приему. И по завершению приема фрейма посылается ответ... А Master вызывается по прерыванию tim2. И вопрос в том, что Slave перебивает работу Mastera своими прерываниями. И Master посылает все время 1й запрос...А если выключаю устройство, которое подключено к Slave (то есть Slave не работает), Master начинает работать нормально...
А если на время работы Мастера запрещать Слейв, то обратно включить не могу его..Молчит..Может подскажите что?
Цитата(defunct @ Mar 17 2009, 03:19) *
Какой смысл ставить такой медленный кварц, и пользовать только ~20% производительности МК?

Ну это да, согласен, что протупил...Исправлю...
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 17 2009, 08:43
Сообщение #17


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(defunct @ Mar 17 2009, 04:19) *
для выдержки 3.5 символьного интервала, что организуется одним из таймеров

Можно вообще обнаглеть и использовать dummy writes при выключенном передатчике. Будет 4. Кунсткамера, но экономненько smile.gif
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 17 2009, 08:52
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(vetalxh @ Mar 17 2009, 11:15) *
И вопрос в том, что Slave перебивает работу Mastera своими прерываниями. И Master посылает все время 1й запрос...А если выключаю устройство, которое подключено к Slave (то есть Slave не работает), Master начинает работать нормально...
Очень похоже, что у Slave разрешено какое-то прерывание, а соответствующей процедуры обработки этого прерывания - нет. При этом происходит переход на ячейку с адресом 0, и всё - заново с первой посылки Master'а...
Go to the top of the page
 
+Quote Post
vetalxh
сообщение Mar 17 2009, 10:47
Сообщение #19





Группа: Новичок
Сообщений: 13
Регистрация: 28-06-08
Пользователь №: 38 608



Цитата(Палыч @ Mar 17 2009, 11:52) *
Очень похоже, что у Slave разрешено какое-то прерывание, а соответствующей процедуры обработки этого прерывания - нет. При этом происходит переход на ячейку с адресом 0, и всё - заново с первой посылки Master'а...

Точно. a14.gif
Напутал с регистром UCSR1B. Разрешил прерывание по "завершению передачи" (его вообще в программе не использовал), а прерывание по "очистке регистра передатчика" вообще не включено было.. Как оно вообще работало...хз... biggrin.gif
Спасибо beer.gif
Вечером попробую на устройстве..Отпишусь
Go to the top of the page
 
+Quote Post
sitafern
сообщение Mar 22 2009, 10:13
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 8-08-05
Пользователь №: 7 466



Цитата(vetalxh @ Mar 15 2009, 22:31) *
Здравия желаю всем !

Делаю устройство на Mega162 с двумя протоколами modbus.
USART0 - master, посылает всего 11 разных запросов. USART1 - slave, отвечает на эти 11 запросов с некоторыми корректировками. То есть устройство устанавливается между master и slave и общается с ними с нужными мне исправлениями.

В общем, сделал отдельно master и slave - работает, но когда все в целом, то работает только slave, а master зацикливается на 1-й посылке, иногда 2-я проскакивает.

Вроде проблема с прерываниями, т.к. slave постоянно принимает и отвечает, и не дает master работать. Игрался с запретом прерываний, но ничего не помогло.

Также делал чтобы slave принял, ответил, а потом master послал, принял, поочередно, но так теряется слейвом фреймы.

У кого могут быть какие идеи? Такое устройство возможно ли вообще?

Мега162, кварц - 3,6864... Параметры связи обоих 2400-О-1...

Делал такое: модбас на меге 162 в два USARTA, без прерываний (только переполнение таймера для интервалов), работает устойчиво на 115200. Кстати, действительно, почему такая маленькая частота кварца? Подсчёт контрольной суммы "на лету". Написано на ассемблере. Если интересно могу выслать исходник без дешифратора команд и других "прибамбасов".
Только работа USATR'ов. Мой адрес sitafern@ukr.net
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 22 2009, 12:44
Сообщение #21


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(sitafern @ Mar 22 2009, 14:13) *
Если интересно могу выслать исходник без дешифратора команд и других "прибамбасов".

Недавний опыт общения показал: не надо сишников снабжать асмовыми исходниками. Пусть задохнутся. sad.gif
Go to the top of the page
 
+Quote Post
vetalxh
сообщение Mar 22 2009, 16:41
Сообщение #22





Группа: Новичок
Сообщений: 13
Регистрация: 28-06-08
Пользователь №: 38 608



Цитата(_Pasha @ Mar 22 2009, 15:44) *
Недавний опыт общения показал: не надо сишников снабжать асмовыми исходниками. Пусть задохнутся. sad.gif


А к чему это написано??
Go to the top of the page
 
+Quote Post
vetalxh
сообщение Mar 22 2009, 20:17
Сообщение #23





Группа: Новичок
Сообщений: 13
Регистрация: 28-06-08
Пользователь №: 38 608



Утройство сделал. Даже хватило кварца на 3,6864....Всем спасибо за помощь. Отдельное спасибо defunct и Палыч a14.gif
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 20:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01421 секунд с 7
ELECTRONIX ©2004-2016