Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Тесты по протоколу обмена данными. #17

Open
mega1974 opened this issue Oct 21, 2024 · 0 comments
Open

Тесты по протоколу обмена данными. #17

mega1974 opened this issue Oct 21, 2024 · 0 comments

Comments

@mega1974
Copy link

Уважаемые коллеги!

Я собрал прототип устройства использовав код pruwait с двумя скоростями uart.
Устройство заработало с приводом Nice RD400.
Анализ пакетов логическим анализатором показал, что первый пакет с переменным битрейтом практически по длительности такой же как и если передавать первый байт 0x00 перед 0x55 с постоянным битрейтом 19200.
Переписав код:

const char master_tx_buf_sbs[] = {0x00, 0x55, 0x0c, 0x00, 0x03, 0x00, 0x81, 0x01, 0x05, 0x86, 0x01, 0x82, 0x01, 0x64, 0xe6, 0x0c}; //команда "SBS"
const char master_tx_buf_stop[] = {0x00, 0x55, 0x0c, 0x00, 0x03, 0x00, 0x81, 0x01, 0x05, 0x86, 0x01, 0x82, 0x02, 0x64, 0xe5, 0x0c}; //команда "Stop"
const char master_tx_buf_open[] = {0x00, 0x55, 0x0c, 0x00, 0x03, 0x05, 0x81, 0x01, 0x05, 0x83, 0x01, 0x82, 0x03, 0x64, 0xe4, 0x0c}; //команда "Open"
const char master_tx_buf_close[] = {0x00, 0x55, 0x0c, 0x00, 0x03, 0x05, 0x81, 0x01, 0x05, 0x83, 0x01, 0x82, 0x04, 0x64, 0xe3, 0x0c}; //команда "Close"

...

void send_command (const char _master_tx_buf[]) {
// UART set_baudrate Break
// Работает хорошо с wemos d1 mini и Arduino Core 3.0.2
// Отправка break + посылка
uart_flush(_uart); // очищаем uart
//uart_set_baudrate(_uart, baud_break); // занижаем бодрэйт
//uart_write(_uart, (char *)break_tx_buf, sizeof(break_tx_buf)); // отправляем ноль на низкой скорости, длиинный ноль
//uart_wait_tx_empty(_uart); // ждём, пока отправка завершится. Здесь в библиотеке uart.h (esp8266 core 3.0.2) ошибка, ожидания недостаточно при дальнейшем uart_set_baudrate().
//delayMicroseconds(90); // добавляем ожидания, иначе скорость переключится раньше отправки. С задержкой на d1-mini я получил идеальный сигнал, break = 520us? отправлял 0x00
uart_set_baudrate(_uart, baud_work); // возвращаем рабочий бодрэйт
uart_write(_uart, (char *)_master_tx_buf, sizeof(master_tx_buf_open)); // отправляем основную посылку
uart_wait_tx_empty(_uart); // ждем завершения отправки
}

Данный код заработал без проблем.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant