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

me podrias pasar el enlace ya q no lo puedo encontrar!! lo q nesecito es ver los codigos fuentes todas las librerias! desde ya muchas gracias!
 
pues es todo un Framework de librerias que ofrece microchip

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en537044

ahi esta la pagina, aunque mas que todo esta orientado para las herramientas introductorias de la empresa pero sirve.

Meta, has experimentado el error con las interrupciones al utilizar el modulo USB del PIC??? estoy usando un 18f4550, mira lo que postee mas arriba xfa.

este es el enlace a lo que postee
https://www.forosdeelectronica.com/posts/707438/
 
Última edición:
Hola a todos, estoy realizando una comunicación USB bulk entre un pic 18f4550 y la pc y una comunicación usart entre el mismo pic 18f4550 y un 18f2550. Mi problema es la configuración de los fuses. Deseo usar cristales de 4 o 20 MHz. Probando con los de 4 MHz, configuré ambos micros de la siguiente manera:

#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL2,CPUDIV1,VREGEN,MCLR,NOPBADEN
#use delay(clock=48000000)

#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,bits=8,parity=e)

El problema como les dije antes es que la comunicación usart no se lleva a cabo. Sé que el firmware funciona bien, dado que al hacerlo correr con el oscilador interno el envío y recepción de datos es perfecto, pero al cambiar los fuses todo deja de funcionar. Alguien ya paso por esto y pudo resolverlo? Si pueden ayudarme les estaré muy agradecido
 
Probando con los de 4 MHz, configuré ambos micros de la siguiente manera:
Código:
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL2,CP UDIV1,VREGEN,MCLR,NOPBADEN
#use delay(clock=48000000)
Los fusibles están mal configurados para un cristal de 4mhz. La configuración correcta es la siguiente:
#fuses XTPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV1,PLL1,CPUDIV1,VREGEN,MCLR,NOPBADEN

Saludos !
 
Hola foreros, logre resolver mi problema, a continuacion les comento para que no les suceda a ustedes.
A pesar de que en este foro esta muy bien abordado el tema de usb, la solucion a mi problema la encontre en otro foro y la comento enseguida.

Yo habia realizado correctamente mi firmware (usb bulk transfer )y tenia el hardware adecuadamente conectado, (aclaro mi aplicacion era simulada en proteus), tenia, instalados los drivers usb de proteus, aparentemente todo estaba en orden pero cuando conectaba el dispositivo e instalaba el driver de microchip me salia un cartel en el administrador de dispositivos que decia: "su dispositivo no se puede iniciar"(codigo 10). El problema era la version de proteus! yo tenia instalada la ultima version de proteus, la 7.10, al probar con la version 7.7sp2 todo funciono perfectamente, he escuchado que con la 7.6 tambien funciona, asi que ya saben! las ultimas versiones de proteus tienen problemas con el usb

Saludos a todos!!
 
Yo habia realizado correctamente mi firmware (usb bulk transfer )y tenia el hardware adecuadamente conectado, (aclaro mi aplicacion era simulada en proteus), tenia, instalados los drivers usb de proteus, aparentemente todo estaba en orden pero cuando conectaba el dispositivo e instalaba el driver de microchip me salia un cartel en el administrador de dispositivos que decia: "su dispositivo no se puede iniciar"(codigo 10). El problema era la version de proteus! yo tenia instalada la ultima version de proteus, la 7.10, al probar con la version 7.7sp2 todo funciono perfectamente, he escuchado que con la 7.6 tambien funciona, asi que ya saben! las ultimas versiones de proteus tienen problemas con el usb

Por que no probás el circuito fisicamente para ver si realmente está funcionando, yo no confio para nada en el proteus para simular microcontroladores, muchas veces problemas que aparecen en la simulación no aparecen en la realidad y viceversa..

saludos !
 
Hola a todos soy nuevo y les comento mi problema, necesito hacer un dispositivo que sirva de controlador para una aplicación en Java o Visual C#, el dispositivo tiene que ser con sensores; así como tipo touchpad y que se conecte vía USB a la computadora. Lo que pasa es que no conozco mucho de PIC C Compiler y por tiempo no quiero usar el ensamblador, además solo se que se tiene que iniciar el USB con usb_init(), inciar las tareas con usb_task() y asignar un numero al dispositivo; pero de ahí no se nada si alguien me podría ayudar, se lo agradecería mucho. Mi problema es en la programación en si, ya tengo experiencia armando dispositivos; pero nunca he programado PIC's con C solo en VHDL y ensamblador.
 
