Звездчатые многогранники Винил‑плеер Орион‑128 онлайн ЭКГ Лаборатория zvzd3.ru Гостевая

Простой самодельный кардиограф с записью на SD карту
Приложение и программа: визуализация записей электрокардиограмм, скачивание и обработка ЭКГ

Назначение программы EKG_SD_2023xolt.exe

Программа EKG_SD_2023xolt.exe предназначена для использования совместно с устройством Простой самодельный кардиограф с записью на SD карту (далее просто «кардиограф»). Программа позволяет:

Для смартфонов и планшетов можно использовать приложение.

Версии программы

Программа постоянно совершенствуется с сохранением совместимости, рекомендуется использовать последнюю версию. Она обеспечивает наилучшие возможности по анализу кардиосигнала и обработки записей кардиограмм. Также она работает с любой аппаратной модификацией кардиографа (необходимо выбрать тип аппаратной части в главном окне).

EKG_SD_2023xolt_v3_14 от 12.10.2023.

Предыдушая версия программы работала только с аппаратной частью версии 3.0

EKG_SD_2023_v3_00 от 7.02.2023.

Для аппаратных частей 1.0, 2.0, 2.1 можно использовать предыдущие программы:

EKG_SD_2017_v2_10 от 24.08.2017.

Для аппаратной реализации 2.1 duo можно использовать специальную версию:

EKG_SD_2020_v2_11duo от 05.07.2020.

Справка для самой первой версии программы (2011 год) имеется в виде файла doc, для новых версий доступна онлайн-справка. Для смартфонов и планшетов можно использовать приложение.

Список последних изменений и улучшений в программе

Установка программы

Программа устанавливается в ОС "Windows" простым копированием на диск исполняемого файла программы. Для открытия файлов внутри архивов rar рядом с программой должен лежать модуль распаковки unrar.dll. Можно также настроить операционную систему на запуск данной программы на файлы типа "*.экг", при этом имя файла должно передаваться в качестве параметра командной строки.

Работа с программой

Программа может функционировать в трех режимах:

Первые два режима соответствуют двум режимам, в которых может находиться кардиограф (его прошивка). Для работы в этих режимах к компьютеру должен быть подключен кардиограф, номер соответствующего com-порта должен быть выбран в программе и должен быть указан тип аппаратной части. Третий режим включает анализ записанного ранее кардиосигнала с целью автоматического выделения R-зубцов, вычисления R-R интервалов, частоты пульса и совместную визуализацию кардиограмм, результатов их анализа и показаний датчиков для их анализа пользователем.

Обычно программа запускается в режиме визуализации кардиограммы. Если же в командной строке передано имя файла - программа автоматически запустится в режиме обработки этого файла.

Программа в режиме визуализации кардиограммы

Сразу после запуска программы она находится в режиме визуализации кардиограммы.

Главное окно программы в режиме визуализации кардиограммы

Режим визуализации предназначен для контроля качества крепления электродов на теле. Также он позволяет использовать кардиограф без установки SD-карты (без записи) для просмотра кардиосигналов в реальном времени. Для перехода в этот режим из других режимов можно нажать кнопку "Начать отображение и запись ЭКГ", при этом кардиографу отсылается команда на перезагрузку для начала записи нового файла.

Для взаимодействия с кардиографом необходимо выбрать в программе соответствующий Com-порт, а также тип аппаратной части в поле ввода "Тип устройства". Для аппаратных частей 1.0, 2.0 и 2.1 скорость com-порта 57600 бод, для версии 3.0 скорость уже 115200 бод.

Если кардиограф включен и от него поступают данные оцифровки ЭКГ, то в верхней части окна в строке состояния процесса записи отображается информация о ходе записи на SD-карту, показания датчиков (акселерометра, барометра, термометра). В строке ниже отображается статистика кардиосигнала. Ещё ниже отображаются графики оцифрованного кардиосигнала. Масштаб графиков по вертикали программой выбирается автоматически, а по времени задаётся пользователем.

Состояние записи на SD-карту включает тип SD-карты (например, "SDv2 HC"), номер первого сектора файла (например, "ФАЙЛ=0xc2710"), первый свободный для записи сектор "ПОЗ=xxxx". Также отображается дата и время начала записи, и продолжительность записи (например, "ВРЕМЯ 2023.02.07, 10:33:47, 519.5 сек"). Если в кардиографе имеются часы реального времени, то отображаются их показания вида "RTC 2023.01.30, 23:47:34".

