Почитав несколько историй о том как программисты передают данные с микроконтроллеров на ПК, с целью их удобного отображения на большом экране (SCADA, LabView), пришло мне в голову рассказать еще об одном способе для этого. Способ не новый, но, похоже, не очень известный. Способ заключается в применении программы Atmel Data Visualizer или ее последователя - MPLAB Data Visualizer.
Материал задумывался как пост, а не как мануал, но вышло слишком много буков.
Программы Data Visualizer предоставляет широкие возможности для отображения данных передаваемых по последовательным интерфейсам.
Можно построить по ним график в реальном времени, со всякими маркерами и курсорами, есть режим осцилографа, а главное - Dashboard, где можно мышкой размещать различные цифровые и графические индикаторы, кнопки - эдакая микро-SCADA
Из названия можно сделать вывод что эта программа расчитана на работу с контроллерами фирмы Microchip (Atmel, PIC), но это не совсем так.
Озвучу основные моменты:
Data Visualizer представлен в виде отдельно скачиваемой и устанавливаемой программы. Т.е. для ее использования даже не надо скачивать и устанавливать полные IDE от Microchip. Впрочем, если они уже установлены - значит эта штуковина уже тоже есть в виде плагина.
https://gallery.microchip.com/packages/AtmelDataVisualizerInstaller-Standalone/
https://gallery.microchip.com/packages/MPLAB-Data-Visualizer-Standalone(Windows)/
https://gallery.microchip.com/packages/MPLAB-Data-Visualizer-Standalone(Linux)/
Data Visualizer рассчитан не только на оборудование от Microchip. Он может принимать данные по последовательному порту (USB-UART и всяких виртуальных, в том числе) Фирменные отладчики дают еще больше возможностей по мониторингу аппаратных интерфейсов - на них есть UART, I2C, SPI, GPIO, а так же датчики тока и напряжения (измеряем потребление в динамике), причем, в общем то, с любого устройства. Можно даже обойтись без осциллографа и логического анализатора. Но и эти отладчики стоят заметных денег.
Первичная настройка осуществляется визуально: соединения компонентов изображены в виде штырьковых соединителей, которые перетаскиваются мышкой.
Но для разбора пакетов данных нужны конфиги, которые пишутся в текстовом редакторе.
Документация на все это есть, но есть некоторые непрозрачные моменты, которые стоит раскрыть.
Документация online 1
Документация online 2
Документация PDF 1
Документация PDF 2
Atmel Data Visualizer позволяет получать и визуализировать данные, которые переданы по одному из двух протоколов: Data Stream Protocol (попроще, но требует конфигурирования) и Atmel Data Protocol (навороченный). То есть, переменные, значения регистров внутри микроконтроллера надо передать в виде последовательности байт заданного формата. Форматы хорошо задокументированы.
Чтобы все заработало, в простейшем случае, надо:
Выбрать компонент - источник данных (Serial порт, из списка), установить скорость обмена (Open Terminal стоит отключить если мы не ходим видеть сырой поток данных)
Добавить и подключить компонент парсера нужного протокола Data Streamer и, на появившейся Data Stream Control Panel, указать текстовый файл .ds в котором прописана конфигурация передаваемых данных (согласно описанию).
Пример файла:
D,1,1,ADC0
D,1,2,ADC1
D,1,3,ADC2
B,2,1,Prescaler
Это означает что программа будет ждать по порту следующую последовательность данных:
{(Unsigned byte) start_token} {(Unsigned short) ADC0}{(Unsigned short) ADC1}{(Unsigned short) ADC2}{(Unsigned byte) Prescaler}{(Unsigned byte) инвертированный start_token}
start_token - это похоже любой понраившийся байт.
Парсер прочитает этот файл и отобразит все виды данных, которые он ждет в передаваемом потоке данных. В данном примере: ADC0, ADC1, ADC2, Prescaler (Если парсер не подключать то весь поток данных будет восприниматься как поток единственного байтового параметра, без заголовков).
Распарсенные данные можно мышкой направить на визуализацию: Graph, Osciloscope, Dashboard. Настройки (пресеты) индикаторов на Dashboard и их связи с потоками данных хранятся в текстовых файлах конфигурации .db и .sc
![Пример Dashboard в реализации Atmel Data Visualizer. Почти вес настроено мышкой, плюс немного текста Пример Dashboard в реализации Atmel Data Visualizer. Почти вес настроено мышкой, плюс немного текста](https://habrastorage.org/getpro/habr/upload_files/0d5/43d/8f2/0d543d8f2c77da35f3edc5005daf2825.png)
![Для отображения изменения величины в реальном времени есть довольно много возможностей, и все идет в реальном времени Для отображения изменения величины в реальном времени есть довольно много возможностей, и все идет в реальном времени](https://habrastorage.org/getpro/habr/upload_files/b13/b82/1b5/b13b821b5af7b58611f0eeb6514d5bb6.png)
![Осциллограф в Atmel Data Visualizer похож на настоящий. Позволяет выловить редкий сигнал по уровню и измерить его курсорами Осциллограф в Atmel Data Visualizer похож на настоящий. Позволяет выловить редкий сигнал по уровню и измерить его курсорами](https://habrastorage.org/getpro/habr/upload_files/29f/e51/857/29fe51857af4164a67d403120d079959.png)
Чтобы каждый раз не настраивать все это, есть автоматическое конфигурирование.
Контроллер должен периодически передавать пакет данных в специальном формате, вида:
uint8_t config_id_packet[] = {
/* Token / 0x5F, / Specify checksum LRC8 / 0xB4, 0x00, 0x86, 0x4A, / Configuration ID / 0xC0, 0xFF, 0xEE, 0xC0, 0xFF, 0xEE, 0xC0, 0xFF, 0xEE, 0xC0, 0xFF, 0xEE, / The actual checksum / 0x78, / Inverse of Token */
0xA0
};
Здесь уже другой токен, контрольная сумма по алгоритму LRC8 и идентификатор конфигурации: 0xC0FFEEC0FFEEC0FFEEC0FFEE
При запуске автоматической конфигурации Data Visualizer будет выцеживать этот пакет в потоке данных, а получив его - автоматически подгрузит конфигурацию из файлов C0FFEEC0FFEEC0FFEEC0FFEE.sc, C0FFEEC0FFEEC0FFEEC0FFEE.db и C0FFEEC0FFEEC0FFEEC0FFEE.ds
Один раз этот пакет передать недостаточно: Data Visualizer автоматом подбирает скорость обмена и с первого раза конфигурацию просто не увидит. В примере от разработчика этот пакет передается через каждые 100 пакетов данных.
Для Arduino этот пример несложно адаптировать.
Если все это показалось неудобно, то есть гораздо более сложный Atmel Data Protocol (ADP). Там уже предусмотрен двусторонний обмен данными, а указания на какой индикатор какое значение передать. Пример реализации этого протокола запрятан глубоко в Atmel ASF, а им проще воспользоваться в виде плагина для Microchip Studio. В общем, этот протокол больше привязан к Microchip/Atmel
В целом Atmel Data Visualizer - относительно компактная, и, можно сказать, портабельная программа. НО есть очень большое НО - она вообще никак не сохраняет свое состояние. Максимум - можно сделать подгрузку конфигураций по автодетекту протокола.
MPLAB Data Visualizer лишена многих недостатков предшевственника. Состояние окон сохраняется в файл. Конфигурирование пакета данных и dashboard осуществляется визуально - мышкой. ADP, как таковой вообще не поддерживается, данные принимаются в виде Data Stream (есть импорт из .ds), но теперь это называется Variables Stream. Прикрутили другой, новый протокол DVRT, который позволяет работать уже с набором реальных переменных, импортированных из .elf файла - это уже отладка в реальном времени получается. Интерфейс сделан уже без таскания соединений мышкой, да в вообще покрасивше. И самое занятное, несмотря на то что MPLAB Data Visualizer громоздкий и написан на Java, и грузиться дольше - он работает в несколько шустрее Atmel Data Visualizer, написанного на C#.
![Текстовые файлы остались "под капотом", нов се делается мышкой Текстовые файлы остались "под капотом", нов се делается мышкой](https://habrastorage.org/getpro/habr/upload_files/739/06a/461/73906a461c5c4b8daa08b5794d0300d4.png)
![MPLAB Data Visualizer позволяет отобразить такие же элементы, но красивее MPLAB Data Visualizer позволяет отобразить такие же элементы, но красивее](https://habrastorage.org/getpro/habr/upload_files/2d5/fc4/59e/2d5fc459e05ef654aa16fd0458269d7a.png)
Таким образом, можно получить, например, отличные графики изменения параметров внутри микропроцессорного контроллера не написав ни единой строчки кода для ПК.