1 (20-04-2018 10:19:36 отредактировано alex_engine)

Тема: Можно ли сделать фильтр при работе с UART?

Здравствуйте
Вопрос возник из следующей ситуации: на контроллера нано организована работа диаграммы с получением и отправкой данных UART.
Диаграмма довольно объемная, также задействована передача IR.
Суть проблемы в том, что при исполнении "вживую", перестала схема реагировать на посылку в шине, когда она идет (при определенных условиях) в "пакете" подобных (с одинаковым адресом отправителя и получателя".
Если отправлять эту посылку "одиночно" - то все ок. Походу нано просто перегружен и "не успевает" ее обработать и среагировать.
Если отдельно загрузить фрагмент обработки этого сообщения:
http://i.piccy.info/i9/462c46792a2f363b699f4e759ed4fb8d/1524205881/66127/1231370/Bezymiannyi_800.jpghttp://i.piccy.info/a3/2018-04-20-06-31/i9-12262908/800x332-r/i.gif
То все ок. Стало быть логика не нарушена. Но как только диаграмма в контроллер загружается вся - происходит описанное выше. Идет "плотный" по времени набор сообщений и он "пропускается" мимо.
Прикрутил кан для мониторинга происходящего в UART - так и есть. Часть посылок из "пакета" передается в кан из уарта, часть просто теряется. При этом нет зависимости от длинны сообщения.

Я уже с похожим сталкивался при работе с кан шиной. Тогда вопрос решился "разгрузкой" контроллера путем установки фильтров по идентификатору.

Собственно прошу совета - как можно при работе с UART избавить контроллер от "лишней" работы? Можно построить фильтр подобно как на кане? Назначить бит, как условие фильтра. И дальше работать только с "профильтрованными" посылками?
Вот еще часть моих "фильтров"
http://i.piccy.info/i9/39e129bb74a574b5c830fcb61325a1a2/1524206507/95430/1231370/Bezymiannyi_800.jpghttp://i.piccy.info/a3/2018-04-20-06-41/i9-12262975/719x594-r/i.gif

Будет ли "легче" работать контроллеру, если добавить сначала условие отсева по отправителю и, допустим, длине сообщения?  А уже потом так, как на диаграмме?

Спасибо! Буду рад советам и подсказкам.

UPD:
http://i.piccy.info/i9/7d2fdb22a5c34b7c2e235566051d105b/1524207697/29912/1231370/Bezymiannyi.pnghttp://i.piccy.info/a3/2018-04-20-07-01/i9-12263049/699x375-r/i.gif

эти варианты равнозначны с  точки зрения функционала? Так получится хоть что-то выиграть? Таких "переделок" по диаграмме можно штук 5-6 сделать.


Или вообще дело может быть не в этом?

2

Re: Можно ли сделать фильтр при работе с UART?

Как таковые фильтры для чистого UART неприменимы, в отличие от CAN
Вряд ли дело в перегрузке контроллера - UART довольно медленный протокол.
Сможете определить при помощи осциллографа минимальный интервал между последовательными сообщениями uart?

3

Re: Можно ли сделать фильтр при работе с UART?

Здравствуйте.
Определить нужно интервал в "пачке" из которой "не ловятся" сообщения? Я верно понял?
Попробую.

Есть смысл может добавить "регистр переполнения буфера" и посмотреть его статус?

Спасибо

4 (23-04-2018 12:10:31 отредактировано alex_engine)

Re: Можно ли сделать фильтр при работе с UART?

До осциллографа пока не добрался. Есть лог с временем в таком виде
http://i.piccy.info/i9/2684930f375062d537051a17cf4aee0e/1524464004/109903/1231370/Bezymiannyi_800.jpghttp://i.piccy.info/a3/2018-04-23-06-13/i9-12271397/800x430-r/i.gif

Нужная посылка выделена синим. Красным - "пакеты".  Зеленым - "обычные" посылки.
Вот нужное мне сообщение в "пакете" проходит мимо в большинстве случаев. Если его отправлять "вручную" - то все ок, схема его "ловит".

5

Re: Можно ли сделать фильтр при работе с UART?

Кстати, а про какой контроллер вообще говоря речь?

6

Re: Можно ли сделать фильтр при работе с UART?

Прошу прощения, контроллер - нано.

7

Re: Можно ли сделать фильтр при работе с UART?

Попробуйте не очевидный вариант - используйте Регистр увеличения разрешения системного таймера: http://wiki.canny.ru/index.php?title=CA … 1.80.D0.B0

При этом вам потребуется умножить все временные интервалы на диаграмме в 10 раз. Этот регистр косвенным образом может повлиять на разрешение UART.

8

Re: Можно ли сделать фильтр при работе с UART?

Прошу прощения за долгое молчание.
Попробовал. Стало еще хуже и не понятнее.
Если запускать эту диаграмму с увеличенным разрешением http://piccy.info/view3/12262908/e83183 … 0f14/1200/

На выходе блока 1 единица появляется, как надо. На выходе блока 2 - нет. Если убрать поправку по времени - работает как раньше.

Пока отложил этот момент в долгий ящик.
Спасибо

9

Re: Можно ли сделать фильтр при работе с UART?

Теперь на диаграмме с увеличенным разрешением требуется подобрать значение в "Регистре установки таймаута приема сообщения UART" в интервале от 2 до 9 контролируя Регистр длины принятого сообщения UART - если его значение при приеме любого сообщения будет = 1, то таймаут нужно увеличивать.
Конечно, в отсутствии специализированного драйвера работать с подобным протоколом задача нетривиальная.

10

Re: Можно ли сделать фильтр при работе с UART?

Благодарю. Попробую. Просто перебором последовательно до появления стабильности приема? Я верно понял?

11

Re: Можно ли сделать фильтр при работе с UART?

В отсутствие осциллографа и точных данных о минимальном интервале между пакетами - да перебором, причем по возрастанию, начиная с минимального значения (2) и до максимального (9)

12

Re: Можно ли сделать фильтр при работе с UART?

Здравствуйте

Попробовал таймаут от 2 до 9
http://i.piccy.info/i9/de27f9c1dd8a236675c4d99f22ba1a73/1526197714/65388/1079312/Bezymiannyi_800.jpghttp://i.piccy.info/a3/2018-05-13-07-48/i9-12325391/800x294-r/i.gif

Во всех случаях длинна сообщения =1  sad

13

Re: Можно ли сделать фильтр при работе с UART?

Я не рассчитывал но то, что вы попытаетесь это автоматизировать. Так это работать не будет. Попробуйте записывать таймаут константой напрямую, и перезаписывать диаграмму в контроллер между тестами.

14

Re: Можно ли сделать фильтр при работе с UART?

Здравствуйте
Перебрал вручную от 2 до 9, каждый раз перезаписывая диаграмму. Во всех случаях длинна принятого сообщения 1 sad

Есть смысл пробовать другие значения?
Очень уж нужно "выловить" и обработать эту посылку.

Спасибо за подсказки

15

Re: Можно ли сделать фильтр при работе с UART?

Смысл есть, пробуйте добавлять по 5 единиц при каждой попытке, пока ситуация не изменится.