Например TDA7294

Форум РадиоКот • Просмотр темы - Проблема потери данных по UART, arduino
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 23, 2024 11:40:11

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Проблема потери данных по UART, arduino
СообщениеДобавлено: Пт ноя 24, 2017 16:13:12 
Родился

Зарегистрирован: Пн авг 28, 2017 12:31:32
Сообщений: 14
Рейтинг сообщения: 0
Здравствуйте. У меня возникла проблема следущего рода: по UART приходят данные большими пакетами 200-256 байт, я их считываю но конец обрывается, у меня подозрения что это из за буфера UART. Плата wemos D1. Доходят около 150 байт

Код ниже, Serial запущен на скорости 115200

Код:
String  msg;
while (Serial.available() > 0) {
    byte inChar = Serial.read();
    msg += inChar;
}
Serial.println(msg);


Как можно решить проблему потери данных?

P.S. в файле HardwareSerial.h буфер пробывал увеличивать до 256 и до 255, не помогло.

#define SERIAL_TX_BUFFER_SIZE 255
#define SERIAL_RX_BUFFER_SIZE 255

Возможности уменшить пакеты с отправителя тоже нету


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблема потери данных по UART, arduino
СообщениеДобавлено: Пт ноя 24, 2017 18:04:07 
Друг Кота

Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53
Сообщений: 3092
Откуда: москва, уфа
Рейтинг сообщения: 0
дело не в буфере. Передача идет последовательно по одному символу, причем заметно медленнее, чем контроллер обычно может обрабатывать принятые данные. Ваш кусок кода быстро выгребает все, что есть в буфере, Serial.available() возвращает 0 (ибо следующий символ еще не успел придти), и цикл чтения на этом завершается.
Определяйте окончание передачи пакета как-нибудь иначе.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблема потери данных по UART, arduino
СообщениеДобавлено: Пн ноя 27, 2017 08:40:21 
Родился

Зарегистрирован: Пн авг 28, 2017 12:31:32
Сообщений: 14
Рейтинг сообщения: 0
дело не в буфере. Передача идет последовательно по одному символу, причем заметно медленнее, чем контроллер обычно может обрабатывать принятые данные. Ваш кусок кода быстро выгребает все, что есть в буфере, Serial.available() возвращает 0 (ибо следующий символ еще не успел придти), и цикл чтения на этом завершается.
Определяйте окончание передачи пакета как-нибудь иначе.

Да такая проблема была, но тогда было так, что считывался первый байт. Но при следующем цикле loop, считывались остальные. Я это решил вставив delay(2), сейчас же обрезается конец посылки, и при прохождении одного цикла loop, когда действие снова доходит до считывания данных с ком порта, там данных никаких нет, буфер пуст. Если бы проблема была в высокой скорости считывания то в буфере бы остались данные, которые извлеклись бы в следующем цикле loop

Добавлено after 1 hour 11 minutes 49 seconds:
Поясню еще, отправителем является GPS модуль отправляет RAW данные, я подцепился к ком порту и смтрел что доходит а что обрубается, вот код прошивки arduino (wemos d1 если быть точнее):
Код:
void setup() {
  // start serial port:
  Serial.begin(57600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
}
void loop() {
Serial.println( "++++++++++++++++++BEGIN++++++++++++++++");
 int i=1;
 while (Serial.available() > 0) {
   byte inChar = Serial.read();
   
   Serial.print("#"+ String(i)+ ": ");
   Serial.println(inChar, HEX);
   i=i+1;
   delay(5);   
   }
  Serial.println( "________________END_________________");
}

скриншот ниже демонстрирует, что происходит какая-то ерунда под конец посылки.
Изображение


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Проблема потери данных по UART, arduino
СообщениеДобавлено: Пн ноя 27, 2017 14:31:08 
Друг Кота

Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53
Сообщений: 3092
Откуда: москва, уфа
Рейтинг сообщения: 0
и снова нет, вы слишком полагаетесь на предсказуемость задержек

как понимаю, у вас там протокол UBX. В его спецификации вполне подробно описан формат пакета:
Цитата:
- Every Message starts with 2 Bytes: 0xB5 0x62
- 1 Byte Class Field follows. The Class defines the basic subset of the message
- 1 Byte ID Field defines the message that is to follow
- 2 Byte Length Field is following. Length is defined as being the length of the payload, only. It does not
include Sync Chars, Length Field, Class, ID or CRC fields. The number format of the length field is an
unsigned 16-Bit integer in Little Endian Format.
- The Payload is a variable length field.
- CK_A and CK_B is a 16 Bit checksum whose calculation is defined below.

собственно, вам нужно обнаружить старт передачи по приему символа 0xB5, удостовериться в этом приемом символа 0x62, прочитать байты Class и ID, прочитать два байта Length - это будет размер поля данных, прочитать length байт данных, прочитать два байта чексуммы. Только после этого можно считать пакет принятым и что-то с ним делать.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: lahuz, Rai и гости: 45


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y