Обсуждаем контроллеры компании Atmel.
Вт дек 12, 2023 14:36:17
Приветствую всех.
Возникла проблема. Сопряжено по Modbus устройство на базе ATMega16 c ПК. Программа на основе freemodbus 1.5 отказывается работать на скорости 1200 бод. Со скоростями выше все в порядке.
К ПК подключено через преобразователь RS485-USB
С чем может быть связана такая проблема? Может кто сталкивался?
Вт дек 12, 2023 15:19:35
А осциллограммы смотрели?
Вт дек 12, 2023 15:27:29
Нет, не смотрел. Понять бы в какую сторону смотреть. Вроде скорость 1200 стандартная для модбас, и тут такая проблема на ровном месте
Ср дек 13, 2023 08:33:28
Не обязательно осциллографом, можно посмотреть логическим анализатором, подключившись прямо к одной из дифф линий. Землю можно не подключать, т.к. она будет через USB преобразователь скорее всего. Это на свой страх и риск.
Ср дек 13, 2023 08:59:41
Я бы посмотрел осциллом реальную скорость передачи 1200 бод с МК.
Например вот так:
https://bravikov.wordpress.com/2014/10/ ... 0%B8-uart/
Ср дек 13, 2023 11:51:26
Проверил тестовой программой. Через USART на ПК идет сигнал на скорости 1200. Похоже проблема в библиотеке Freemodbus
Ср дек 13, 2023 12:37:54
Проверил тестовой программой. Через USART на ПК идет сигнал на скорости 1200. Похоже проблема в библиотеке Freemodbus
freemodbus использует аппаратный таймер МК для измерения интервалов. Я бы проверил настройки этого таймера.
Ср дек 13, 2023 13:22:15
Через USART на ПК идет сигнал на скорости 1200.
И как Вы об этом узнали?
Ср дек 13, 2023 16:16:02
Всё, нашел. Это была единственная скорость из моего списка при которой задействован регистр UBRRH. В библиотеке freemodbus применялся только UBRRL
Ср дек 13, 2023 19:18:15
А так не?:)
- Код:
#define BAUD 1200
#include <util/setbaud.h>
UBRRL = UBRRL_VALUE;
UBRRH = UBRRH_VALUE;
Чт дек 14, 2023 09:39:31
А так не?:)
- Код:
#define BAUD 1200
#include <util/setbaud.h>
UBRRL = UBRRL_VALUE;
UBRRH = UBRRH_VALUE;
Так не. Скорости меняются в процессе работы путем записи в holding reg . Библиотека пересчитывала присланные значения, но почему то только задействуя UBRRL. Поскольку на других скоростях все работало, то проблема всплыла не сразу. Ну.. может кому пригодится инфа
Пт дек 15, 2023 03:45:58
Существует и другая беда. Есть куча калькуляторов для вычисления значений UBRR. Задал частоту, скорость и ниочём не думай. А вот какие значения будут для 300 bps на 16 мгц, к примеру?
Пт дек 15, 2023 09:03:40
Существует и другая беда. Есть куча калькуляторов для вычисления значений UBRR. Задал частоту, скорость и ниочём не думай. А вот какие значения будут для 300 bps на 16 мгц, к примеру?
Ну так 3333 ( D05)
Пт дек 15, 2023 12:44:11
Ой, ошибся.( Нужно было 110. А тогда получается 9090 или 0x2382, чувствуете?
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.