tengo una pregunta en los descriptores del primer ejercicio en comunicación cdc hay alguna variable que diga que puerto virtual es el que creo el PIC? para hacer un programa que siempre abra ese mismo puerto ó hay que hacer una rutina ara el programa de pc que pregunte que a todos los puertos hasta que de con el del pic?
 
Bueno espero que esto sea de ayuda para aquellos que han tenido problemas conectando el micro al pc en modo USB con simulacion de COM (CDC). :confused:

thamaphyr, ps en vista de que a ti te sucedio lo mismo que me ocurrio, indicare la forma como yo solucione ese pequeño problemita y espero que esta info te sea de ayuda a ti y a todos los del foro que tengan ese problema.

Para comenzar efectivamente lo que dices de que al darle actualizar no realiza nada es cierto.
Asi q en el administrador de dispositivo te debe salir asi

http://img199.imageshack.us/img199/1135/sincontrolador.jpg

Cuando me solicita el controlador simplemente selecciono preguntarme mas tarde luego le das click derecho en la parte donde sale CCS RS232 DEmo

propiedades -> controlador -> actualizar controlador

http://img64.imageshack.us/img64/5096/actualizarcontrolador.jpg

ahi seleccionas Buscar software de controlador en el equipo y luego Elegir en una lista de controladores de dispositivo en el equipo click en usar disco y selecciona el archivo mchpcdc.inf y click en siguiente. Saldra una ventana de advertencia donde se indica que el controlador no se encuentra firmado digitalmente.

http://img827.imageshack.us/img827/6421/seguridade.jpg

y ahora si esperar que lo configure....:cabezon:

http://img291.imageshack.us/img291/4569/controladorcargado.jpg

y lo esperado...

http://img692.imageshack.us/img692/3324/detectado.jpg

Y listo ya esta nuestro dispositivo conectado correctamente al PC.!! :aplauso:

Como dato adicional ps hay cierta info del .inf que se puede modificar para personalizar nuestro dispositivo.

http://img443.imageshack.us/img443/5926/modificandoelinf.jpg

Ahora si me ire a dormir, espero poder haber contribuido en algo. ...Salu2... God Bless!!!

Le agradezco mucho casi no lo logro instalar, muchas pero muchisimas gracias.
 
Hola compañeros,
He seguido los tutoriales de encender led desde la Pc y me funciona de maravilla, ahora lo que quiero es mandar datos del pic a la PC.
solo quiero mandar dos datos, el primero que se muestre en un textbox y el segundo en otro textbox distinto.
He probado a mandar el primer dato con una letra "a" al principio y el segundo dato con un letra "b", y cuando llegue a la pc, que me los distinga para ponerlos en distintos textbox, pero unas veces funciona y otras no.
Estoy usando CCS para el pic (es un 18f4550)
y visual basic 2010 para la aplicacion en la pc.

En CCS hago lo siguiente:
Código:
int i,j,cociente,resto;
...
i=180;  //los datos como maximo van a ser de 3 digitos
j=320;
while(1){
usb_task();
if(usb_enumerated()){

   //mando primer dato en dos partes
   cociente=i/10;
   resto=i%10;
   printf(usb_cdc_putc,"a%d\n\r",cociente);
   printf(usb_cdc_putc,"a%d\n\r",resto);
   
   delay_ms(1000);

   //mando segundo dato en dos partes
   cociente=j/10;
   resto=j%10;
   printf(usb_cdc_putc,"b%d\n\r",cociente);
   printf(usb_cdc_putc,"b%d\n\r",resto);
}
}

En visual basic 2010 hago lo siguiente:

Código:
Dim dataIn as String = string.Empty
...
(esto lo pongo dentro del timer, Interval 1000)
if(serialPort1.isOpen = true then
   dataIn = serialPort1.readExisting
   if dataIn <> sting.empty then
      if dataIn.startsWith('a') then
         textbox1.text += dataIn
      end If
      if dataIn.startsWith('b') then
         textbox2.text += dataIn
      end If
   end if
end if

Hay algo que debe estar mal, tal vez veais una forma mas facil de hacer lo que quiero.
 
Última edición por un moderador:
Antes de nada decir que este post es impresionantemente bueno, muchisimas gracias Moyano!!

Por otra parte comentar que ando un poco despistado con el tema del USB. Estoy haciendo mis primeras practicas en este tema y queria realizar un esquema de reles controlado por USB desde un codigo en visual basic 2008. Lo que es la programacion del firmware del pic lo voy entendiendo, la programacion... tambien, pero la union "virtual" entre el proteus y visual basic 2008.... no se por donde agarrarla.
-Tengo que crear un dispositivo virtual y añadirle los drivers.. pero he visto tantos drivers por ahi que no se cual coger.
No tendreis por ahi el pack completo de los reles de Moyano, con todos los archivos y drivers.

Muchas gracias de antemano y ya ire poniendo fallos que tengo para que no caigan otros en mis errores.
 
hola netma, mira el controlador si quieres hacer comunicación cdc que es en la cual se crea un puerto COM virtual es el mismo para todos es el que coloco en ele primer ejemplo . lo unico es quea mi no me funcionaba la conexcion por que el VID y PID no coincidía con el que aparecía en el pic, yo abrí el archivo mchpcdc como si fuera un .txt y lo modifique, ademas de esto el nombre con el cual aparace el micro cuando lo conectas



; Windows USB CDC ACM Setup File
; Copyright (c) 2000 Microsoft Corporation
; Copyright (C) 2007 Microchip Technology Inc.

[Version]
Signature = "$Windows NT$"
Class = Ports
ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
Provider=%MFGNAME%
LayoutFile = layout.inf
CatalogFile=%MFGFILENAME%.cat
DriverVer=22/11/2008,1.0.0.0

[Manufacturer]
%MFGNAME%=DeviceList, NTamd64

[DestinationDirs]
DefaultDestDir = 12

;------------------------------------------------------------------------------
; Windows 2000/XP/Vista-32bit Sections
;------------------------------------------------------------------------------

[DriverInstall.nt]
include=mdmcpq.inf
CopyFiles=DriverCopyFiles.nt
AddReg=DriverInstall.nt.AddReg

[DriverCopyFiles.nt]
usbser.sys,,,0x20

[DriverInstall.nt.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,%DRIVERFILENAME%.sys
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"

[DriverInstall.nt.Services]
AddService=usbser, 0x00000002, DriverService.nt

[DriverService.nt]
DisplayName=%SERVICE%
ServiceType=1
StartType=3
ErrorControl=1
ServiceBinary=%12%\%DRIVERFILENAME%.sys

;------------------------------------------------------------------------------
; Vista-64bit Sections
;------------------------------------------------------------------------------

[DriverInstall.NTamd64]
include=mdmcpq.inf
CopyFiles=DriverCopyFiles.NTamd64
AddReg=DriverInstall.NTamd64.AddReg

[DriverCopyFiles.NTamd64]
%DRIVERFILENAME%.sys,,,0x20

[DriverInstall.NTamd64.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,%DRIVERFILENAME%.sys
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"

[DriverInstall.NTamd64.Services]
AddService=usbser, 0x00000002, DriverService.NTamd64

[DriverService.NTamd64]
DisplayName=%SERVICE%
ServiceType=1
StartType=3
ErrorControl=1
ServiceBinary=%12%\%DRIVERFILENAME%.sys


;------------------------------------------------------------------------------
; Vendor and Product ID Definitions
;------------------------------------------------------------------------------
; When developing your USB device, the VID and PID used in the PC side
; application program and the firmware on the microcontroller must match.
; Modify the below line to use your VID and PID. Use the format as shown below.
; Note: One INF file can be used for multiple devices with different VID and PIDs.
; For each supported device, append ",USB\VID_xxxx&PID_yyyy" to the end of the line.
;------------------------------------------------------------------------------
[SourceDisksFiles]
[SourceDisksNames]
[DeviceList]
%DESCRIPTION%=DriverInstall, USB\VID_04D8&PID_000B

[DeviceList.NTamd64]
%DESCRIPTION%=DriverInstall, USB\VID_04D8&PID_000B


;------------------------------------------------------------------------------
; String Definitions
;------------------------------------------------------------------------------
;Modify these strings to customize your device
;------------------------------------------------------------------------------
[Strings]
MFGFILENAME="mchpcdc"
DRIVERFILENAME ="usbser"
MFGNAME="Josb86PIC_USB"
INSTDISK="Microchip Technology, Inc. Installation Disc"
DESCRIPTION="Josb86_USB_CDC"
SERVICE="USB RS-232 Emulation Driver"
 
pero para conectar el proteus al software tengo que hacerlo asi??

La verdad es que mi intencion no es simular un COM serie, sino que si es posible meterlo como usb, aunque todavia no tengo decidido el modo de transferencia, como es para control de unos reles no creo que importe mucho.
 
la forma mas fácil es esta, es como si hicieras comunicación rs232 normal: esta forma es si tienes el pic físico por simulación no lo he intentado nunca pero se que proteus tienen su propio controlador
 
Nada, no consigo instalar el driver.
Como se que VID and PID debo usar? se lo que es pero no lo localizo puesto que es un 18f4550 en el proteus.



bueno, son mas de las 3am a si que vale por hoy.
el resultado es que aun no he conseguido instalar el serial demo de proteus ni nada por el estilo :(
 
Última edición:
Atrás
Arriba