You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Я собрал прототип устройства использовав код pruwait с двумя скоростями uart.
Устройство заработало с приводом Nice RD400.
Анализ пакетов логическим анализатором показал, что первый пакет с переменным битрейтом практически по длительности такой же как и если передавать первый байт 0x00 перед 0x55 с постоянным битрейтом 19200.
Переписав код:
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); // ждем завершения отправки
}
Данный код заработал без проблем.
The text was updated successfully, but these errors were encountered:
Уважаемые коллеги!
Я собрал прототип устройства использовав код 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); // ждем завершения отправки
}
Данный код заработал без проблем.
The text was updated successfully, but these errors were encountered: