Control de dispositivos a través del módulo USB del PIC18F45/2550

Buenas Gente
estoy intentando dar mis primeros pasos con el pic 18f2550 + usb estoy utilizando el programa microcode studio y el easyHID usb wizard
ya genere el codigo y todo bien compila el circuito basico del condensador y el cable usb conectado todo bien, al conectarlo al usb del pc no pasa nada no lo reconoce el pc
dandole me acorde que no configure los fuses para este pic al ver la cantidad de fuses a configurar con el programador he quedado loco
fuses a configurar.JPG


ver


estoy usando un oscilador externo de 20mhz con 2 condensadores de 33pf
por el momento solo quiero que el pc lo reconozca para luego continuar
aqui esta el codigo
Código:
include	"DESCUSBProject.bas"

DEFINE OSC 20
DEFINE LOADER_USED 1
b   VAR BYTE	' Declarar la variable b como byte
d   VAR BYTE	' Declarar la variable d como byte
TRISB=0		' Configurar el puerto B como salida

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

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

' ************************************************************
' * 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
   b=USBBuffer[4]	' Leer el buffer(4) y almacenarlo en b
	PORTB=b		' El valor de b mostrarlo por el puerto B
	Pause 100	' Pausa de 100 milisegundos
	USBService	' Mantener la conexión USB habilitada
	USBBuffer[6]=d	' Almacenar d en el buffer(6) 
   gosub DoUSBOut
   goto ProgramStart  

' ************************************************************
' * receive data from the USB bus                            *
' ************************************************************
DoUSBIn:
   USBBufferCount = USBBufferSizeRX              ' RX buffer size
   USBService                                    ' keep connection alive
   USBIn 1, USBBuffer, USBBufferCount, DoUSBIn   ' read data, if available
   return
    
' ************************************************************
' * wait for USB interface to attach                         *
' ************************************************************
DoUSBOut:
   USBBufferCount = USBBufferSizeTX              ' TX buffer size
   USBService                                    ' keep connection alive
   USBOut 1, USBBuffer, USBBufferCount, DoUSBOut ' if bus available, transmit data
   return
adjunto dejo los archivos
gracias
 

Adjuntos

  • usb prueba.rar
    114.3 KB · Visitas: 49
Estoy intentando dar mis primeros pasos con el PIC18F2550 + USB.
Estoy utilizando el programa MicroCode Studio y el EasyHID USB Wizard.
Ya generé el código y todo bien, compila el circuito básico.
Del condensador y el cable usb conectado todo bien, al conectarlo al USB del pc no pasa nada, no lo reconoce el PC.
Dándole, me acordé que no configuré los fuses para este pic.
Al ver la cantidad de fuses a configurar con el programador he quedado loco
Si vas a trabajar el PIC con USB necesitas que corra a 48MHz, no a 20MHz como lo declaraste.
Cambia la frecuencia a 48MHz.
Ejemplo: Define OSC 48

La palabra de configuración que tomará el compilador será la del archivo 18F2550.INC.
Esa palabra está escrita para trabajar con un cristal de 20MHz, pero tiene los fuses BOREN y WDTE activos, también tiene en OFF el fuse PWRTE y es bueno usarlo, aparte ya es obsoleta esa forma de escribirla.

Esta es la palabra de configuración del archivo 18F2550.INC:
Código:
        __CONFIG    _CONFIG1L, _PLLDIV_5_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L
        __CONFIG    _CONFIG1H, _FOSC_HSPLL_HS_1H & _FCMEN_OFF_1H & _IESO_OFF_1H
        __CONFIG    _CONFIG2L, _PWRT_OFF_2L & _BOR_ON_2L & _BORV_3_2L & _VREGEN_ON_2L
        __CONFIG    _CONFIG2H, _WDT_ON_2H & _WDTPS_512_2H
        __CONFIG    _CONFIG3H, _CCP2MX_ON_3H & _PBADEN_OFF_3H & _LPT1OSC_OFF_3H & _MCLRE_ON_3H
        __CONFIG    _CONFIG4L, _STVREN_ON_4L & _LVP_OFF_4L & _XINST_OFF_4L
