Главная » Статьи » Swordfish |
USB HID + Visual Basic 6 все просто(часть 2)
USB HID + Visual Basic 6
Разбор программы для PIC
Вместо предисловия: Продолжим разбор полетов. Как было сказано в аннотации часть вторая посвещается разбору программы для PIC. После генерации плагином EasyHID у нас есть готовый кусок кода для связки PICа с внешним миром. Code
{
***************************************************************************** * Name : USBPROJECT.BAS * * Author : [select VIEW...EDITOR OPTIONS] * * Notice : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] * * : All Rights Reserved * * Date : 13.01.2010 * * Version : 1.0 * * Notes : * * : * ***************************************************************************** } // device and clock... Device = 18F4550 Clock = 48 // 20Mhz crystal, 48Mhz internal (FS USB) Config PLLDIV = 5, CPUDIV = OSC1_PLL2, USBDIV = 2, FOSC = HSPLL_HS, VREGEN = ON // this is the programs descriptor, generated by EasyHID - you // can find it in the same folder as this program... #option USB_DESCRIPTOR = "USBProjectDesc.bas" // import the HID module... Include "usbhid.bas" // an example TX report structure, which contains a message // string and two word values - the variable TXReport will overlay // the structure over the USB dual port RAM buffer... Structure TTXReport Message As String ValueA As Word ValueB As Word End Structure Dim TXReport As TTXReport Absolute TXReportRAM // an example RX report structure, which contains some bit // value and a configuration byte - the variable RXReport will overlay // the structure over the USB dual port RAM buffer... Structure TRXReport LED0 As Bit LED1 As Bit Configuration As Byte End Structure Dim RXReport As TRXReport Absolute RXReportRAM // rather than using the above structures, you can read and write data // directly into a buffer array - choose which method you prefer - examples // are given in the main program block... Dim Buffer(32) As Byte // connect to USB... Repeat Service Until Attached // the main program loop shows two different ways in which you can read and // write HID data. The ReadReport() and WriteReport() techniques are very useful // when sending and receiving highly structured data (for example, string, bits, // words etc). If you just want to send and receive blocks of bytes, then // ReadArray() and WriteArray() are probably more useful - you can of course // use both ways! While true // this is one way you can read some HID data... If DataAvailable Then ReadReport // the data is now in our RX structure - for example, PORTD.0 = RXReport.LED0 etc... // Alternatively, you can access the buffer directly as an array. For example, // HID.RXReport(0), HID.RXReport(1)... EndIf // rather than using ReadReport(), as shown above, you can read data directly // into a buffer array. For example, If DataAvailable Then ReadArray(Buffer,10) EndIf // this is one way you can write some HID data... TXReport.Message = "Hello World" TXReport.ValueA = $1234 TXReport.ValueB = $0000 WriteReport // rather than using WriteReport(), as shown above, you can write data directly // into a buffer array. For example, Buffer(0) = 0 Buffer(1) = 1 WriteArray(Buffer,2) // if the USB_SERVICE option has been disabled, you MUST poll the USB // connection every 1 ms or so to keep it alive and handle pending // transactions on the bus... Service Wend Code
// Устанвка процессора и тактовой частоты
// Ни чего не меняем здесь т.к. 48 это частота внутреннего кварцевого генератора для работы с USB Device = 18F4550 Clock = 48 // 20Mhz crystal, 48Mhz internal (FS USB) Требуется наличие внешнего кварца на 20MHZ Config PLLDIV = 5, CPUDIV = OSC1_PLL2, USBDIV = 2, FOSC = HSPLL_HS, VREGEN = ON Типовая схема включения PIC с USB приведена ниже джампер на схеме выбор режима питания (USB) или внешнее. Вместо кварца, кондюков, резистора можно использовать готовое решение. Резонатор серия ZTT 20MHz. Кондюк между VUSB и землей обязателен. Сколько первый раз промучился думая почему не работает (В нете в некоторых схемах он не указан). Остальная обвязка уже по Вашему усмотрению. Code
// этот дескриптор генерируется программой EasyHID на основании Ваших задач
// его можно найти в каталоге с программой #option USB_DESCRIPTOR = "USBProjectDesc.bas" // импортируем(подключаем) HID модуль(библиотеку)... Include "usbhid.bas" здесь то же нечего менять Code
// Так как SWORDFISH язык стуктурированный здесь прописаны структуры для приема - передачи
//для удобства восприятия и работы с переменными // Пример отчета структуры передачи, которая содержит сообщение // строку и два значения слова Structure TTXReport Message As String ValueA As Word ValueB As Word End Structure Dim TXReport As TTXReport Absolute TXReportRAM // Пример отчета структуры приема, которая содержит два бита состояния // и бит конфигурации Structure TRXReport LED0 As Bit LED1 As Bit Configuration As Byte End Structure Dim RXReport As TRXReport Absolute RXReportRAM // при использовании вышеуказанных структур могут быть не понятны или сложны // поэтому есть вариант читать и записывать данные непосредственно в буферной массив //примеры приведены в основном блоке программы ... Dim Buffer(32) As Byte //Массив для приема-передачи данных через массив Code
// connect to USB...(Соединение с USB)
Repeat Service Until Attached // Основной цикл программы показывает две различных способв, которыми вы можете читать и // записывать HID данных. ReadReport () и WriteReport () методы являются очень полезными // при отправке и получении четко структурированных данных (например, строки, биты, // слова и т.д.). Если вы просто хотите, чтобы отправлять и получать блоки байтов, используйте // ReadArray () и WriteArray () используется для работы в обоих направлениях! Code
// Это один из способов которым Вы можете прочитать HID данных ...
If DataAvailable Then ReadReport // Прием данных в зависимосиот нашей RX структуры - например, // PORTD.0 = RXReport.LED0 // PORTD.1 = RXReport.LED1 // MyStatus=RXReport.Configuration т.д. .. // В качестве альтернативы, вы можете получить доступ буфера непосредственно в виде массива. Например, // HID.RXReport (0), HID.RXReport (1) ... EndIf Code
//Вместо использования ReadReport (), как показано выше, Вы можете читать данные непосредственно
// в буфер массива. Например, If DataAvailable Then ReadArray(Buffer,10) // считать 10 байт в массив EndIf Это все что касается чтения от PC, теперь займемся записью Code
// Это один из способов записи HID данных на основе структуры...
TXReport.Message = "Hello World" TXReport.ValueA = $1234 TXReport.ValueB = $0000 WriteReport Code
// Второй способ записи HID с помощью массива...
Buffer(0) = 0 // заполняем массмв Buffer(1) = 1 WriteArray(Buffer,2) // передаем два бита из массива Code
// Если параметр USB_SERVICE был отключен, вы должны опрашивать USB
// подключение каждую 1 мс или около того, чтобы сохранить соединение шины Service // пусть лучше останется Ну вроде бы и все. В архиве лежит типовой кусок кода для SWORDFISH и VisualBasic 5-6. Архив с тестовым проджектом будет выложен в третьей части статьи Испытательная лаборатория электрофизических измерений https://alisveta.by/ — обслуживание и ремонт трансформаторных подстанций, ремонт повреждений кабеля, электрофизические измерения (ЭФИ), внедрение АСКУЭ, высоковольтные испытания оборудования и средств защиты, поверка трансформаторов тока. | |
Просмотров: 11987 | | |
Всего комментариев: 0 | |