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

 
 
> 2 USART под RS485 на ATMega162
vetalxh
сообщение Mar 15 2009, 20:31
Сообщение #1





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



Здравия желаю всем !

Делаю устройство на 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...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
defunct
сообщение Mar 17 2009, 00:19
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(vetalxh @ Mar 15 2009, 22:31) *
У кого могут быть какие идеи? Такое устройство возможно ли вообще?

А какие проблемы? далаете нормальный протоколо-независимый драйвер UART'а c буферизированным приемом и передачей.
Пишете две функции-задачи по очереди вызываемые в основном цикле программы, одна для обслуживания мастера, вторая для слейва. Никаких Delay_ms и прочий хлам не использовать!! Если слейв требует какого-то реалтайма для выдержки 3.5 символьного интервала, что организуется одним из таймеров, то modbus мастер - это совершенно неприхотливая задача. Выплевывать данные в UART и забирать ответ через скажем 100ms. Вот и вся ее суть.

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

Какой смысл ставить такой медленный кварц, и пользовать только ~20% производительности МК?
Go to the top of the page
 
+Quote Post
vetalxh
сообщение Mar 17 2009, 08:15
Сообщение #3





Группа: Новичок
Сообщений: 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
Палыч
сообщение Mar 17 2009, 08:52
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #5





Группа: Новичок
Сообщений: 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

Сообщений в этой теме
- vetalxh   2 USART под RS485 на ATMega162   Mar 15 2009, 20:31
- - smac   Цитата(vetalxh @ Mar 15 2009, 23:31) ... ...   Mar 15 2009, 21:09
|- - vetalxh   Цитата(smac @ Mar 16 2009, 01:09) Устройс...   Mar 15 2009, 22:38
- - vetalxh   Кода вообще много... Постараюсь основное. Сильно н...   Mar 15 2009, 21:31
- - sensor_ua   Не разбирался, но взглянул. Заметил такое: выключе...   Mar 15 2009, 22:43
|- - vetalxh   1) С работой слейва проблем не возникало. Смотрю м...   Mar 15 2009, 22:57
- - Огурцов   Цитата(vetalxh @ Mar 15 2009, 20:31) Врод...   Mar 15 2009, 23:06
- - sensor_ua   ЦитатаВопрос с 3.5 задержкой связан с готовым устр...   Mar 15 2009, 23:06
- - vetalxh   sensor_ua, спасибо, буду думать... А можно по-подр...   Mar 15 2009, 23:42
|- - Огурцов   Организуйте прерывание от таймера и проверяйте в н...   Mar 15 2009, 23:51
|- - vetalxh   Цитата(Огурцов @ Mar 16 2009, 03:51) Орга...   Mar 16 2009, 00:11
|- - vetalxh   В прерывании таймера проверять оба уарта? А если п...   Mar 16 2009, 09:08
|- - smac   Цитата(vetalxh @ Mar 16 2009, 12:08) В пр...   Mar 16 2009, 19:37
|- - vetalxh   Короче, думал-думал...Решил обойти все это еще одн...   Mar 16 2009, 22:26
|- - _Pasha   Цитата(defunct @ Mar 17 2009, 04:19) для ...   Mar 17 2009, 08:43
- - sitafern   Цитата(vetalxh @ Mar 15 2009, 22:31) Здра...   Mar 22 2009, 10:13
|- - _Pasha   Цитата(sitafern @ Mar 22 2009, 14:13) Есл...   Mar 22 2009, 12:44
|- - vetalxh   Цитата(_Pasha @ Mar 22 2009, 15:44) Недав...   Mar 22 2009, 16:41
- - vetalxh   Утройство сделал. Даже хватило кварца на 3,6864......   Mar 22 2009, 20:17


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

 


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


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