Te recomiendo que sustituyas esa palabra de configuración por esta otra:
Código:
    config FOSC = HSPLL_HS, PLLDIV = 5, USBDIV = 2, CPUDIV = OSC1_PLL2
    config PWRT = ON, WDT = OFF, PBADEN = OFF, LVP = OFF, BOR = OFF
    config FCMEN = OFF, IESO = OFF, VREGEN = ON
También se pueden usar otros cristales para alcanzar los 48MHz necesarios. (Por ejemplo, uno de 4MHz.)

Con esa palabra de configuración podrás compilar y grabar el PIC para usarlo con USB y un cristal de 20MHz.

Suerte.
 
Última edición:
Si vas a trabajar el PIC con USB necesitas que corra a 48MHz, no a 20MHz como lo declaraste.
Cambia la frecuencia a 48MHz.
Ejemplo: Define OSC 48

La palabra de configuración que tomará el compilador será la del archivo 18F2550.INC.
Esa palabra está escrita para trabajar con un cristal de 20MHz, pero tiene los fuses BOREN y WDTE activos, también tiene en OFF el fuse PWRTE y es bueno usarlo, aparte ya es obsoleta esa forma de escribirla.

Esta es la palabra de configuración del archivo 18F2550.INC:
Código:
        __CONFIG    _CONFIG1L, _PLLDIV_5_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L
        __CONFIG    _CONFIG1H, _FOSC_HSPLL_HS_1H & _FCMEN_OFF_1H & _IESO_OFF_1H
        __CONFIG    _CONFIG2L, _PWRT_OFF_2L & _BOR_ON_2L & _BORV_3_2L & _VREGEN_ON_2L
        __CONFIG    _CONFIG2H, _WDT_ON_2H & _WDTPS_512_2H
        __CONFIG    _CONFIG3H, _CCP2MX_ON_3H & _PBADEN_OFF_3H & _LPT1OSC_OFF_3H & _MCLRE_ON_3H
        __CONFIG    _CONFIG4L, _STVREN_ON_4L & _LVP_OFF_4L & _XINST_OFF_4L
Te recomiendo que sustituyas esa palabra de configuración por esta otra:
Código:
    config FOSC = HSPLL_HS, PLLDIV = 5, USBDIV = 2, CPUDIV = OSC1_PLL2
    config PWRT = ON, WDT = OFF, PBADEN = OFF, LVP = OFF, BOR = OFF
    config FCMEN = OFF, IESO = OFF, VREGEN = ON
También se pueden usar otros cristales para alcanzar los 48MHz necesarios. (Por ejemplo, uno de 4MHz.)

Con esa palabra de configuración podrás compilar y grabar el PIC para usarlo con USB y un cristal de 20MHz.

Suerte.

gracias por responder.
ya modifique el archivo a como me lo planteaste el archivo esta ubicado en C:\PBP
correcto compilado y montado al pic
el pc no detecta nada al conectar el usb, al mover el fuse de cristal el pc si lo reconoce pero dice este dispositivo no funciona correctamente, estoy trabajando con el qlprogren
este programador permite modificar los fuses y alguno los toma y otros no.
que debo colocar en los fuses para que lo reconozca el pc
ya cambie el codigo a 48, el cristal que uso afuera es de 20mhz
9sm9.jpg
 
Última edición:
Gracias por responder.
Ya modifiqué el archivo a como me lo planteaste, el archivo esta ubicado en C:\PBP
Correcto, compilado y montado al pic.
El pc no detecta nada al conectar el usb, al mover el fuse del cristal el pc si lo reconoce pero dice, este dispositivo no funciona correctamente, estoy trabajando con el qlprogren.
Este programador permite modificar los fuses y algunos los toma y otros no.
¿Qué debo colocar en los fuses para que lo reconozca el pc?
Ya cambie el código a 48, el cristal que uso afuera es de 20mhz.
Esa palabra de configuración está bien, al parecer es porque estás definiendo que se usará BootLoader.
¿Estás usando un BootLoader?
Si no lo estás usando, elimina esto del código: DEFINE LOADER_USED 1

