Обсуждаем контроллеры компании Atmel.
Ответить

Проблема со связью по Modbus на малой скорости

Вт дек 12, 2023 14:36:17

Приветствую всех.
Возникла проблема. Сопряжено по Modbus устройство на базе ATMega16 c ПК. Программа на основе freemodbus 1.5 отказывается работать на скорости 1200 бод. Со скоростями выше все в порядке.
К ПК подключено через преобразователь RS485-USB
С чем может быть связана такая проблема? Может кто сталкивался?

Re: Проблема со связью по Modbus на малой скорости

Вт дек 12, 2023 15:19:35

А осциллограммы смотрели?

Re: Проблема со связью по Modbus на малой скорости

Вт дек 12, 2023 15:27:29

Нет, не смотрел. Понять бы в какую сторону смотреть. Вроде скорость 1200 стандартная для модбас, и тут такая проблема на ровном месте

Re: Проблема со связью по Modbus на малой скорости

Ср дек 13, 2023 08:33:28

Не обязательно осциллографом, можно посмотреть логическим анализатором, подключившись прямо к одной из дифф линий. Землю можно не подключать, т.к. она будет через USB преобразователь скорее всего. Это на свой страх и риск.

Re: Проблема со связью по Modbus на малой скорости

Ср дек 13, 2023 08:59:41

Я бы посмотрел осциллом реальную скорость передачи 1200 бод с МК.
Например вот так: https://bravikov.wordpress.com/2014/10/ ... 0%B8-uart/

Re: Проблема со связью по Modbus на малой скорости

Ср дек 13, 2023 11:51:26

Проверил тестовой программой. Через USART на ПК идет сигнал на скорости 1200. Похоже проблема в библиотеке Freemodbus

Re: Проблема со связью по Modbus на малой скорости

Ср дек 13, 2023 12:37:54

Проверил тестовой программой. Через USART на ПК идет сигнал на скорости 1200. Похоже проблема в библиотеке Freemodbus

freemodbus использует аппаратный таймер МК для измерения интервалов. Я бы проверил настройки этого таймера.

Re: Проблема со связью по Modbus на малой скорости

Ср дек 13, 2023 13:22:15

Через USART на ПК идет сигнал на скорости 1200.
И как Вы об этом узнали? 8)

Re: Проблема со связью по Modbus на малой скорости

Ср дек 13, 2023 16:16:02

Всё, нашел. Это была единственная скорость из моего списка при которой задействован регистр UBRRH. В библиотеке freemodbus применялся только UBRRL

Re: Проблема со связью по Modbus на малой скорости

Ср дек 13, 2023 19:18:15

А так не?:)
Код:
#define BAUD              1200
#include <util/setbaud.h>

UBRRL = UBRRL_VALUE;
UBRRH = UBRRH_VALUE;

Re: Проблема со связью по Modbus на малой скорости

Чт дек 14, 2023 09:39:31

А так не?:)
Код:
#define BAUD              1200
#include <util/setbaud.h>

UBRRL = UBRRL_VALUE;
UBRRH = UBRRH_VALUE;


Так не. Скорости меняются в процессе работы путем записи в holding reg . Библиотека пересчитывала присланные значения, но почему то только задействуя UBRRL. Поскольку на других скоростях все работало, то проблема всплыла не сразу. Ну.. может кому пригодится инфа

Re: Проблема со связью по Modbus на малой скорости

Пт дек 15, 2023 03:45:58

Существует и другая беда. Есть куча калькуляторов для вычисления значений UBRR. Задал частоту, скорость и ниочём не думай. А вот какие значения будут для 300 bps на 16 мгц, к примеру?

Re: Проблема со связью по Modbus на малой скорости

Пт дек 15, 2023 09:03:40

Существует и другая беда. Есть куча калькуляторов для вычисления значений UBRR. Задал частоту, скорость и ниочём не думай. А вот какие значения будут для 300 bps на 16 мгц, к примеру?


Ну так 3333 ( D05)

Re: Проблема со связью по Modbus на малой скорости

Пт дек 15, 2023 12:44:11

Ой, ошибся.( Нужно было 110. А тогда получается 9090 или 0x2382, чувствуете?
Ответить