URC220_Board_Win (Раздаточные материалы), страница 4
Описание файла
Файл "URC220_Board_Win" внутри архива находится в следующих папках: Раздаточные материалы, Документация. PDF-файл из архива "Раздаточные материалы", который расположен в категории "". Всё это находится в предмете "программное обеспечение управляющих комплексов (поук)" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "поук" в общих файлах.
Просмотр PDF-файла онлайн
Текст 4 страницы из PDF
Во вкладке “Download” установить флаг “Use flash loader(s)”.Если в меню слева выбрать пункт “J-Link/J-Trace”, то справа будут показаны всенастройки отладчика J-Link. Подходят настройки по умолчанию.Теперь можно выбрать пункт меню “Project”->”Debug” (или просто нажать Ctrl+D).Появится окно индикации загрузки программы в контроллер, а далее, послеокончания загрузки, выполнение программы автоматически дойдёт до началафункции “main” и остановится. С этого момента отладка программы происходитаналогично отладке программы под Windows (F10 и F11 – Step over и Step into, F9– установить точку прерывания выполнения программы, F5 – запуск программы) –см. рис.
3.624Рис.3.6 Отладка готовой программы4. Библиотека для работы с платой на компьютереДля многих задач не всегда требуется писать программу именно длямикроконтроллера, иногда достаточно простого управления с компьютера. Дляэтого была реализована программа для микроконтроллера, которая принимаеткоманды от компьютера по USB интерфейсу и управляет всеми периферийнымиустройствами. Для компьютера написана библиотека, которая позволяет легкоуправлять платой из любой программы под Windows.4.1 Алгоритм работыВзаимодействие программы с драйвером устройства происходит через объекткласса CURC220.
Прототип класса находится в заголовочном файле “URC220.h”:#include “URC220.h”CURC220 urc;После того, как плата подключается к компьютеру, программа на компьютередолжна обновить списокподключённыхустройств, вызвав функциюUpdateDeviceList объекта класса. Узнать количество подключённых устройствможно с помощью функции GetDeviceCount. Далее, при необходимости, можноопределить имя каждого устройства с помощью функций GetDeviceNameLen иGetDeviceName.
Для начала работы с платой нужно открыть устройствофункцией Open, а по окончании работы вызвать функцию Close. Если устройство25успешно открыто, то записывать и считывать данные можно при помощи функцийDeviceRead и DeviceWrite. Сначала вызывается функция для чтения(DeviceRead),далеепроизводятсянеобходимыедействия(функцииDeviceGetInput, DeviceSetOutput, DeviceGetOutput, DeviceGetADC и т.д.), а поокончании всех действий вызывается функция для записи (DeviceWrite).
Затемцикл повторяется.4.2 Описание функций классаФункция DeleteDeviceListПрототип:void CURC220::DeleteDeviceList();Описание:Функция удаляет список подключенных устройствПринимаемые параметры: нетВозвращаемое значение: нетФункция UpdateDeviceListПрототип:int CURC220::UpdateDeviceList();Описание:Функция обновляет список подключенныхколичество и именаПринимаемые параметры: нетВозвращаемое значение:Функция возвращает 0 в случае ошибкиустройств:Функция GetDeviceCountПрототип:int CURC220::GetDeviceCount(ULONG *Count);Описание:Функция возвращает количество подключенных устройствПринимаемые параметры:Count - указатель на число для записиВозвращаемое значение:Функция возвращает 0 в случае ошибкиФункция GetDeviceNameLenПрототип:int CURC220::GetDeviceNameLen(ULONG Index, ULONG *Len);Описание:Функция возвращает длину имени устройстваПринимаемые параметры:Index - номер устройства в списке (начиная с 0)Len - указатель на число для записи длины имениВозвращаемое значение:Функция возвращает 0 в случае ошибкиФункция GetDeviceName26определяетихПрототип:int CURC220::GetDeviceName(ULONG Index, char *pBuffer, ULONG BufferSize);Описание:Функция для определения имени устройства по номеруПринимаемые параметры:Index - номер устройства в списке (начиная с 0)pBuffer - буфер для записи имениBufferSize - максимальное число байт, которое можно записать в буферВозвращаемое значение:Функция возвращает 0 в случае ошибкиФункция GetPipeObjectПрототип:CURCPIPE* CURC220::GetPipeObject();Описание:Функция возвращает указатель на объект CURCPIPEПринимаемые параметры: нетВозвращаемое значение:Указатель на объект CURCPIPEФункция CloseПрототип:void CURC220::Close();Описание:Функция закрывает устройствоПринимаемые параметры: нетВозвращаемое значение: нетФункция OpenПрототип:int CURC220::Open(ULONG Index);Описание:Функция открывает устройствоПринимаемые параметры:Index - номер устройства в списке (начиная с 0)Возвращаемое значение:Функция возвращает 0 в случае ошибкиФункция DeviceReadПрототип:int CURC220::DeviceRead();Описание:Считывает текущее состояние устройстваПринимаемые параметры: нетВозвращаемое значение:Функция возвращает 0 в случае ошибкиФункция DeviceWriteПрототип:int CURC220::DeviceWrite();27Описание:Записывает внесенные изменения параметров в устройствоПринимаемые параметры: нетВозвращаемое значение:Функция возвращает 0 в случае ошибкиФункция DeviceGetInputПрототип:int CURC220::DeviceGetInput(ULONG Index, UCHAR *Value);Описание:Считывает значение на порту вводаПринимаемые параметры:Index - номер порта: 0..3Value - указатель на число для записи значения: 0 или !0Возвращаемое значение:Функция возвращает 0 в случае ошибкиФункция DeviceSetOutputПрототип:int CURC220::DeviceSetOutput(ULONG Index, UCHAR Value);Описание:Записывает значение в порт выводаПринимаемые параметры:Index - номер порта: 0..7Value - число для записи в порт: 0 или !0Возвращаемое значение:Функция возвращает 0 в случае ошибкиФункция DeviceGetOutputПрототип:int CURC220::DeviceGetOutput(ULONG Index, UCHAR *Value);Описание:Возвращает значение, которое сейчас установлено на порту выводаПринимаемые параметры:Index - номер порта: 0..7Value - указатель на число для записи значения: 0 или !0Возвращаемое значение:Функция возвращает 0 в случае ошибкиФункция DeviceGetADCПрототип:int CURC220::DeviceGetADC(ULONG Channel, USHORT *Value);Описание:Считывает значение АЦППринимаемые параметры:Channel - номер канала: 0..3Value - указатель на число для записи значения: 0..1023Возвращаемое значение:Функция возвращает 0 в случае ошибки28Функция DeviceSetPWMПрототип:int CURC220::DeviceSetPWM(ULONG Channel, SHORT Value);Описание:Устанавливает значение ШИМПринимаемые параметры:Channel - номер канала: 0..3Value - новое значение ШИМ: -1000...+1000Возвращаемое значение:Функция возвращает 0 в случае ошибкиФункция DeviceGetPWMПрототип:int CURC220:: DeviceGetPWM(ULONG Channel, SHORT *Value);Описание:Возвращает установленое значение ШИМПринимаемые параметры:Channel - номер канала: 0..3Value - указатель на число для записи значения: -1000...+1000Возвращаемое значение:Функция возвращает 0 в случае ошибкиФункция DeviceGetEncПрототип:int CURC220::DeviceGetEnc(ULONG Index, LONG *Value);Описание:Считывает значение энкодеровПринимаемые параметры:Index - номер энкодера: 0..1Value - указатель на число для записи значенияВозвращаемое значение:Функция возвращает 0 в случае ошибки5.
Применение библиотеки5.1 Создание нового проекта в Microsoft Visual Studio 20031. Для начала нужно открыть Microsoft Visual Studio 2003. После этого необходимосоздать новый проект File–>New–>Project (рис 5.1.1).29Рис. 5.1.12. Далее следует указать тип проекта (Visual Studio C++ –> Win32)и в соседнемполе выбрать Win32 Console Project. В соответствующих текстовых полях указатьназвание проекта (в данном случае «Test») и директорию, в которой будет созданпроект. После нажатия на Ok появиться новое окошко (Рис.5.1.2).Рис. 5.1.23. В этом окне (Рис.
5.1.2) выбрать закладку Application Settings (находится подOverview). Установить галочку напротив пункта Empty project (Рис. 5.1.3) и нажатьFinish.30Рис. 5.1.3.4. После этих операций будет создан пустой проект. На рисунке 5.1.4 показано какон выглядит.Рис. 5.1.4.315. В проект необходимо добавить .cpp файл, в котором будет написан исходныйкод программы. Для этого надо воспользоваться меню Project–>Add New Item. НаРисунке 5.1.5 показана структура меню.Рис.
5.1.5.6. Далее необходимо ввести имя создаваемого файла, например, «main.cpp». Дляэтого следует выбрать категорию файла «Code» в левой половине окна и типфайла «С++ File (.cpp)». В текстовом поле «Name:» ввести имя создаваемогофайла и нажать «Open». Рисунок 5.1.6 иллюстрирует это.Рис. 5.1.6.327. После этих операций будет создан файл main.cpp и добавлен к текущемупроекту. В этом файле можно написать код простой программ, которая выводит вконсоль строчку (Рис. 5.1.7).Рис. 5.1.7.Привожу код, чтобы можно было скопировать.// подключение необходимых библиотек#include <stdio.h>#include <conio.h>void main (){// Печатает строкуprintf ("Hello world!\n");// ждёт нажатия любой кнопки на клавиатуре_getch ();}5.2 Пример простой программыДля работы с контроллером URC220 требуется скопировать в папку с проектом 4файла: «URC220.h», «URC220.lib», «URCPIPE.h» и «URCPIPE.lib».
В этих файлахнаходятся прототипы функций необходимых для работы контроллером. Сами жефункции находятся в файлах «URC220.dll» и «URCPIPE.dll». При установкедрайвера эти два .dll файла автоматически копируются в системный каталогWindow. Рассмотрим работу с платой на примере. Программа будет гасить наплате светодиод OUT1 и зажигать OUT2, при этом состояние остальныхсветодиодов не изменяется.// Подключение стандартных библиотек33#include <windows.h>#include <conio.h>#include <stdio.h>// Подключение библиотеки для работы с платой#include "URC220.h"// Начало выполнения программыvoid main (){// Создаю объект платы// (CURC220 - тип; board - имя переменной);CURC220 board;// Узнаю, есть ли вообще платыboard.UpdateDeviceList ();// в этой переменной будет храниться количество плат// подключённых к компьютеруunsigned long int deviceNum = 0;// Узнаю чило платboard.GetDeviceCount (&deviceNum);if (deviceNum == 0) //если плат нет{printf ("Board not connected :(\n");}else // если платы есть{// соединяюсь с платой под номером 0board.Open (0);// Записываю новое значение в буферboard.DeviceSetOutput (1, 0);board.DeviceSetOutput (2, 1);// Применяю изменения к платеboard.DeviceWrite ();// отсоединяюсь от устройстваboard.Close ();}}5.2.1 Инициализация контроллераПервое действие - это создание объекта класса CURC220.
В примере объектназывается «board». Далее необходимо вызвать функцию этого классаboard.UpdateDeviceList (). Функция опрашивает драйвер USB порта и составляетсписок устройств, подключённых к USB на данном компьютере. Функцияboard.GetDeviceCount (&deviceNum) определяет сколько контроллеров URC220подключено к ПК. Функция board.Open (i) соединяется с контроллером подномером i. Естественно, что если указать i >= deviceNum, то подключения кконтроллеру не произойдёт, так как контроллер не подключен. После успешногозавершения board.Open (i) можно переходить к работе с контроллером.5.2.2 Обмен данными с контроллеромДля ускорения работы в «URC220.dll» реализована работа с контроллером черезбуфер.