En dado caso que tu programa siga sin funcionar, prueba con este que adjunto. (Incluye interfaz para la PC)
Este programa está funcionando correctamente con PBP 2.60 y compilado con MPASM.

Suerte.
 

Adjuntos

  • 18F2550 USB_Demo.rar
    282.2 KB · Visitas: 88
este programador toca programarle los fuses por codigo si no no los toma :S ya probe tu configuracion de usb el pc no lo reconoce el cable esta bueno y el pic tambien, errores de conexiones no hay es una tarjeta entrenadora ql200
los fuses debo configurarlos por codigo o manual desde el programador
9sm9.jpg

gracias por tu colaboracion D@rkbytes
 
Ya probé tu configuración de usb, el pc no lo reconoce, el cable esta bueno y el pic también, errores de conexiones no hay, es una tarjeta entrenadora ql200.
Suele suceder que cuando un dispositivo USB HID no es bien reconocido por la PC, puede presentar problemas.
Si ya volviste a grabar el PIC con el código correcto y la palabra de configuración adecuada, entonces tienes que desinstalar el controlador HID y reiniciar la PC para que vuelva a tratar de reconocer el dispositivo.

Eso lo haces en el administrador de dispositivos.
Yo uso Windows XP y cuando conecto el PIC aparece un nuevo dispositivo HID en la ventana del administrador de dispositivos.

En otros sistemas debe aparecer también algo similar a esto:
ADD HID 001.jpg

Si logras ver esta rama, desinstala los controladores dando doble click sobre los dispositivos.
Seleccionar pestaña (Controlador)
ADD HID 002.jpg
Después reinicia la PC asegurándote de no tener conectado el PIC al puerto USB.
Cuando ya estés dentro de Windows, espera un tiempo hasta que todo esté estable y conecta el PIC.
Si todo está bien, nuevamente la PC tratará de reconocer el dispositivo y lo verás en los Pop-ups.
 
Suele suceder que cuando un dispositivo USB HID no es bien reconocido por la PC, puede presentar problemas.
Si ya volviste a grabar el PIC con el código correcto y la palabra de configuración adecuada, entonces tienes que desinstalar el controlador HID y reiniciar la PC para que vuelva a tratar de reconocer el dispositivo.

Eso lo haces en el administrador de dispositivos.
Yo uso Windows XP y cuando conecto el PIC aparece un nuevo dispositivo HID en la ventana del administrador de dispositivos.

En otros sistemas debe aparecer también algo similar a esto:
Ver el archivo adjunto 109918

Si logras ver esta rama, desinstala los controladores dando doble click sobre los dispositivos.
Seleccionar pestaña (Controlador)
Ver el archivo adjunto 109920
Después reinicia la PC asegurándote de no tener conectado el PIC al puerto USB.
Cuando ya estés dentro de Windows, espera un tiempo hasta que todo esté estable y conecta el PIC.
Si todo está bien, nuevamente la PC tratará de reconocer el dispositivo y lo verás en los Pop-ups.

Hola, eso fue lo primero que intente. pero no funciona, como comente mi programador toca ponerles los fuses por codigo o individual. no logro que funcione
podrias pasarme los fuses en codigo
algo como esto
Código:
@ DEVICE pic16f628A, INTRC_OSC_NOCLKOUT 'Reloj interno solo.-
@ DEVICE pic16f628A, WDT_OFF            ' Watchdog Timer desconectado.-
@ DEVICE pic16f628A, PWRT_OFF           ' Power-On Timer conectado.- 
@ DEVICE pic16f628A, BOD_ON             ' Brown-Out Detect conectado.- 
@ DEVICE pic16f628A, MCLR_ON            ' Master Clear Externo desconectado.-
@ DEVICE pic16f628A, LVP_OFF            ' Low-Voltage Programming desconectado.-
@ DEVICE pic16f628A, CPD_OFF            ' Data Memory Code Protect desconectado.-
 
Hola, eso fue lo primero que intenté, pero no funciona, como comenté, mi programador toca ponerles los fuses por código o individual. No logro que funcione.
¿Podrías pasarme los fuses en código?
Al parecer no estás entendiendo nada acerca de la palabra de configuración. :rolleyes:

En el post #2202 la puse.
Te recomiendo que sustituyas esa palabra de configuración por esta otra:
Código:
    config FOSC = HSPLL_HS, PLLDIV = 5, USBDIV = 2, CPUDIV = OSC1_PLL2
    config PWRT = ON, WDT = OFF, PBADEN = OFF, LVP = OFF, BOR = OFF
    config FCMEN = OFF, IESO = OFF, VREGEN = ON
Con esa palabra de configuración podrás compilar y grabar el PIC para usarlo con USB y un cristal de 20MHz.
Esa es la palabra de configuración por código.
Si estuvieras usando PBP3, sí la podrías poner directamente en la cabecera del programa, de esta forma:
Código:
[COLOR=Blue]#Config[/COLOR]
    config FOSC = HSPLL_HS, PLLDIV = 5, USBDIV = 2, CPUDIV = OSC1_PLL2
    config PWRT = ON, WDT = OFF, PBADEN = OFF, LVP = OFF, BOR = OFF
    config FCMEN = OFF, IESO = OFF, VREGEN = ON
[COLOR=Blue]#EndConfig[/COLOR]
Si estás utilizando una versión inferior a MicroCode Studio 5, entonces tienes que usar la palabra de configuración que está en el archivo 18F2550.INC, como ya te había mencionado, por eso es que ese archivo se tiene que editar, para que el compilador tome la palabra de configuración de ese archivo.

Para poder poner la palabra de configuración en tu código, tienes que comentar o eliminar las líneas de la palabra del archivo 18F2550.INC.

Quedaría de esta forma:
Código:
        NOLIST
    ifdef PM_USED
        LIST
        "Error: PM does not support this device.  Use MPASM."
        NOLIST
    else
        LIST
        LIST p = 18F2550, r = dec, w = -311, w = -230, f = inhx32
        INCLUDE "P18F2550.INC"    ; MPASM  Header
[B];[/B]        __CONFIG    _CONFIG1L, _PLLDIV_5_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L
[B];[/B]        __CONFIG    _CONFIG1H, _FOSC_HSPLL_HS_1H & _FCMEN_OFF_1H & _IESO_OFF_1H
[B];[/B]        __CONFIG    _CONFIG2L, _PWRT_OFF_2L & _BOR_ON_2L & _BORV_3_2L & _VREGEN_ON_2L
[B];[/B]        __CONFIG    _CONFIG2H, _WDT_ON_2H & _WDTPS_512_2H
[B];[/B]        __CONFIG    _CONFIG3H, _CCP2MX_ON_3H & _PBADEN_OFF_3H & _LPT1OSC_OFF_3H & _MCLRE_ON_3H
[B]; [/B]       __CONFIG    _CONFIG4L, _STVREN_ON_4L & _LVP_OFF_4L & _XINST_OFF_4L
        NOLIST
    endif
        LIST
EEPROM_START    EQU    0F00000h
BLOCK_SIZE    EQU    32
Entonces en la cabecera de tu programa ya puedes añadir la palabra de configuración de esta forma:
Código:
[B]Asm[/B]
[COLOR=Green]    config FOSC = HSPLL_HS, PLLDIV = 5, USBDIV = 2, CPUDIV = OSC1_PLL2
    config PWRT = ON, WDT = OFF, PBADEN = OFF, LVP = OFF, BOR = OFF
    config FCMEN = OFF, IESO = OFF, VREGEN = ON[/COLOR]
[B]EndAsm[/B]
Notas:
Así como pretendes escribir la palabra de configuración, no es posible.
El PIC18F2550 necesita ser compilado con MPASM porque el compilador PM de PBP no lo hace.
Por eso está declarada la sentencia para mostrar un error si se usa PM con este PIC.
PM Compiler dijo:
"Error: PM does not support this device. Use MPASM."
El @ Device y la sintaxis que se usa en la palabra de configuración para los PIC12 y los PIC16, no es reconocida por MPASM y es por eso que se debe usar la palabra de configuración como mencioné.

