" title="Написать письмо">Написать письмо
Донаты на карту ВТБ:
2200 4002 2461 6363

Статьи по дате (многие всегда актуальны)

Статистика

Пользователи : 1
Статьи : 2348
Просмотры материалов : 8852112
 
Arduino: псевдореальное время (07.01.2026). Печать E-mail
2026 - Январь
07.01.2026 14:50
Save & Share
Уже привык: жизнь всегда возвращает все созданные и забытые ошибки. Могут пройти годы и десятилетия - всё равно долбанёт. Начиная от искривления шеи в "реабилитационном" центре Дикуля в несовершеннолетнем возрасте (остеохондроз): вероятное пережимание артерии шеи сейчас (рентген в 40 лет показал "Варианты развития – неполная аномалия Киммерли"). И заканчивая Arduino: не изучил глубоко реальное время в 2022 году - добро пожаловать в ад в 2026: при разработке самодельного телеметрического пульсоксиметра.


Сначала начиналось всё хорошо:
- были протестированы библиотеки извлечения из ПЗУ Arduino времени компиляции скетча - выбрана лучшая (BuildTime);
- так как данные предполагается записывать в файл из COM-порта с помощью Putty - не проблема нажать кнопку залития скетча в Arduino (обновить в платформе время компиляции скетча);
- при запуске платформы, сразу вписать это время в сам COM-порт. А потом уже в другой самописной программе построения телеметрии: использовать это время как точку отсчёта (соединяя его с относительным временем работы платформы в миллисекундах (millis())) - псевдореальное время;
- учесть времена смещения вправо с момента компиляции скетча: загрузку скетча в Arduino, активацию COM-порта - получив уточнённое псевдореальное время, имеющее погрешность только в номинале смещения. Да даже если это смещение не учитывать: оно однократное и единое для всех показаний телеметрии - если нажать кнопку Arduino "у меня приступ!", записанная в телеметрии метка о наличии проблемы всё равно будет точно находиться, относительно всего времени съёма телеметрии;
- таким образом, избавиться от необходимости наличия аппаратного модуля реального времени (которые ещё и врут о "реальности"): т.к. и на макетной плате, и в корпусе-мыльнице - места мало.


Информация в нашем мозге - является лишь зеркальным отражением реального мира, с примесью различной пропаганды чужих заинтересованных людей. А если учесть ещё любовь людей верить во всякую придурь, типа богов и прочей эзотерики, - картина получается совсем уж удручающей. В моём случае, как и во многих других (алгоритм одинаковый): происходит слепая вера в то, что всё это работает, - и никаких проблем не будет. А вот реальность, при проверке веры, при макетировании, - убивает эту веру на корню.

В мониторе COM-порта есть замечательная галка "Показать отметки времени", включающая рядом с переданным из Arduino значением - время передачи этого значения, с периодом до 40мс, прямо из ПК (ПК - в роли аппаратного модулища реального времени). И когда включаешь в бесконечную передачу в COM-порт значение функции millis() - начинаются танцы с бубном: она вообще не работает должным образом. Сначала медлит, потом торопится, далее обнулилась сама по себе (и 0 на какую-то букву начал заменяться), после на том же значении не обнулилась. Также на рисунке видно: пока значение маленькое - цифры повторяются 3-4 раза подряд, когда 5-значное - чаще 2 раза, когда 6-значное - чаще 1 раз. Тут даже смещение не имеет значения: время работы функции постоянно меняется.


Вдобавок, millis() висит на всего лишь 8-битном таймере Timer0 (который ещё сбоит при работе с прерываниями и некоторыми внешними библиотеками). Переключить бы её на Timer1; но ранние эксперименты показали, что там предделитель не отключается - и его 16-битность идёт лесом.

Отключение COM-порта длительно, для проверки, сильно ли он искажает millis(). Сильно, но и сама функция тоже искажается (а добавленная delay() - так вообще врёт безбожно в левую сторону). То есть, обе функции - в полной уверенности, что прошла минута.


Что по micros(), висящей на том же Timer0 (как и delay())? Delay() - теперь врёт в большую сторону, а вот micros() - почти точно показывает нужные значения относительно времени ПК. Но её, непреодолимо, уносит вправо от реального времени - накопительный эффект, размазанный по всей телеметрии.


При избыточном обращении к COM-порту (монитору COM-порта?) - начинает считать в меньшую сторону.


Итоги: создание псевдореального времени для точной телеметрии пульса - можно реализовать 2 способами: micros() с редкими записями данных в COM-порт или с помощью наносекундного таймера, основанного на Timer2.
Обновлено ( 07.01.2026 17:23 )
 
 

Последние новости


©2008-2026. All Rights Reserved. Разработчик - " title="Сергей Белов">Сергей Белов. Материалы сайта предоставляются по принципу "как есть". Автор не несет никакой ответственности и не гарантирует отсутствие неправильных сведений и ошибок. Вся ответственность за использование материалов лежит полностью на читателях. Размещение материалов данного сайта на иных сайтах запрещено без указания активной ссылки на данный сайт-первоисточник (ГК РФ: ст.1259 п.1 + ст.1274 п.1-3).

Много статей не имеет срока устаревания. Есть смысл смотреть и 2011, и даже 2008 год. Политика сайта: написать статью, а потом обновлять ее много лет.
Рекламодателям! Перестаньте спамить мне на почту с предложениями о размещении рекламы на этом сайте. Я никогда спамером/рекламщиком не был и не буду!
Top.Mail.Ru