Проблема со связью по Modbus на малой скорости
Проблема со связью по Modbus на малой скорости
Приветствую всех.
Возникла проблема. Сопряжено по Modbus устройство на базе ATMega16 c ПК. Программа на основе freemodbus 1.5 отказывается работать на скорости 1200 бод. Со скоростями выше все в порядке.
К ПК подключено через преобразователь RS485-USB
С чем может быть связана такая проблема? Может кто сталкивался?
Возникла проблема. Сопряжено по Modbus устройство на базе ATMega16 c ПК. Программа на основе freemodbus 1.5 отказывается работать на скорости 1200 бод. Со скоростями выше все в порядке.
К ПК подключено через преобразователь RS485-USB
С чем может быть связана такая проблема? Может кто сталкивался?
Re: Проблема со связью по Modbus на малой скорости
Нет, не смотрел. Понять бы в какую сторону смотреть. Вроде скорость 1200 стандартная для модбас, и тут такая проблема на ровном месте
- uni
- Встал на лапы
- Сообщения: 137
- Зарегистрирован: Пт дек 07, 2007 11:17:40
- Откуда: г. Екатеринбург
- Контактная информация:
Re: Проблема со связью по Modbus на малой скорости
Не обязательно осциллографом, можно посмотреть логическим анализатором, подключившись прямо к одной из дифф линий. Землю можно не подключать, т.к. она будет через USB преобразователь скорее всего. Это на свой страх и риск.
Россия навсегда!
Re: Проблема со связью по Modbus на малой скорости
Я бы посмотрел осциллом реальную скорость передачи 1200 бод с МК.
Например вот так: https://bravikov.wordpress.com/2014/10/ ... 0%B8-uart/
Например вот так: https://bravikov.wordpress.com/2014/10/ ... 0%B8-uart/
Re: Проблема со связью по Modbus на малой скорости
Проверил тестовой программой. Через USART на ПК идет сигнал на скорости 1200. Похоже проблема в библиотеке Freemodbus
Re: Проблема со связью по Modbus на малой скорости
[uquote="Andrew33",url="/forum/viewtopic.php?p=4517039#p4517039"]Проверил тестовой программой. Через USART на ПК идет сигнал на скорости 1200. Похоже проблема в библиотеке Freemodbus[/uquote]
freemodbus использует аппаратный таймер МК для измерения интервалов. Я бы проверил настройки этого таймера.
freemodbus использует аппаратный таймер МК для измерения интервалов. Я бы проверил настройки этого таймера.
Re: Проблема со связью по Modbus на малой скорости
[uquote="Andrew33",url="/forum/viewtopic.php?p=4517039#p4517039"]Через USART на ПК идет сигнал на скорости 1200.[/uquote]И как Вы об этом узнали? 
Re: Проблема со связью по Modbus на малой скорости
Всё, нашел. Это была единственная скорость из моего списка при которой задействован регистр UBRRH. В библиотеке freemodbus применялся только UBRRL
Re: Проблема со связью по Modbus на малой скорости
А так не?:)
Код: Выделить всё
#define BAUD 1200
#include <util/setbaud.h>
UBRRL = UBRRL_VALUE;
UBRRH = UBRRH_VALUE;
Re: Проблема со связью по Modbus на малой скорости
[uquote="OKF",url="/forum/viewtopic.php?p=4517189#p4517189"]А так не?:)
[/uquote]
Так не. Скорости меняются в процессе работы путем записи в holding reg . Библиотека пересчитывала присланные значения, но почему то только задействуя UBRRL. Поскольку на других скоростях все работало, то проблема всплыла не сразу. Ну.. может кому пригодится инфа
Код: Выделить всё
#define BAUD 1200
#include <util/setbaud.h>
UBRRL = UBRRL_VALUE;
UBRRH = UBRRH_VALUE;
Так не. Скорости меняются в процессе работы путем записи в holding reg . Библиотека пересчитывала присланные значения, но почему то только задействуя UBRRL. Поскольку на других скоростях все работало, то проблема всплыла не сразу. Ну.. может кому пригодится инфа
Re: Проблема со связью по Modbus на малой скорости
Существует и другая беда. Есть куча калькуляторов для вычисления значений UBRR. Задал частоту, скорость и ниочём не думай. А вот какие значения будут для 300 bps на 16 мгц, к примеру?
Re: Проблема со связью по Modbus на малой скорости
[uquote="OKF",url="/forum/viewtopic.php?p=4517737#p4517737"]Существует и другая беда. Есть куча калькуляторов для вычисления значений UBRR. Задал частоту, скорость и ниочём не думай. А вот какие значения будут для 300 bps на 16 мгц, к примеру?[/uquote]
Ну так 3333 ( D05)
Ну так 3333 ( D05)
Re: Проблема со связью по Modbus на малой скорости
Ой, ошибся.( Нужно было 110. А тогда получается 9090 или 0x2382, чувствуете?