Электроника и радиотехника => Цифровая техника => Тема начата: Shaman от 12 Июнь, 2023, 17:12
Название: Непонятная работа Arduino Nano с COM в Linux
Отправлено: Shaman от 12 Июнь, 2023, 17:12
Имеем Arduini Nano со скетчем:
Это упрощенная, для дебага, версия скетча эмулирующего пульт ДУ, просто вместо отправки пакетов на ИК светодиод он моргает встроенным. В исходном виде код работает аналогично, пульт эмулируется.
Если для отправки команд использовать программы picocom, minicom, монитор порта ардуино и любые другие терминалы всё работает. Но если просто плюнуть в порт командой:
Ничего не произойдет. Ардуинка его получает, начинает исполнять, но исполнение срывается. Команда начинает работать только в том случае если открыть на блокирующее чтение фал COM-порта ардуинки, любой командой способной это делать cat, grep и т.д.
При этом на осциллограмме всегда одни и те же данные, щупы подключены непосредственно к выводам UART.
RigolDS14.png
Первый байт - это 49 , ascii код символа "1" в десятичной системе. Второй - это 10, код символа LF (line feed), он подставляется автоматически. Т.е. данные до процессора доходят всегда и всегда одинаковые, каких то изменений мне отловить не удалось. Но в одном случае код срабатывает, а в другом срывается. С повторяемостью 100% на 2-х разных платках Nano и разных ПК.
Кто-нибудь имеет представление, чем обусловлено такое поведение?
Под спойлером видео представление правильной и не правильной работы, для лучшего понимания. Оно короткое, посмотрите пожалуйста Видео работы
[свернуть]
Название: Re: Непонятная работа Arduino Nano с COM в Linux
Отправлено: Slabovik от 13 Июнь, 2023, 11:54
Смотрел только порт приёма. А порт отправки не смотрел?
Название: Re: Непонятная работа Arduino Nano с COM в Linux
Отправлено: Shaman от 13 Июнь, 2023, 14:10
Либо я чего-то не понимаю либо вы
Я подключился вот сюда electrical_shema_arduino_nano.png
На скрине RX желтая TX синяя (подписаны)
При прошивке пакеты по ним видно, при работе устройство ничего не отправляет да и не должно.
Или вы про что-то другое?
Название: Re: Непонятная работа Arduino Nano с COM в Linux
Отправлено: Slabovik от 13 Июнь, 2023, 15:54
Я про то, что если используемые библиотеки ничего не отсылают, они ничего и не должны ждать. А если отсылают - затык может быть на стороне приёма (сигналы управления портом).
Из описания я понял, что при приёме байта из одной программы ардуина что-то делает, а при приёме точно такого же (вплоть до бита) из другой программы, не делает. По факту это мистика и нужно выявлять побочный неявный функционал.
зы: а ты уверен, что любой терминал точно всегда добавляет 0Ah после? Не в этом ли собака порылась? Потому что Echo точно довабляет конец строки/перевод, а вот терминал... ? Не зависает ли ардуиновский алгоритм по приходу этого 0Ah вследствие "неожиданного" прихода при отсутствии обработки этого прихода (не прописано прерывание и т.п.), а в это время у тебя там Delay Delay?
Название: Re: Непонятная работа Arduino Nano с COM в Linux
Отправлено: Shaman от 14 Июнь, 2023, 01:59
Думаю что не в этом дело. 0Ah не влияет на работу поскольку команда Serial.read(); читает только первый приходящий байт, и что там на конце ей фиолетово. Пробовал через монитор порта изменять конец строки всё работает одинаково правильно. Да и у echo есть параметр не вносить 0Ah
А осциллограмма вот так RigolDS15.png
С командой echo начинает работать только тогда когда файл /dev/ttyUSB0 открыт на бесконечное считывание какой-нибудь программой.
И да одиночное моргание светодиодом L скорее всего означает перезагрузку атмеги (по крайней мере при перезагрузке она так же моргает). Но почему это происходит при приёме команды. Я пробовал подключать логический анализатор, но ни при открытом на чтение файле /dev/ttyUSB0, ни при использовании терминала, ни просnо при отправке echo каких-то еще данных кроме вышеуказанных не передаётся.
Мне не обоснованно кажется, что проблема может крыться в настройке COM порта, но я пока не могу разобраться как работает команда stty У COM порта вон ажно сколько параметров
Всё что я научился ей делать это менять скорости.
Ради интереса пробовал в тупую заинитить UART в ардуине кодом на СИ
Но в таком виде он почему-то не обрабатывает прерывания хотя отправка идёт отлично.
Название: Re: Непонятная работа Arduino Nano с COM в Linux
Отправлено: Slabovik от 14 Июнь, 2023, 14:43
терминал по-дефолту открывает порт и на чтение и на запись. Цикл так-то закрыть надо, он не оформлен (заначка есть, но что-то пошло не так). По окончании прохода прога вываливается в никуда. Переменным RX_xxx надо бы свойство Volatile сделать, чтобы явно указать, что компилятору их оптимизировать не надо.