Программа EKG_SD_2023xolt.exe предназначена для использования совместно с устройством Простой самодельный кардиограф с записью на SD карту (далее просто «кардиограф»). Программа позволяет:
Программа постоянно совершенствуется с сохранением совместимости, рекомендуется использовать последнюю версию. Она обеспечивает наилучшие возможности по анализу кардиосигнала и обработки записей кардиограмм. Также она работает с любой аппаратной модификацией кардиографа (необходимо выбрать тип аппаратной части в главном окне).
Предыдушая версия программы работала только с аппаратной частью версии 3.0
Для аппаратных частей 1.0, 2.0, 2.1 можно использовать предыдущие программы:
Для аппаратной реализации 2.1 duo можно использовать специальную версию:
Справка для самой первой версии программы (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 байт) наряду с полезными данными сохраняется сигнатура и номер первого сектора файла. Таким образом, хотя данные на карту пишутся строго последовательно, они структурированы в виде файлов. А сами файлы упорядочены по порядку записи.
В качестве имени файла выступает шестнадцатеричный номер первого сектора файла. По возможности к такому имени добавляются время и дата начала записи файла. В новых версиях аппаратной части имеется микросхема часов реального времени, позволяющая легко определить время начала записи. Для старых аппаратных версий кардиографа, не содержащих микросхему часов реального времени, для привязки файла ко времени необходимо во время его записи подключить устройство к компьютеру; при этом программа запоминает соответствие между номером первого сектора и временем начала записи (соответствие между номером начального сектора и датой сохраняется в каталоге 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 интервалах будут хорошо видны аномалии.
Кнопка «Выбрать позволяет выбрать новый файл для обработки и визуализации. При нажатии на неё появляется стандартный диалог открытия файлов. Можно выбрать файл в формате *.экг. Кроме того, программа поддерживает открытие файлов *.экг, запакованных в 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-карте в виде файлов, представляющих собой последовательность 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 |