Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 2232

.pdf
Скачиваний:
26
Добавлен:
30.04.2022
Размер:
14.85 Mб
Скачать

букв, характерных для ключа openBCI (“OpenBCI Dongle”). В Windows

последовательный порт будет указан как номерной COM-порт.

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

2.10.11. Перевод платы Cyton в режим загрузки

Для загрузки кода прошивки необходимо перевести 32-битную плату Cyton в режим загрузчика. В данной плате нет способа удаленного сброса микросхемы, совместимой с “chipKIT”, поэтому это надо сделать вручную, выполнив следующие процедуры:

1.Выключить плату OpenBCI.

2.Нажать одновременно кнопки RST и PROG (рис 2.29).

3.Включите плату OpenBCI.

4.Отпустить кнопку RST, удерживая нажатой кнопку PROG.

5.Отпустить кнопку PROG.

После выполнения указанных действий необходимо убедиться, что синий светодиод на 32-битной плате Cyton мигает.

Далее для загрузки программы надо нажать кнопку загрузки в “Arduino IDE” (рис. 2.30). После этого на плате “OpenBCI Dongle” можно будет наблюдать несколько мигающих светодиодов, и через некоторое время ‘Arduino IDE” сообщит, что прошивка завершена.

60

Рис. 2.29. Кнопки RST и PROG

Рис. 2.30. Кнопка загрузки программы

2.10.12. Загрузка прошивки версий 1.xx

Для загрузки прошивки понадобится:

компьютер с установленным программным обеспечением “Arduino v1.8.0” или новее;

плата “OpenBCI Dongle”, подключенная к USB-порту (рис. 2.31);

плата “OpenBCI Cyton” с питанием от батареи.

Рис. 2.31. Плата “OpenBCI Dongle”

Всегда необходимо перед подачей питания на плату Cyton подключать плату “OpenBCI Dongle” к ПК, поскольку хост (RFduino на Dongle) должен быть подключен к устройству (RFduino на плате Cyton). Для установки Arduino IDE необходимо пройти по ссылке: https://www.arduino.cc/en/Main/Software.

61

Для пользователей Windows справедливы следующие примечания. При установке Arduino 1.8, если установщик предлагает удалить 1.5.8, необходимо переместить папку Arduino, содержащую версию 1.5.8 из “Program Files (x86)”

вдругую папку. Затем переименовать эту папку в папку с названием “Arduino_1.5.8”. Далее надо открыть программу “Установка и удаление программ” Windows и удалить приложение Arduino. Появится всплывающее окно, указывающее на то, что файлы не существуют, и спрашивающее, хотите ли вы удалить программу из списка файлов. Надо выбрать «Да». Затем надо установить версию “1.8.0” в обычном режиме. Затем надо перейти к папке

“Arduino” в директории “Program Files (x86)”. Переименовать папку “Arduino” в “Arduino_1.8.0”. После этого можно переместить папку “Arduino_1.5.8” обратно

вдиректорию “Program Files (x86)”. Все предыдущие прошивки и библиотеки “OpenBCI” вы можете найти в репозитории github https://github.com/OpenBCI/OpenBCI_32bit и “https://github.com/OpenBCI/OpenBCI_32bit_Library/tree/maint/1.0.0”:

OpenBCI_32bit – это прошивка, которая работает на 32-битной плате

OpenBCI Cyton;

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

OpenBCI_32_Daisy – 32-битная библиотека OpenBCI.

Необходимо установить папки “OpenBCI_32_Daisy” и “OBCI_SD” из репозитория библиотек в папку “Documents/Arduino/libraries”. Если в папке эскиза нет папки «libraries», то необходимо её создать. Затем надо переместить папку с именем «OpenBCI_32bit» в папку “Documents/Arduino/”.

Но прежде чем загружать код в микроконтроллер PIC32 с Arduino, необходимо добавить файлы платы “chipKIT” в программу “Arduino IDE”. Далее из выпадающего меню “ Tools >> Board >>” необходимо выбрать плату

OpenBCI (рис. 2.32).

Из выпадающего списка меню “File -> Sketchbook” надо открыть эскиз

“OpenBCI_32bit”. Затем выбрать “OpenBCI 32” из выпадающего меню “Board” (рис. 2.33). Далее надо убедиться, что ползунковый переключатель на плате “OpenBCI Dongle” переключен для выбора контакта “GPIO6” (в направлении к ПК). Если переключатель переключен в другую сторону, то программа попытается запрограммировать RFduino модуль, установленный на плате

“OpenBCI Dongle”. Затем надо подключить плату “OpenBCI Dongle” к ПК и выключить Cyton Board.

Далее необходимо выбирать правильный последовательный порт для платы “OpenBCI Dongle”. Для ОС “Mac” порт будет выглядеть как

“/dev/tty.usbserial-DN00nnnn”, где nnnn - это комбинация цифр и букв, характерных для ключа OpenBCI “OpenBCI Dongle”. В ОС Windows

последовательный порт будет указан как номерной COM-порт.

После того как загружаемый код будет готов к загрузке, необходимо перевести 32-битную плату Cyton в режим загрузчика. Данная плата не

62

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

Рис. 2.32. Выбор платы для программирования

Рис. 2.33. Выбор эскиза

63

Если будет загружаться прошивка версии 3.xx, то необходимо сначала убедиться, что установлена библиотека “WiFi”, прежде чем загружать прошивку. Для этого надо перейти в меню “Sketch > Include Library > Manage Libraries...”. Затем в поле поиска в правом верхнем углу ввести “OpenBCI WiFi”. Далее надо нажать “OpenBCI_WiFi_Master” и установить v1.0.0

библиотеки (или последнюю версию, если есть более новые версии). Далее необходимо выполнить последовательно следующие действия:

1.Выключить плату OpenBCI.

2.Нажать обе кнопки RST и PROG одновременно.

3.Включить плату OpenBCI.

4.Отпустить кнопку RST, удерживая нажатой кнопку PROG.

5.Отпустить кнопку PROG.

После выполнения этих действий синий светодиод на плате Cyton начнет мигать. Это означает, что плата готова к прошивке. Далее надо нажать кнопку загрузки в Arduino IDE (круглая кнопка со стрелкой, указывающей вправо) (рис. 2.34). После этого светодиоды на плате Dongle начнут мигать, и через некоторое время Arduino IDE сообщит, что прошивка завершена.

Рис. 2.34. Кнопка загрузки программы

В некоторых случаях можно увидеть сообщение об ошибке, как показано на рис. 2.35.

Рис. 2.35. Сообщение об ошибке Если появляется сообщение (в 99 случаях из 100):

Program flash:

...................................#################################### done

64

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

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