Опция «Фильтровать сигнал» позволяет включить механизм фильтрации кардиосигнала перед его отображением. При этом помимо графиков сигнала визуализируется рассчитанная частота пульса. При фильтрации используются текущие параметры обработки кардиосигнала.

Опция "Интервал, сек" позволяет задать интервал времени, на котором отображается кардиосигнал и анализируется его статистика: среднеквадратическое отклонение (СКО), размах, мин. и макс. значение.

Ряд кнопок предназначен для управления работой кардиографа.

Кнопка "AN0" переключает вход АЦП на вывод МК AN0, на который подаётся кардиосигнал без дополнительного усиления. Этот режим позволяет получить более широкий динамический диапазон, но шаг квантования сигнала оказывается низким. Для версий аппаратной части 3.0 и выше кардиограф начинает первым опрашивать вход AN0_2 (RA4), на который подаётся сигнал первого отведения без дополнительного усиления, причем этот выбор сохраняется энергонезависимо.

Кнопка "AN1" переключает вход АЦП на вывод МК AN1, на который подаётся кардиосигнал после дополнительного усиления. Этот режим позволяет получать наиболее качественные кардиограммы. Для версий аппаратной части 3.0 и выше при нажатии на "AN1" этот выбор сохраняется энергонезависимо.

Кнопки "RefNo", "Ref+-", "Ref+" позволяют изменить источники опорного напряжения для АЦП МК. Для версий аппаратной части 1.1 и выше предусмотрена подача опорных напряжения для АЦП с аналоговой части схемы для снижения влияния помех от цифровой части.

Кнопка "Нак. вкл" включает накопления сигнала, при котором каждая выборка формируется путем сложения нескольких выборок АЦП, работающего на более высокой частоте дискретизации. Кнопка "Выкл" позволяет в целях отладки отключить накопление сигнала

Кнопки "Блютуз вещать" и "откл" используются, если кардиограф подключен к компьютеру по блютуз. Для модулей HC-05 и HC-06 кардиограф не будет слать в комп цифровые данные для визуализации ЭКГ в реальном времени, пока не будет подана специальная команда кнопкой "Блютуз вещать". Т.е. после подключения к кардиографу по блютузу необходимо нажать кнопку "Блютуз вещать" для просмотра кардиограмм.

Программа в режиме копирования файлов

Для перехода в режим копирования ранее записанных данных на компьютер необходимо нажать кнопку "СТОП - Остановить запись ЭКГ". При этом кардиограф прекращает запись данных на SD-карту и готовится к приёму команд от компьютера. Главное окно программы меняет вид.

Главное окно программы в режиме копирования файлов ЭКГ

Основные операции в этом режиме – подготовка кардиографа к работе (установка времени часов, форматирование SD-карты), а также загрузка списка записанных файлов и копирование выбранного файла на компьютер.

Для установки времени в микросхеме часов реального времени (RTC) кардиографа необходимо нажать кнопку "Инициализация RTC + проверка датчиков". В этом случае текущее время компьютера будет установлено в микросхеме часов RTC. Эту операцию необходимо выполнять каждый раз, когда аккумулятор доходил до полного разряда и хранение времени нарушалось. Дополнительно выполняется поиск и опрос датчиков ускорения MPU-6050 и барометра BMP280; их показания выводятся на консоль.

Для загрузки с SD-карты списка записанных файлов необходимо нажать кнопку "Считать с SD-карты список файлов". Список файлов формируется последовательно, начиная с записанного последним. Вначале программа запрашивает у устройства номер EmptyPos первого свободного для записи сектора. Тогда сектор, предшествующий EmptyPos, является последним сектором записанного последним файла. Прочитав этот сектор можно определить первый сектор файла. Тогда предшествующий ему сектор является последним сектором предпоследнего файла, и так далее. Дополнительно учитывается, что из-за буферизации картой SD записываемых на данных в случае внезапного отключения питания последние несколько секторов файла могут быть потеряны, причем МК не будет знать об этом. Поэтому при переходе к предыдущему файлу всегда анализируется целая группа секторов, предшествующих первому сектору текущего файла или EmptyPos.

Напомним, что кардиограф использует собственный оригинальный подход к хранению файлов, устойчивый к внезапным отключениям питания. Запись на SD-карту осуществляется последовательно, сектор за сектором. Номер первого свободного сектора EmptyPos, в который должна осуществляться запись новых данных, хранится в EEPROM микроконтроллера. После записи очередного сектора номер EmptyPos инкрементируется.
В каждом секторе SD-карты (размером 512 байт) наряду с полезными данными сохраняется сигнатура и номер первого сектора файла. Таким образом, хотя данные на карту пишутся строго последовательно, они структурированы в виде файлов. А сами файлы упорядочены по порядку записи.