Según las fotos que pusiste, tienes bien los fuses, y el programa que subí funciona perfectamente.
Ese programa está escrito para usar MicroCode Studio Plus u otra versión inferior al 5.

No sé que problema tengas, pero ya no es debido a la palabra de configuración.

Inténtalo así ahora, pero es lo mismo que si la palabra de configuración estuviera en el archivo 18F2550.INC.

Suerte.
 
Última edición:
No sé que problema tengas, pero ya no es debido a la palabra de configuración.

Inténtalo así ahora, pero es lo mismo que si la palabra de configuración estuviera en el archivo 18F2550.INC.

Suerte.

Hola Muchisimas gracias por tu ayuda, ya logre que funcionara ;)
no tomaba bien la configuracion, como antes de modificar el archivo de pbp hice una copia la restaure y volvi a modificar como me dijiste. y ahi si lo reconocio pero no del todo, subi el condensador a un electrolitico de 1uf y ahi si lo reconocio muy bien el pic ya funciona con mi codigo gracias!
 
tengo otra duda, necesito comunicar un pic 16f877a con el pic18f2550, y que este envie los datos por usb, para hacer pruebas intento enviar datos desde el 18f2550 al pc por medio de el xbee xplorer y el x-ctu, pero no recibo nada. con el 16f877a si transmito datos y llegan al pc perfecto pero con el 18f2550 no se manda nada.
aqui esta el codigo
Código:
Define OSC 48   ; Definir frecuencia de 48MHz.
Include "USB_Desc.inc"  ; Archivo con los descriptores HID (Human Interfaz Device)

; Variables para el buffer USB
USBBufferSizeMax    Con 8   ; Tamaño máximo del buffer
USBBufferSizeTX     Con 8   ; Para la entrada
USBBufferSizeRX     Con 8   ; Para la salida
USBBuffer           Var Byte[USBBufferSizeMax] 
USBBufferCount      Var Byte

; Configuración del oscilador interno en caso de falla.
b   Var Byte                ; Declarar la variable b como byte
d   Var Byte
X   VAR Byte                ; Declarar la variable d como byte
TRISB = 0 
X=0 
;*******************************************************************************
; * main program loop - remember, you must keep the USB
; * connection alive with a call to USBService every couple
; * of milliseconds or so.
;*******************************************************************************
USBInit ; Inicializar la comunicación USB
ProgramStart:
    ADCON1 = $0F           ; Puertos A y B Digital I/O
	GoSub DoUSBIn           ; Ir hacia la rutina de recepción de datos
    b = USBBuffer[4]        ; Leer el buffer(4) y almacenarlo en b
    PORTB = b               ; El valor de b mostrarlo por el puerto D
    USBService              ; Mantener la conexión USB habilitada
'    d = PORTA
'    POT PORTA.0, 255, X
X=1 
    SEROUT2 PORTC.6,84,[X]              ; El valor del puerto A almacenarlo en d
    USBBuffer[6] = X       ; Almacenar d en el buffer(6) 
    GoSub DoUSBOut          ; Ir hacia la rutina de transmisión de datos
    GoTo ProgramStart  

;*******************************************************************************
; Recibir los datos del bus USB
;*******************************************************************************
DoUSBIn:
	USBBufferCount = USBBufferSizeRX   ; Especificar el tamaño del buffer
	USBService             ; Mantener siempre la conexión
   	USBIn 1, USBBuffer, USBBufferCount, DoUSBIn ; Leer los datos (Si existen)
	Return   
;*******************************************************************************
; Esperar hasta que el dispositivo sea conectado al puerto USB
;*******************************************************************************
DoUSBOut:
	USBBufferCount = USBBufferSizeTX   ; Especificar el tamaño del buffer
	USBService             ; Mantener siempre la conexión
	USBOut 1,USBBuffer,USBBufferCount,DoUSBOut ; Si el bus está disponible, transmitir.
	Return
	
    End
 
