Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

джостик с нуля (pic18f2450) USB HID Joystick

Пн сен 18, 2017 09:20:27

привет хочу понятьалгоритм работы кода джостика и собрать его от кода до запуска.
нашел вот это:
http://eleccelerator.com/tutorial-about ... scriptors/
https://os.mbed.com/users/wim/notebook/ ... ck-device/


это весь код который необходимый для программы джостика (тот что ниже)?
и что еще подключено вот это в код?
Include "Th_hid_desc.bas" ' ------- этот же код вроде есть в конце ниже
'Include "modedefs.bas" ' ------- это вообще не понял что такое







PBP Code-----------------------------------
Include "Th_hid_desc.bas" ' Include the HID descriptors
'Include "modedefs.bas" ' Include serial modes

DEFINE OSC 48
DEFINE LOADER_USED 1
DEFINE RESET_ORG 1100h ' For Microchip USB Bootloader
DEFINE INTERRUPT_ORG 1108h ' For Microchip USB Bootloader 'LED var PORTC.0

' Define ADCIN parameters
Define ADC_BITS 8 ' Set number of bits in result
Define ADC_CLOCK 3 ' Set clock source (3=rc)
Define ADC_SAMPLEUS 100 ' Set sampling time in uS

'Define LCD_DREG PORTB ' LCD data pin port
'Define LCD_DBIT 0 ' LCD data pin bit
'Define LCD_RSREG PORTC ' LCD register select pin port
'Define LCD_RSBIT 6 ' LCD register select pin bit
'Define LCD_EREG PORTC ' LCD enable pin port
'Define LCD_EBIT 7 ' LCD enable pin bit
'Define LCD_BITS 4 ' LCD number of data bits
'Define LCD_LINES 2 ' LCD number of lines

'define HSER_RCSTA 090h
'define HSER_TXSTA 0A4h
'define HSER_BAUD 115200
'define HSER_CLROERR

USBBufferSizeMax con 10 ' maximum buffer size
USBBufferSizeTX con 10 ' input
USBBufferSizeRX con 10 ' output

' the USB buffer...
USBBuffer Var Byte[USBBufferSizeMax]
USBBufferCount Var Byte
temp var byte

' ************************************************** **********
' * Port configuration: *
' * PORTD.0-7 are digital inputs *
' * AN0,AN5 active as analog inputs *
' ************************************************** **********

PORTA = 0
PORTB = 0
PORTC = 0
PORTD = 0
PORTE = 0
TRISA = %11111111
TRISB = %11111111
TRISC = %11111111
TRISD = %11111111
TRISE = %11111111

ADCON1 = %00001001

' ************************************************** **********
' * main program loop - remember, you must keep the USB *
' * connection alive with a call to USBService every couple *
' * of milliseconds or so... *
' ************************************************** **********
USBInit ' initialise USB...
ProgramStart:
'gosub DoUSBIn
ADCIN 0,USBBuffer[0]
ADCIN 1,USBBuffer[1]
ADCIN 2,USBBuffer[2]
USBService
ADCIN 3,USBBuffer[3]
ADCIN 4,USBBuffer[4]
ADCIN 5,USBBuffer[5]
GoSub DoUSBOut ' keep connection alive
ADCIN 6,USBBuffer[6]
ADCIN 7,USBBuffer[7]

temp = 255-PORTD
USBBuffer.0(64) = temp.4
USBBuffer.0(65) = temp.5
USBBuffer.0(66) = temp.6
USBBuffer.0(67) = temp.7

temp = 255-PORTB
USBBuffer.0(68) = temp.0
USBBuffer.0(69) = temp.1
USBBuffer.0(70) = temp.2
USBBuffer.0(71) = temp.3

USBBuffer.0(72) = temp.4
USBBuffer.0(73) = temp.5
USBBuffer.0(74) = temp.6
USBBuffer.0(75) = temp.7


'GoSub DoUSBOut
USBBufferCount = USBBufferSizeTX ' TX buffer size
USBService ' keep connection alive
USBOut 1, USBBuffer, USBBufferCount, DoUSBOut2 ' if bus available, transmit data
DoUSBOut2:

GoTo ProgramStart

DISCRIPTOR code----------------------------------------------------------------
ReportDescriptor1
RETLW 0x05
RETLW 0x01 ; USAGE_PAGE (Generic Desktop)
RETLW 0x09
RETLW 0x04 ; USAGE (Joystick)
RETLW 0xa1
RETLW 0x01 ; COLLECTION (Application)
RETLW 0x05
RETLW 0x01 ; USAGE_PAGE (Generic Desktop)
RETLW 0x09
RETLW 0x04 ; USAGE (Joystick)
RETLW 0xa1
RETLW 0x00 ; COLLECTION (Physical)
RETLW 0x09
RETLW 0x30 ; USAGE (X)
RETLW 0x09
RETLW 0x31 ; USAGE (Y)
RETLW 0x09
RETLW 0x32 ; USAGE (Z)
RETLW 0x09
RETLW 0x33 ; USAGE (Rx)
RETLW 0x09
RETLW 0x34 ; USAGE (Ry)
RETLW 0x09
RETLW 0x35 ; USAGE (Rz)
RETLW 0x09
RETLW 0x36 ; USAGE (Ry)
RETLW 0x09
RETLW 0x37 ; USAGE (Rz)
RETLW 0x75
RETLW 0x08 ; REPORT_SIZE (8)
RETLW 0x95
RETLW 0x08 ; REPORT_COUNT (8)
RETLW 0x35
RETLW 0x00 ; PHYSICAL_MINIMUM (0)
RETLW 0x46
RETLW 0xff
RETLW 0x00 ; PHYSICAL_MAXIMUM (255)
RETLW 0x15
RETLW 0x00 ; LOGICAL_MINIMUM (0)
RETLW 0x26
RETLW 0xff
RETLW 0x00 ; LOGICAL_MAXIMUM (255)
RETLW 0x81
RETLW 0x02 ; INPUT (DataVarAbs)
RETLW 0xc0 ; END_COLLECTION
RETLW 0x05
RETLW 0x09 ; USAGE_PAGE (Button)
RETLW 0x19
RETLW 0x01 ; USAGE_MINIMUM (Button 1)
RETLW 0x29
RETLW 0x10 ; USAGE_MAXIMUM (Button 16)
RETLW 0x15
RETLW 0x00 ; LOGICAL_MINIMUM (0)
RETLW 0x25
RETLW 0x01 ; LOGICAL_MAXIMUM (1)
RETLW 0x45
RETLW 0x00 ; PHYSICAL_MAXIMUM (0)
RETLW 0x75
RETLW 0x01 ; REPORT_SIZE (1)
RETLW 0x95
RETLW 0x10 ; REPORT_COUNT (16)
RETLW 0x81
RETLW 0x02 ; INPUT (Data Var Abs)
RETLW 0xc0 ; END_COLLECTION
EndReportDescriptor1

Re: джостик с нуля (pic18f2450) USB HID Joystick

Пн сен 18, 2017 12:21:45

Хотите понять алгоритм, покажите как вы его понимаете, если вопросы по коду, задайте тем кто его написал.

Re: джостик с нуля (pic18f2450) USB HID Joystick

Пн сен 18, 2017 12:57:32

забыл сказать что я НОВИЧЕК полный

предположим я написал вот этот дискриптор.
дискриптор как я понимаю просто описывает как и в какой последовательности выполянть нажатие кнопок джостика.
Но дискриптор это же еще не код программы. правильно?

ДИСКРИПТОР
----------

USAGE_PAGE (Button)
USAGE_MINIMUM (Button 1)
USAGE_MAXIMUM (Button 3)
LOGICAL_MINIMUM (0)
LOGICAL_MAXIMUM (1)
REPORT_COUNT (3)
REPORT_SIZE (1)
INPUT (Data,Var,Abs)
----------

КОД
----------
Include "_joydiscr.h" ' привязал дискриптор к коду (тот что выше 8 строчек)