Принцип записи файлов ЭКГ на sd-карту

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

Для скачивания файла в компьютер необходимо выбрать файл в списке и нажать кнопку "Скачать файл". Скачивание осуществляет на той скорости, которая выбрана в ниспадающем списке (921600, 806400, 460800 или 1115200/57600 бод). Если возникают проблемы, следует использовать минимальную скорость. Также в списке может быть выбран накопитель компьютера, в этом случае полагается, что SD-карта подключена к компьютеру напрямую через карт-реадер.

Сохранение осуществляется либо в файлы с расширением «экг», которые представляют собою точную посекторную копию записанных на SD-карту данных (включая кардиосигнал и показания датчиков, см. формат). Файлы «экг» впоследствии можно открыть, обработать и преобразовать в другие форматы программой. Также сохранение (только кардиосигнала) может быть осуществлено в формате WAVE PCM, который «понимает» множество программ (в частности, звуковые редакторы).

Для подготовки SD-карты к работе вместо привычных операций форматирования (при установке новой SD-карты) и удаления файлов (при исчерпании объема карты) пользователем выполняется операция установки переменной EmptyPos в EEPROM MK на начальный сектор с номером 65536. Для этого предназначена кнопка "Форматирование". Первые 65536 секторов карты не используются ради сохранения существующей на карте «настоящей» файловой системы.

Также доступен для вспомогательных функций, предназначенные для диагностики и устранения неисправностей. Можно прочесть или установить номер первого свободного сектора (EmptyPos). Например, можно запомнить номер первого сектора последнего файла и EmptyPos, чтобы в случае нарушения хранения EmptyPos в памяти МК можно было восстановить EmptyPos.

Также можно проверить, как устройство распознает SD-карту, нажатием на кнопку "Инициализация", при этом отображаются отклики карты на команды инициализации.

Кнопка «Смена прошивки» переводит программу в специальный режим перепрограммирования устройства для загрузки новой версии прошивки (но сперва в микроконтроллер в режиме высоковольтного программирования должна быть занесена прошивка с поддержкой загрузчика).

Настройка модуля блютуз

Если в кардиограф установлен блютуз-модуль (HC-05, HC-06 или другой), то необходимо выбрать режим выдачи данных по блютузу, а сам модуль перед первым использованием необходимо сконфигурировать AT-командам. Для этого в главном окне необходимо нажать кнопку "Настройка ВТ". При этом появится окно настроек блютуз-интерфейса.

Окно настройки блютуз-интерфейса кардиографа

Чтобы кардиограф мог использовать модуль блютуз, этот модуль сперва надо правильно сконфигурировать: задать скорость обмена 115200 бод (кнопка "AT+BAUD8" или "AT+UART") и при желании имя и пин-код (кнопки "AT+NAME" и "AT+PIN"). Перед конфигурированием необходимо выбрать тип модуля: HC-05 или HC-06, это влияет на выдаваемые AT-команды. Убедиться в работоспособности модуля можно используя кнопки команд "AT" и "AT+VERSION". Модуль должен быть предварительно включен кнопкой "Включить питание". В окне ниже отображаются данные, посланные в модуль блютуз и принятые от модуля.

Чтобы модуль мог принять команды конфигурирования, необходимо сперва установить правильную скорость обмена кнопкой "Задать скорость взаимодействия". Например, с фабрики модули HC-06 поставляются настроенными на скорость 9600 бод. Помочь с определением скорость поможет кнопка "Определить текущую скорость": она перебирает разные скорости обмена и выдаёт команду "AT".

Для конфигурирования модуля HC-05 на его вход Key должна быть подана логическая 1. Это можно сделать вручную, либо можно подключить вывод Key к выводу RB7 МК: при включении модуля для конфигурирования на этот выход выдаётся 1, соответственно, модуль HC-05 входит в режим AT-команд на скорости 38400 бод (необходимо вручную задать такую скорость обмена для МК). Конечно, тип модуля при настройке также надо выбрать "HC-05".

Выбор режима выдачи данных на блютуз-интерфейсу

Наиболее оптимально было бы передавать по блютуз-интерфейсу полный поток данных, который пишется на SD-карту и включает в себя и детальный кардиосигнал и показания датчиков. При этом общий поток составляет примерно 2.2кбайта в секунду на один канал ЭКГ. Однако совсем не факт, что такой поток будет нормально передаваться используемым блютуз-модулем (особенно если это экономичный BLE). Поэтому в прошивке реализовано несколько режимов выдачи данных на блютуз, кардинально отличающихся по потоку:

