vetalxh 0 17 марта, 2009 Опубликовано 17 марта, 2009 · Жалоба А какие проблемы? далаете нормальный протоколо-независимый драйвер UART'а c буферизированным приемом и передачей. Пишете две функции-задачи по очереди вызываемые в основном цикле программы, одна для обслуживания мастера, вторая для слейва. Никаких Delay_ms и прочий хлам не использовать!! Если слейв требует какого-то реалтайма для выдержки 3.5 символьного интервала, что организуется одним из таймеров, то modbus мастер - это совершенно неприхотливая задача. Выплевывать данные в UART и забирать ответ через скажем 100ms. Вот и вся ее суть. В принципе, я так и сделал. На Slave постоянно включено прерывание по приему. И по завершению приема фрейма посылается ответ... А Master вызывается по прерыванию tim2. И вопрос в том, что Slave перебивает работу Mastera своими прерываниями. И Master посылает все время 1й запрос...А если выключаю устройство, которое подключено к Slave (то есть Slave не работает), Master начинает работать нормально... А если на время работы Мастера запрещать Слейв, то обратно включить не могу его..Молчит..Может подскажите что? Какой смысл ставить такой медленный кварц, и пользовать только ~20% производительности МК? Ну это да, согласен, что протупил...Исправлю... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 17 марта, 2009 Опубликовано 17 марта, 2009 · Жалоба для выдержки 3.5 символьного интервала, что организуется одним из таймеров Можно вообще обнаглеть и использовать dummy writes при выключенном передатчике. Будет 4. Кунсткамера, но экономненько :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 8 17 марта, 2009 Опубликовано 17 марта, 2009 · Жалоба И вопрос в том, что Slave перебивает работу Mastera своими прерываниями. И Master посылает все время 1й запрос...А если выключаю устройство, которое подключено к Slave (то есть Slave не работает), Master начинает работать нормально...Очень похоже, что у Slave разрешено какое-то прерывание, а соответствующей процедуры обработки этого прерывания - нет. При этом происходит переход на ячейку с адресом 0, и всё - заново с первой посылки Master'а... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vetalxh 0 17 марта, 2009 Опубликовано 17 марта, 2009 · Жалоба Очень похоже, что у Slave разрешено какое-то прерывание, а соответствующей процедуры обработки этого прерывания - нет. При этом происходит переход на ячейку с адресом 0, и всё - заново с первой посылки Master'а... Точно. :a14: Напутал с регистром UCSR1B. Разрешил прерывание по "завершению передачи" (его вообще в программе не использовал), а прерывание по "очистке регистра передатчика" вообще не включено было.. Как оно вообще работало...хз... Спасибо :beer: Вечером попробую на устройстве..Отпишусь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sitafern 0 22 марта, 2009 Опубликовано 22 марта, 2009 · Жалоба Здравия желаю всем ! Делаю устройство на 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'ов. Мой адрес [email protected] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 22 марта, 2009 Опубликовано 22 марта, 2009 · Жалоба Если интересно могу выслать исходник без дешифратора команд и других "прибамбасов". Недавний опыт общения показал: не надо сишников снабжать асмовыми исходниками. Пусть задохнутся. :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vetalxh 0 22 марта, 2009 Опубликовано 22 марта, 2009 · Жалоба Недавний опыт общения показал: не надо сишников снабжать асмовыми исходниками. Пусть задохнутся. :( А к чему это написано?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vetalxh 0 22 марта, 2009 Опубликовано 22 марта, 2009 · Жалоба Утройство сделал. Даже хватило кварца на 3,6864....Всем спасибо за помощь. Отдельное спасибо defunct и Палыч :a14: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться