Материал: Аппаратура для электроэнцефалографических исследований. Журавлев Д.В

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

2.10.13. Загрузка прошивки для 8-битной платы

8-битное оборудование больше не поддерживается. Для загрузки прошивки понадобится:

Компьютер под управлением Arduino IDE.

Плата OpenBCI Dongle, подключенная к USB-порту ПК.

Плата OpenBCI 8bit с питанием от батареи.

Перед загрузкой необходимо убедиться, что ползунковый переключатель на плате OpenBCI Dongle переключен на выбор контакта GPIO6. Таким образом, сигнал сброса DTR будет передаваться по радиоканалу на “ATmega328”. Если переключатель направлен в другую сторону, то программа попытается запрограммировать RFduino модуль, установленный на плате

”OpenBCI Dongle”.

Последние версии прошивок и библиотек можно найти в репозитории github (https://github.com/OpenBCI/OpenBCI_8bit). Необходимо установить следующие файлы из репозитория в папку “Documents/arduino/library”:

SdFat – поддерживает запись необработанных данных на встроенную SDкарту.

OpenBCI_8 – библиотека OpenBCI 8bit (рис. 2.36).

Рис. 2.36. Установка “OpenBCI_8bit_SD”

65

Далее надо переместить файл “OpenBCI_8bit_SD.ino” в папку “Documents/arduino” и запустить Arduino IDE. После этого должен появиться эскиз в папке Sketch.

Далее надо выбрать “Arduino UNO” из выпадающего меню “Board” (рис.

2.37).

Рис. 2.37. Выбор “Arduino UNO”

Затем надо выбрать правильный последовательный порт для платы

“OpenBCI Dongle” (рис. 2.38). На ОС “Mac” он будет называться как “/dev/tty.usbserial-DN00nnnn”, где nnnn - это комбинация цифр и букв,

характерных для ключа “OpenBCI Dongle”. В ОС Windows последовательный порт будет указан как COM-порт.

Рис. 2.38. Выбор последовательного порта

66

Рис. 2.39. Кнопка загрузки

2.10.14. Устранение проблем с загрузкой

Если во время загрузки в ОC Linux возникли проблемы с файлом “Board_Defs.h”, то надо переместить все файлы из директории

“/Arduino/hardware/chipkit-core/pic32/variants/openbci/” в директорию “/Arduino/hardware/chipkit-core/pic32/cores/pic32/”. Данное действие должно исправить все проблемы, возникающие при компиляции.

Если загрузка не удалась с сообщением “No Target Found”, то можно попробовать следующие действия:

1.Отключить ключ и устройство.

2.Подключить ключ к компьютеру.

3.Подключить устройство к компьютеру.

4.Перевести устройство в режим загрузчика.

5.Попробовать загрузить снова.

Если при загрузке происходит сбой с названием “Program Flash Failed”, то

это происходит из-за того, что Arduino IDE не может читать данные с последовательного порта достаточно быстро. Это приводит к нехватке ресурсов или общей мощности компьютера. Для устранения этого рекомендуется предпринять следующие действия:

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

Держать Arduino IDE открытым, поверх всех окон и по центру. Также не использовать другие программы во время загрузки.

Закрыть все открытые программы, такие как Google Chrome, MS Word и т. д.; Во время загрузки открыть только среду разработки Arduino 1.6.5.

Перезагрузить компьютер и не открывать другие программы, кроме Arduino IDE, используемые для программирования.

Если вышеуказанные действия не помогают, то необходимо использовать

более производительный компьютер. Если ничего из вышеперечисленного не помогает, то можно попытаться изменить время опроса устройства. Время опроса можно настроить с помощью программного обеспечения “OpenBCI Radio Config Utility”.

67

2.10.15. Примечания по обновлению и использованию прошивки платы Cyton v2.0.0

2.10.15.1. Отправка пакетов данных с Pic32 на ПК

Программное обеспечение для плат OpenBCI Cyton было обновлено для всех трех основных микроконтроллеров, Pic32 и обоих модулей RFduino на плате Dongle (Host) и плате Cyton (Device).

Даже используя частоту дискретизации 250 Гц, физическое оборудование системы находится на пределе своих возможностей. Это происходит из-за медленной скорости последовательной передачи данных между микроконтроллером Pic32 и модулем RFduino (всего 115200 бод, несмотря на то, что в радиоканале модуля RFduino поддерживается более высокая скорость!). Низкая скорость также обусловлена тем, что модуль RFduino, находящийся на плате Cyton, должен посылать пакеты данных сразу, как только получит их с микроконтроллера Pic32. При программировании микроконтроллера по радиоканалу необходимо иметь возможность объединять несколько радиопакетов в одну страницу и записывать их одновременно, поэтому перед началом программирования по радиоканалу необходимо дождаться получения всех данных через последовательный порт. Эти два требования привели к созданию оригинальной прошивки. Оригинальность заключается в том, что используется состояние, в котором Device и Host находятся в любом режиме (передача в потоковом режиме либо нет). Но это может привести к проблемам и не возможности связаться ПК с платой Cyton, потому что радиомодули не могут самостоятельно выйти из потокового режима. При этом кнопка сброса на плате Cyton привязана к радиомодулю на плате Cyton, следовательно, придется включать и выключать весь цикл работы платы Cyton.

Например, необходимо отправить пользовательские данные из платы Cyton в ПК. Для этого просто достаточно перед данными поставить правильный начальный байт “0x41”и после данных стоп-байт “0xCX” (где X находится в пределах 0-F(в шестнадцатеричном формате)). В базе OpenBCI_32bit_Library код выглядит следующим образом:

/*

* @description Writes channel data and axisData array to serial port in

*the correct stream packet format.

*Adds stop byte OPENBCI_EOP_STND_ACCEL. See OpenBCI_32bit_Library_Definitions.h

*/

void OpenBCI_32bit_Library::sendChannelDataWithAccel(void) { Serial0.write('A'); // 0x41 1 byte

Serial0.write(sampleCounter); // 1 byte ADS_writeChannelData(); // 24 bytes accelWriteAxisData(); // 6 bytes

Serial0.write(OPENBCI_EOP_STND_ACCEL); // 0xC0 1 byte sampleCounter++;

}

68

Этот код записывает 33 байта данных, посланных от микроконтроллера Pic32 до радиомодуля на плате Cyton в правильном формате. Поэтому, как только код прибудет на радиомодуль платы Cyton, он будет отправлен по радиоканалу на радиомодуль платы “OpenBCI Dongle”, соединенной с ПК. Новое решение в версии прошивки 2 - это возможность использовать разные стоп-байты. В оригинальной прошивке можно было отправлять только стоп-байты “0xC0”. В новой версии можно отправлять стоп-байты “0xCn” (где n – есть значения в диапазоне 0-F(в шестнадцатиричном формате)).

Если необходимо отправлять только 20 байт данных на пакет, то все равно надо отправлять все 33 байта с правильными байтами начала и конца. Слишком быстрая отправка данных приведет к переполнению буфера на “Device” и приведет к перезагрузке системы и отправке сообщения об ошибке в “Host” и ПК.

2.10.15.2. Отправка одного байта данных каждые 10 мс на частоте 100 Гц

Далее приведем пример, взятый из файла “BoardWithCustomData.ino”

из папки “examples” проекта “OpenBCI_32bit_Library” в репозитории:

void sendLEDStatus() {

//Must have header byte Serial0.write('A'); // 0x41 1 byte

//Write the LED state Serial0.write(LEDState); // 1 byte

//Fill the rest with fake data

for (int i = 0; i < 30; i++) { Serial0.write(0x00);

}

//Send a stop byte with an `B` or `1011` in the last nibble to indicate a

//different packet type.

Serial0.write(0xCB); // 1 byte

}

Как можно видеть в коде, там действительно отправляется только 1 байт. Для того чтобы сделать это быстро, на частоте 100 Гц, необходимо “обернуть” этот байт в начальный байт и стоп-байт, чтобы сообщить об отправке пакета радиомодулю “Device” после того, как пройдет стоп-байт.

2.10.16. Новая методика оптимизации кода для микроконтроллера Pic32

Чтобы сделать программирование на пользовательских устройствах более доступным для начинающих программистов, сложность “.ino” файлов была значительно сокращена. Также был добавлен набор функций, которые дают большие возможности для программирования. Была создана среда для привлечения вклада в основной проект в виде программных примеров от

69

Источник: https://studfile.net/preview/16566241/