Можно установить требуемый режим выдачи, выбрав его в поле "Задать режим выдачи на БТ". Данный выбор сохраняется МК энергонезависимо и будет использоваться при запуске записи. Соответственно при подключении по блютуз программу для компа и приложение необходимо настроить на соответствующий режим передачи данных.

При передаче одного канала ЭКГ, урезанного до 100 Гц, не реализована точная синхронизации потока и могут быть перепутаны старший и младший байт 16-битной выборки. При неадекватной передаче необходимо нажать кнопку "Нак. вкл" для синхронизации (как в основной программе, так и в приложении).

Визуализация записанных электрокардиограмм

Нажатие на кнопку "Обработка файлов ЭКГ" в главном окне переводит программу в режим обработки ранее записанных кардиограмм. При этом кардиограф может быть не подключен к компьютеру, обрабатываются только файлы сохранённых на диск записей формата "*.экг".

Первым делом у пользователя запрашивается имя файла (с расширением *.экг). Далее в течение некоторого времени выполняется обработка файла, а затем исходные измерения и результаты обработки отображаются в виде графиков.

Окно обработки сигнала ЭКГ

Сверху окна расположена панель выбора данных для отображения. Опции "ЭКГ-сигнал" позволяют отобразить исходный оцифрованный сигнал ЭКГ в каналах 1,2 и 3. Опции "I", "II", "III", "V" позволяются отобразить сигналы стандартный отведений, которые формируются на основе заданного комбинирования исходных каналов кардиосигнала. Опция "Исп. калибровки" включает пересчет кодов АЦП в милливольты на входе прибора. Для этого параметры пересчета должны быть настроены.

Опции "Температура" позволяет отобразить измерения температуры от термодатчика DS1621 или bmp280. Опции "Т2" и "Т3" отображают температуры, измеренные акселерометром MPU-6050 и часами DS3231. Опция "Ускорения" позволяет отобразить данные акселерометра, по ним удобно судить о двигательной активности пациента. При этом опция "Раздельно XYZ" позволяет отобразить показания акселерометра для осей X, Y, Z на различных графиках. Опция "Pатм" позволяет отобразить измерения атмосферного давления, по ним удобно судить об изменениях высоты и соответствующей физической нагрузке (например, при подъёме по лестнице).

Опция "Кнопка" позволяет отобразить график, на котором фиксируются нажатия на кнопку на кардиографе, предназначенную для привлечения к тем или иным местам кардиограммы. Нулевое значение на графике соответствует не нажатой кнопке, при удержании кнопки значение растёт со временем, что позволяет различать нажатия разной длительности.

Опция "Спец. канал" позволяет отобразить данные специального "медленного" канала АЦП (одно измерение на сектор SD-карты). Обычно туда пишется отладочная информация от кардиографа: количество распознанных микроконтроллеров R-зубцов, признаки включения блютуз-модуля. Опции "Частота вх. CCP1" позволяет отобразить измерения частоты на входе CCP1 МК (если они поддерживаются прошивкой).

Для изменения масштаба отображения данных на графиках следует использовать колесо мыши и кнопки вблизи полос прокрутки. Для прокрутки графики можно перетаскивать мышью или использовать полосы прокрутки. При нажатии правой кнопкой по полосе прокрутки отображается контекстное меню, в котором задаются дополнительные параметры отображения. В частности можно выбрать или отменить пункт «автовыбор масштаба». Чтобы увидеть отдельные импульсы ЭКГ может понадобиться в достаточной мере увеличить масштаб по времени (при мелком масштабе отдельные импульсы могут быть не видны). Кнопка 'D' на клавиатуре позволяет быстро переключаться между детальным и мелким масштабами.

Окно обработки сигнала ЭКГ детально

При нажатии на кнопку "Калибровки" открывается окно, в котором настраиваются параметры пересчета кодов АЦП МК в физические величины - напряжение на электродах кардиографа в мв.

Окно калибровки кардиографа

Для пересчёта необходимо задать множитель накопления сигнала АЦП в прошивке, либо включить опцию "Определять накопление автоматически по числу каналов". Также необходимо задать значение кода АЦП при нулевом сигнале на входе кардиографа и усиление входных цепей. Эти значения могут быть определены по принципиальной схеме или быть откалиброваны путем подачи на вход кардиографа эталонных известных сигналов.

Также в данном окне задаются веса, с которыми должны суммироваться сигналы на входах 1-3 для получения сигналов стандартных отведений I, II, III, V.

Автоматическая обработка записанных электрокардиограмм