Última edición:
tengo otra duda, necesito comunicar un pic 16f877a con el pic18f2550, y que este envie los datos por usb, para hacer pruebas intento enviar datos desde el 18f2550 al pc por medio de el xbee xplorer y el x-ctu, pero no recibo nada. con el 16f877a si transmito datos y llegan al pc perfecto pero con el 18f2550 no se manda nada.
Aquí existe algo que debes tener en cuenta.
Estás trabajando el CPU-Core a 48MHz y con esa frecuencia no puedes trabajar con RS-232.
Entonces lo que tienes que hacer, es que el módulo USB trabaje a 48MHz, pero el CPU a 4 u 8MHz.
Yo así logré hacer un proyecto para recuperación del valor OSCCAL en PIC's 12 por RS-232, usando USB.
 
Aquí existe algo que debes tener en cuenta.
Estás trabajando el CPU-Core a 48MHz y con esa frecuencia no puedes trabajar con RS-232.
Entonces lo que tienes que hacer, es que el módulo USB trabaje a 48MHz, pero el CPU a 4 u 8MHz.
Yo así logré hacer un proyecto para recuperación del valor OSCCAL en PIC's 12 por RS-232, usando USB.
ok , entiendo en eso fue lo primero que pense pero estoy trabajando a 9600 segun eso debo trabajar a 8 MHZ intentare revisar.
 
fife89, te han dicho que utilices un cristal externo de 4Mhz o lo que corresponda. Con 20Mhz no podrás tener USB. Creo haber entendido y que se os ha pasado por alto.
 