что писать сюда надо .незнаю? :(
----------

если бы где то достать проэкт протеус . глять хотя бы.
тогда как должен выглядеть код основной программы. например в джостике 3 кнопки . как указано в дискрипторе выше?

Добавлено after 9 minutes 35 seconds:
нашел такую еще ссылку https://os.mbed.com/users/wim/notebook/ ... ck-device/

там тоже есть дискриптор о какой то код.
ВОПРОС. можно ли запустить в протеусе проэкт имея только код из СТАТЬИ ?

Re: джостик с нуля (pic18f2450) USB HID Joystick

Пн сен 18, 2017 13:54:56

Дескрипторы описывают значения и размеры полей при инициализации подключения - это не код, а ДЕФАЙНЫ.
Сам стек - это матрешка из машин состояний. При обмене буфер приема и буфер передачи готовы к чтению/записи в при определенных состояниях этих машин.
Основой цикл стека имеет по сути ДВЕ функции. Одна управляет стеком, а вторая является приложением пользователя.
HID USB device (не путать с HID USB host - это другой стек) имеется в MLA (библиотека Микрочипа), там же имеется работающий пример для джойстика. Все стеки в библиотеке отдефайнены под разные типы МК, то есть их нужно вначале скорректировать, указав тип МК.
ЗЫ. В догон. Память стека определена как динамическая, поэтому нужно внимательно обращаться с буферами стека. При изменении размеров буфера обмена он оказывается на других адресах, а кроме того, адреса буферов в других состояниях стека содержат совершенно другую информацию.

Re: джостик с нуля (pic18f2450) USB HID Joystick

Пн сен 18, 2017 15:47:45

а посмотрите пожалуйста эту маленькую статью.
настольлко крошечного и понятного кода я еще не видел .
https://www.pjrc.com/teensy/td_joystick.html

но это для какой то teensy платы разработчика


не могу понять почему так тяжело сделать ждостик даже с 1 кнопкой. такой огромный код надо писать. ведь 1 кнопка же
1- нажал
0 - отпустил

Re: джостик с нуля (pic18f2450) USB HID Joystick

Пн сен 18, 2017 18:35:14

сам джойстик сделать несложно. Сложным получается стек USB. Стеку совершенно безразлично сколько байт будет передаваться за кадр. Хоть 1, хоть 64.
В приведенной Вами ардуине стек скрыт в фоновом коде.

Re: джостик с нуля (pic18f2450) USB HID Joystick

Пн сен 18, 2017 22:04:35

СПАСИБО

а если не сложно очень бы хотелось взглянуть на код в протеусе и запустить его.
но только исходник а не HEX файл . если бы его где то достать :(



может есть программы в которых можно написать код . такие как фловкод или дракон.
в протеусе есть компонент usb но опять же где пример можно взять ? (

Re: джостик с нуля (pic18f2450) USB HID Joystick

Вт сен 19, 2017 02:17:56

Запустить в протеусе можно любой код. Сделать стек на флоукоде может и можно (я плохо себе это представляю), но гораздо продуктивней будет открыть спецификацию на USB и HID USB, а затем взять готовый стек у Микрочипа (из MLA) и на основе полученной из спецификаций информации его разобрать. Там только исходных файлов для проекта десяток, есличо.
Какой уж там флоукод...

Re: джостик с нуля (pic18f2450) USB HID Joystick

Вт сен 19, 2017 21:21:31

ага спасибо )

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


спецификации нашел вроде???
http://www.usb.org/developers/hidpage/HID1_11.pdf

библиотека эта ????
http://www.microchip.com/mplab/microchi ... plications

Re: джостик с нуля (pic18f2450) USB HID Joystick

Ср сен 20, 2017 13:23:57

И спецификация та, и библиотека...
А Вы сомневались в своих силах.
Напрасно...

Re: джостик с нуля (pic18f2450) USB HID Joystick

Ср сен 20, 2017 21:52:39

ну может тогда не все еще потеряно )
и есть шанс завести
буду изучать как то. незнаю как :)
но знаю точно сюда я еще вернусь

Re: джостик с нуля (pic18f2450) USB HID Joystick

Ср сен 27, 2017 20:50:39

Если собираетесь применять дракон или флоукод -можно смело ставить крест на вашем развитии...

Re: джостик с нуля (pic18f2450) USB HID Joystick

Пт мар 02, 2018 18:21:49

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

Лет 10 годов назад лично я публиковал на RC-Design http://forum.rcdesign.ru/f8/thread40198 ... post457419 результаты моих попыточек модифицировать AN одноосевой мыши до 8 осей джоя на Pic18F4550.
Времени прошло много - ссылки на ту публикацию умерли, но вот новая ссыль http://psw2.ru/080313_Joy.zip на запакованный каталог прожектика, состояние от 13 марта 2008 года, там несколько HEX - с бутлоадером, бутлоадер отдельно и что-то ещё. HEXы рабочие - делал знакомым пару джойстиков в подарок.
Возможно чтение исходников той заготовки от МикроЧипы и сообщений с RC-Design поможет.
Ответить