Автоматическая обработка кардиосигнала в программе позволяет распознавать R-зубцы, расчитать по кардиограмме R-R интервалы и частоту пульса. Имея эти данные уже можно обнаруживать различные аритмии и в местах аномалий более детально просматривать ЭКГ.

Для выявления R-зубцов исходный сигнал первым делом фильтруется для устранения влияния помех и других искажений. Набор используемых фильтров и параметры фильтрации можно настроить. Опция "фильтрованный ЭКГ-сигнал" позволяет отобразить в виде графика полученный после фильтрации сигнал. На нём R-зубцам должны соответствовать высокие пики.

Далее R-зубцы выявляются пороговой обработкой фильтрованного ЭКГ-сигнала. Опция "Порог" позволяет отобразить порог, используемый для выделения R-зубцов. Опция "Распознанные импульсы" позволяет отобразить места, в которых были распознаны R-зубцы, которые при этом отображаются в виде треугольников единичной высоты с шириной основания, зависящей от настроек алгоритма фильтрации. Если какой-то найденный зубец был отбракован, то высота треугольника становится меньше 1.

Исходный и отфильтрованный кардиосигнал и порог для выделения R-зубцов Желудочковая экстрасистола на ЭКГ

При движении электродов относительно тела могут возникать помехи, значительно превышающие полезный сигнал; для длительных записей в естественных условиях такие ситуации неизбежно возникают время от времени. Для выявления таких участков ЭКГ вычисляется мера дефекта импульсов. Опция «Мера дефекта импульса» позволяет отобразить вычисленную меру на графике. В настройках можно задать порог отбраковки по мере дефекта, если он будет превышен, R-R интервал с участием импульса не будут измеряться. Вообще возможны две стратегии: первая - задать порог отбраковки дефектов достаточно малым, при этом пережившие отбраковку R-R интервалы будут наиболее достоверными, но могут быть потеряны в целом удачно распознанные R-зубцы и яркие аномалии вроде желудочковых экстрасистол. Вторая стратегия - задать порог отбраковки достаточно большим, тогда по уровню меры дефектов на графике, а также по резким скачкам в R-R интервалах будут хорошо видны аномалии.

Кнопка «Выбрать позволяет выбрать новый файл для обработки и визуализации. При нажатии на неё появляется стандартный диалог открытия файлов. Можно выбрать файл в формате *.экг. Кроме того, программа поддерживает открытие файлов *.экг, запакованных в rar-архивы (один файл *.экг в одном файле архива). Для этого рядом с программой должен лежать модуль распаковки unrar.dll.

В поле «Время начала» вводится в формате «часы:минуты:секунды» время начала записи файла. Оно используется для отображения подписей по оси времени. Поле заполняется автоматически, если имя файла имеет формат «ЭКГ_год_мес_день, часы_мин_сек*.*». Обычно такое имя файла автоматически присваивается файлу при скачивании с SD-карты на основе показаний встроенных в кардиограф часов реального времени.

Кнопка «Экспорт данных» позволяет сохранить результаты обработки кардиограммы и прочие данные в виде текстовых файлов с разделителями - символами табуляции для использования в сторонних программах (например, для построения графиков в Excel). Сохраняются:

Текстовые файлы сохраняются рядом с исходным файлом *.экг. В каждой строке файла располагается время в часах от начала суток, в которые началась запись файла, а дальше через символ табуляции остальные параметры.

Нажатие на кнопку «Параметры …» приводит к появлению диалога настройки параметров обработки кардиосигнала. Рядом с каждым параметром есть краткое пояснение его назначения.

Диалог настройки параметров обработки кардиосигнала

После изменения параметров следует нажать кнопку "Сохранить", а после в окне визуализации нажать кнопку "Обработать" для переобработки ЭКГ с новыми параметрами.

Приложение для смартфона / планшета

Пример отображения кардиограммы на смартфоне, подключение по блютуз Создано приложение для отображения кардиограмм на смартфоне или планшете с ОС "Андроид". Достаточно подключить переходник usb-com к usb host (otg) Вашего устройства. Также поддерживается подключение кардиграфа к смартфону по блютуз, если в кардиограф установлен блютуз-модуль HC-05 или HC-06.

Приложение поддерживает переходники usb-com на популярных микросхемах CP210x, PL2303, CH340G. Оно работает со всеми аппаратными реализациями кардиографа. При этом в настройках приложения необходимо выбрать скорость обмена: 57600 бод для версий 1 и 2 и 115200 бод для версии 3. Также необходимо указать количество оцифровываемых каналов ЭКГ (1, 2 или 3).

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