me tome unos dias para sacarme el estres y ya estoy de vuelta :LOL: (y)
el motivo? se quemo un xbee por un corto, esos pequeños retasos que quedan de cortar las patas de los componentes :( en fin ya pedí otro xbee me debe estar llegando uno nuevo mañana.
como se me complico esto de HID.
la comunicación serial lo tomare en cuenta después, ahora tengo un problema mayor ya que tengo el pic funcionando en USB HID gracias a la ayuda de D@rkbytes funcionando con el programa demo que me mando aparentemente todo bien, necesito interpretar los datos con C# integrado en unity 3D.
no he logrado que se entienda el pic con unity 3D todavía, alguien sabe como seria?
la otra forma seria convertir el 18f2550 en un joystick usb de esta manera lo interpretaria muy facil en el unity3D pero nos e como hacerlo en el pic, necesito muchos ejes y pocos botones,
en pbp
gracias :apreton:
 
nadie sabe del tema? yo encontre algo mas o menos
hice los pasos el pc lo reconoce como un dispositivo hid pero en los joystick no esta :LOL:
 

Adjuntos

  • Create a HID USB Device.pdf
    188.8 KB · Visitas: 88
Buenas Noches
antes que todo estoy desarrollando un proyecto en el que debo leer 21 datos adc y trasmitirlos inalambricamente al pc el cual va a interpretar los datos
dispongo de:
1 pic 18f2550
4 pics 16f877A
2 xbee s1
esquemático pues no tengo, es el circuito basico usb que funciona bien,con un cristal de 20mhz
deseo comunicarlos via usb convirtiendo todos estos datos en varios analogos(joystick)
segui paso a paso los datos de el pdfhttps://www.forosdeelectronica.com/attachment.php?attachmentid=110687&d=1400706122 para generar un codigo ejemplo con 2 ejes (x,Y) y 4 botones con el fin de entender como funciona y asi poder desarrollar mi proyecto.
segun el pdf debo modificar un archivo para colocar los archivos descriptores
Código:
RETLW 0x05  
RETLW 0x01                     ; USAGE_PAGE (Generic Desktop) 
RETLW 0x09  
RETLW 0x04                     ; USAGE (Joystick) 
RETLW 0xa1  
RETLW 0x01                     ; COLLECTION (Application) 
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 0x75  
RETLW 0x08                     ;     REPORT_SIZE (8) 
RETLW 0x95  
RETLW 0x02                     ;     REPORT_COUNT (2) 
RETLW 0x35  
RETLW 0x00                     ;     PHYSICAL_MINIMUM (0) 
RETLW 0x46  
RETLW 0xff  RETLW 0x00               ;     PHYSICAL_MAXIMUM (255) 
RETLW 0x81  
RETLW 0x03                     ;     INPUT (Cnst Var Abs) 
RETLW 0x05  
RETLW 0x09                     ;     USAGE_PAGE (Button) 
RETLW 0x19  
RETLW 0x01                     ;     USAGE_MINIMUM (Button 1) 
RETLW 0x29  
RETLW 0x04                     ;     USAGE_MAXIMUM (Button 4) 
RETLW 0x15  
RETLW 0x00                     ;     LOGICAL_MINIMUM (0) 
RETLW 0x25  
RETLW 0x01                     ;     LOGICAL_MAXIMUM (1) 
RETLW 0x75  
RETLW 0x01                     ;     REPORT_SIZE (1) 
RETLW 0x95  
RETLW 0x08                     ;     REPORT_COUNT (8) 
RETLW 0x81  
RETLW 0x03                     ;     INPUT (Cnst Var Abs) 
RETLW 0xc0  
;   END_COLLECTION 
RETLW 0xc0 
; END_COLLECTION
luego de generarlo dice que lo copie dentro de un archivo .asm y editar unas cosas en el archivo principal, bueno todo bien hasta el momento, al compilarlo lo hace todo bien reviso el archivo .asm y que encuentro? nada de lo que copie anteriormente, al compilar crea denuevo ese asm y borra todo. entonces lo trate de colocar los datos en el archivo .bas que genera el asm en el descriptor y no lo compila tira error, no entiendo por que.
adjunto dejo todos los archivos
 

Adjuntos

  • programa para generar descriptores.zip
    99.2 KB · Visitas: 55
  • usb de prueba.rar
    115.7 KB · Visitas: 53
  • descriptores.rar
    595 bytes · Visitas: 40
Última edición:
Buenos días

quisiera saber como en el Descriptor_easyHID.h es posible variar la corriente entregada por el puerto, desde el form en C#.

gracias

//**************************************************************************

#ifndef USB_CONFIG_BUS_POWER
// El rango válido es 0...500.
#define USB_CONFIG_BUS_POWER 100 // 100mA, corriente máxima que entregará el puerto.
#endif

/*****************************************************************************

#if USB_CONFIG_BUS_POWER
0x80, //bit 6=1 if self powered, bit 5=1 if supports remote wakeup (we don't), bits 0-4 unused and bit7=1 ==8
#else
0xC0, //bit 6=1 if self powered, bit 5=1 if supports remote wakeup (we don't), bits 0-4 unused and bit7=1 ==8
#endif
USB_CONFIG_BUS_POWER/2, //maximum bus power required (maximum milliamperes/2) (0x32 = 100mA)
 
Hola buenas tardes a todos gracias por sus aportes me han ayudado mucho bueno... he leído casi todo el post, y me di cuenta que la mayoría de veces se hace comunicación con visual Studio, c# y c++, alguien sabe como realizar la comunicación vía matlab usando un pic 18f en modo HID?? donde tengo la mayor duda es en la comunicación del host al pic.
 
Disculpen, alguno sabe como modificar la libreria usb_desc_cdc.h en CCS v4.y104 ?

pruebo este programa que encontre en youtube, pero me da una seguidilla de errores.

Código:
#include <18F4550.h>             //PIC a emplear
#device adc=10;                  //Conversor A/D de 10 bits
#fuses HSPLL,NOWDT,NOLVP,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=20000000)
include <usb_cdc.h>


void main(){
    unsigned long int fefe;
    usb_cdc_init();
    usb_init();
    while(!usb:cdc_connected()){}
    do{
       usb_task();
       if (usb_enumerated()){
            printf(usb_cdc_putc,"BARDXP: %Lu\r\n",fefe);
            fefe=fefe+1;
       }}while(TRUE);
       
}

Adjunto una imagen con los errores
 

Adjuntos

  • 123.png
    123.png
    12.6 KB · Visitas: 18
Falta poner un # en include <usb_cdc.h>
Así: #include <usb_cdc.h>

Existen dos puntos ":" en while(!usb:cdc_connected())
Debe ser así: while(!usb_cdc_connected())

Ya no veo otra cosa extraña.

Suerte.
 
Atrás
Arriba