Кнопки в приложении аналогичны кнопкам в основной программе.

Ссылка на apk:
NikyEkgSD1_2023_10_12.apk, исходники тут.

Формат записи данных на SD карту (формат файлов *.экг)

Кардиограф сохраняет данные на SD-карте в виде файлов, представляющих собой последовательность 512-байтных секторов; файлы *.экг представляют собой точную побайтную копию этих данных

Для версий аппаратной части 1.0 - 2.1 данные, хранимые в каждом секторе карты SD, имеют следующую структуру общей длиной 512 байт:

Поле Тип Описание
PSP DWORD Признак файла ЭКГ для опознавания типа файла и начала сектора, равный 0xa73955aa
FileStartSector DWORD Номер первого сектора файла. Позволяет быстро найти первый сектор файла и быстро считать с SD-карты список файлов, начиная с последнего
CurrentSector DWORD Пишется номер текущего записываемого сектора (текущий EmptyPos). На практике не используется, только ради опознования более нового формата
SysTime DWORD Время от начала записи файла в единицах по 102.4 мкс. Используется в режиме визуализации кардиограммы для того, чтобы определить исходя из текущего времени компьютера время начала записи файла и запомнить соответствие между номером первого сектора файла FileStartAdr и временем начала съемки.
TH_Config BYTE Результаты опроса термометра DS1621 на шине I2С. Используются для вычисления температуры, если датчик подключен. При проблемах с обменом по шине I2C в поле TH_I2C_Error заносятся флаги ошибок. Регистры DS1621 опрашиваются чаше, чем реально обновляется температура.
TH_Temperature char
TH_TemperatureLo BYTE
TH_Counter BYTE
TH_Slope BYTE
TH_I2C_Error BYTE
ACP_CH2 WORD Поле кода альтернативного входа АЦП, предназначенного для описания медленно меняющихся процессов (например, сопротивления кожи)
FM_T0 DWORD Поля для измерителя частоты сигнала на входе CCP1. На интервале времени формирования одного сектора SD подсчитывается: число импульсов FM_N на входе CCP1, время прихода первого импульса по системным часам в тактах МК (FM_T0), суммарное по всем импульсам время их прихода (FM_S)
FM_S DWORD
FM_N DWORD
XOut WORD Измерения ускорений. На интервале времени формирования одного сектора SD в XOut, YOut, ZOut накапливаются показания акселерометра MMA7455LT, причем в XYZ_N≤64 число накопленных отчетов. В поле AX_I2CError признак ошибки обмена данными по шине I2C.
YOut WORD
ZOut WORD
AX_I2CError BYTE
XYZ_N BYTE
EKGData WORD[234] Массив из 234 выборок кардиосигнала.

Для версий аппаратной части 3.0 в связи с использованием более новых датчиков изменился формат данных сектора. Изменения коснулись только данных от датчиков, вспомогательные поля для организации файловой системы и поля хранения выборок кардиосигнала остались на прежних местах.

Поле Тип Описание
PSP DWORD Признак файла ЭКГ для опознавания типа файла и начала сектора, равный 0xa73955aa
FileStartSector DWORD Номер первого сектора файла. Позволяет быстро найти первый сектор файла и быстро считать с SD-карты список файлов, начиная с последнего
SensorCode BYTE Код опознавания формата записи. Значения 0,1,2 соотвествуют 1,2,3 каналам записи. Значения не меняются в процессе съёмки, что позволяет идентифицировать новый формат записи (в старом формате данное поле инкрементировалось от сектора к сектору)
Rtc_DMY BYTE[3] Массив, содержащий день, месяц и год в формате BCD от RTC DS3231
SysTime DWORD Время от начала записи файла в единицах по 102.4 мкс. Используется в режиме визуализации кардиограммы для того, чтобы определить исходя из текущего времени компьютера время начала записи файла и запомнить соответствие между номером первого сектора файла FileStartAdr и временем начала съемки.
Keys BYTE Признак нажатия на кнопку. Устанавливается в 1, если имело место нажатие кнопки, и далее инкрементируется (возрастает), пока кнопка удерживается нажатой. Старший бит устанавливается, если SD-карта при записи не успевала писать поток данных
RtcDS3231_Time BYTE[3] Массив, содержащий секунды, минуты, часы в формате BCD от RTC DS3231
RtcDS3231_THi BYTE Температура DS3231, старшая часть
RtcDS3231_TLo BYTE Температура DS3231, младшая часть температуры (биты D7,6). Бит D5-Busy(BSY), D4-Oscillator Stop Flag (OSF), и флаги ошибок на шине I2C в младших битах
Bmp280_PHi, Bmp280_PLo BYTE Измерения датчиком bmp280, давление P и температура T. В Hi:Lo хранятся старшие биты 20-битного измерения. В поле Bmp280_PTl хранятся младшие 4 бита измерений давления и температуры. Старшие два бита Bmp280_I2C_CalIndex хранят признаки ошибок шины I2C, младшие 6 бит - номер байта из области калибровки, значение которого хранится в поле Bmp280_CalByte
Bmp280_THi, Bmp280_TLo BYTE
Bmp280_PTl BYTE
Bmp280_I2C_CalIndex BYTE
Bmp280_CalByte BYTE
Mpu6050_Acl BYTE[6] Измерения датчиком MPU-6050 ускорений по осям X,Y,Z (16-битные знаковые значения)
Mpu6050_t BYTE[2] Измерения датчиком MPU-6050 внутренней температуры (16-битное значение)
Mpu6050_I2CError BYTE Признаки ошибки на шине I2C при опросе датчика MPU-6050
ACP_CH2_New WORD Поле кода альтернативного входа АЦП, предназначеного для описания медленно меняющихся процессов. Обычно прошивки пишут в это поле отладочную информацию: количество распознанных R-зубцов, признаки включения питания модуля блутуза и начала выдачи данных по блютузу
резерв BYTE[4] Резервное место для будущих расширений формата
EKGData WORD[234] Массив из 234 выборок кардиосигнала. Для двух- и трехканальных записей выборки различных каналов чередуются.

Протокол взаимодействия программы с кардиографом

Кардиограф и компьютер (программа) взаимодействуют по интерфейсу RS-232. Скорость обмена зависит от версии аппаратной части: 57600 бод для версий 1.0, 2.0, 2.1 и 2.1duo. Для версий 3.0 и выше скорость обмена 115200 бод (пришлось повысить из-за роста потока данных при трехканальной съёмке ЭКГ, в остальном отличий нет).

Как уже отмечалось, кардиограф может находиться в двух режимах:

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

В режиме копирования ранее записанных данных кардиограф ожидает команды от компьютера и может посылать данные в компьютер только в ответ на определенные команды. Ответ на команду 0xcd, 25 может выполняться с переключением скорости обмена.

Команды, обрабатываемые устройством, перечисленные в следующей таблице

Команда от компа Ответ кардиографа Описание команды
Команды для режима записи кардиограммы
0xcd, 11 0x5e, 0x44, 0xe7, 0x23 Остановки записи и перехода в режим копирования файлов с SD - карты
0xcd, 0x50 0x50 Переключение входа АЦП на вывод AN0. Для версий 3.0 и выше кардиограф начинает первым опрашивать вход AN0_2, на который подаётся сигнал первого отведения без дополнительного усиления; этот выбор сохраняется энергонезависимо
0xcd, 0x51 0x51 Переключение входа АЦП на вывод AN1. Для версий 3.0 и выше кардиограф начинает первым опрашивать входы штатным образом, причем этот выбор сохраняется энергонезависимо
0xcd, 0x52 0x52 Переключение опорных напряжений АЦП на линии питания МК
0xcd, 0x53 0x53 Переключение опорных напряжений АЦП на линии RA2, RA3, которые подключены к аналоговой части схемы, обычно это лучше с точки зрения помех
0xcd, 0x54 0x54 Переключения положительного опорного напряжений АЦП на линию RA3, а линия отрицательного опорного напряжения берется с шины питания МК
0xcd, 0x55 0x55 Включение накопления сигнала, при котором каждая выборка формируется путем сложения нескольких выборок АЦП, который работает на более высокой частоте дискретизации
0xcd, 0x56 0x56 Выключение накопления сигнала
0xcd, 0x57 0x57 Разрешение посыла цифровых данных на блютуз-модуль hc-06. До установления соединения hc-06 находится в режиме приёма AT-команд, поэтому во избежание проблем микроконтроллер не посылает в него данные сразу поле включения модуля блютуз. Посыл начнётся только после данной команды (приложение для андроида шлёт её автоматически после установления соединения, с компьютера её можно послать кнопкой "Блютуз вещать")
0xcd, 0x58 0x58 Запрет посыла цифровых данных на блютуз-модуль hc-06. Рекомендуется послать перед разрывом соединения. Приложение для андроида пошлёт её автоматически перед завершением соединения, с компьютера её можно послать кнопкой "откл". Но возможна ситуация, когда посланная команда не дойдёт
Команды для режима копирования ранее записанных данных
0xcd, 10 0xbb, 0xcc, 0xdd, 0xee, 0xff Перезагрузка устройства (сброс МК), т.е. переход в режим записи нового файла на SD - карту
0xcd, 11 0x5e, 0x44, 0xe7, 0x23 Подтверждения режима остановки записи, также команда остановки чтения группы секторов
0xcd, 12, DWORD Sector, BYTE Size 0xfe + данные с SD карты или код ошибки Прочесть с SD карты заданный сектор StartSector (первые Size*2 байт) + CRC
0xcd, 13, DWORD Sector, BYTE Fill ответ карты SD Команда записи в сектор SD карты Sector заданного байта Fill. При нормальной работе не используется
0xcd, 16 0x57, (ответ на CMD0)-1, ответ на CMD8: R1 + 4 байта; ответ R1 на CMD1; ответ на CMD58_READ_OCR: R1+4 байта. В конце всегда шлется байт MMC_Init_Status Переинициализация SD-карты. Инициализация всегда выполняется при запуске устройства. Инициализация вручную полезна для проверки, как устройство опознает SD карту
0xcd, 23, DWORD Sector, BYTE Data[512] Ответ SD на команду записи сектора, ответ SD на посланный блок данных Команда записи данных Data в сектор Sector на SD карте. При нормальной работе не используется
0xcd, 25, DWORD Sector, BYTE BlockSz2, BYTE Speed 0x53; ответ SD R1; код скорости обмена;
пауза 1 сек;
переключение скорости;
данные SD вида
0xfe, данные, CRC,
0xfe, данные, CRC,
...
Команда запуска чтения группы секторов начиная с Sector. Устройство в цикле читает сектора и выдаёт первые BlockSz2*2 байт + CRC каждого сектора на скорости Speed (0 – 57600/115200 бод, 4 – 460800 бод, 7 – 806400 бод, 8 – 921600 бод). Выйти из этого режима можно только командой 0xcd, 11
0xcd, 34 0x71, DWORD EmptyPos Команда чтения переменной EmptyPos. С неё начинается считывание списка файлов.
0xcd, 35, DWORD EmptyPos 0x71 Команда установки переменной EmptyPos. Используется для "форматирования" или восстановления доступа к данным
0xcd, 40, DatU2 Команды для управления вторым интерфейсом com для конфигурирования блютуза. Если DatU2<0x80, то от компьютера принимается соответствующее количество байт и они посылаются на линию TX2 МК. Если DatU2 = 0x80, то МК посылает в комп количество и массив ранее принятых по линии RX2 байт. Если DatU2 = 0x81, то выдаётся питание на модуль блютуз и скрость com-порта №2 МК устанавливается в 115200 бод. Если DatU2 = 0x81, то питание с модуля блютуз снимается, линии данных второго com-порта дезактивируется (он может быть использован для высокоскоростной выдачи данных на линию RC0 МК). Если DatU2 = 0x82, то следующие 2 байта от компьютера задают скорость порта (регистры U2BRGH:U2BRG).
Если DatU2 = 0x83, то следующий байт задаёт тип выдачи данных на блютуз-модуль: 0 - полный поток, который пишется на SD-карту, 0xa5 - урезанный до 100Гц один канал ЭКГ, 0x4b - частота пульса, найденная на основе выделения R-R интервалов. МК отвечает 0xa5, если данный режим поддерживается прошивкой или 0xa6, если режим не реализован в прошивке.
0xcd, 81, Flags Посыл управляющих данных по шине I2C. Если бит Flags.D0 = 1, то на I2C посылается сигнал «Start». Если бит Flags.D1 = 1, то на I2C посылается сигнал «Stop». Если бит Flags.D2 = 1, то на I2C посылается сигнал «повторный Start». Если бит Flags.D3 = 1, то на I2C посылается бит «Ask». Если бит Flags.D4 = 1, то на I2C посылается бит «NoAsk». Подтверждение выполнения команды в комп не посылается
0xcd, 82, DataI2C I2C_Error Посыл байта данных DataI2C по шине I2C. В ответ МК посылает в комп флаги I2C_Error выявленных на шине I2C ошибок (0 – отсутствие ошибок). Примечание: комп сам отвечает за посыл требуемого адреса I2C абонента перед данными, а также команд «Start» и «Stop»
0xcd, 83 Приём байта данных по шине I2C. Инициируется приём 8 бит данных и в качестве ответа МК посылает в комп принятый байт данных. 9-й бит данных (Ask ли NoAsk) на шину I2C не посылается - для его посыла предназначена отдельная команда 0xcd, 81

Егошкин Н.А., Рязань, © 2007-2024