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

Aqui dejo el ejemplo con la librería...
No lo hice yo, lo hizo el prof que me pasó la librería... Creo que una vez lo probé y me salió un error cuando trataba de enviar pero por lo menos tiene cuales son los eventos del USB y cómo manejarlos...
Espero te sirva...
P.D. Creo que el archivo solo se puede abrir con VisualStudio 2008 o posterior...
 

Adjuntos

  • Ejemplo_USB_UC.rar
    1.1 MB · Visitas: 422
Gracias Alder, me ha servido de mucho. Voy a continuar haciendo un dattaloger con SD y USB.
Saludos y muchas gracias
 
Estoy intentando hacer una aplicación simple que reciba y envíe datos mediante HID, leí todo el thread, baje todos los ejemplos probe todas las librerías del thread y no puedo hacer que funcione en vb.net 2008 y en Windows 7 x64, si alguien tiene algún ejemplo que sepa que funcione le agradecería que lo suba, voy a ver si sigo investigando. Gracias!.
 
Lo hice funcionar con el ejemplo de http://www.lvr.com/files/generic_hid_vb_46.zip, en Windows 7 x64, el único problema que ahora tengo es que al parecer usando HID me toma algunos timers, el único que tengo libre es el TMR0, en el datasheet de microchip no dice nada acerca de que ocupe los timers voy a seguir investigando, gracias por la respuesta!.


Siguiente post ---------------------------

Lo solucione, lo que hice es poner esto en el código:

(Solo por que esta interrupción no es critica)

Código:
disable_interrupts(INT_TIMER1); 
usb_task(); // Configuramos el puerto USB.
    if (usb_enumerated()) // Si el puerto es enumerado y configurado por el host..
    {

    sentencias...
        
       
    }
enable_interrupts(INT_TIMER1);
 
Última edición:
He estado probando el USB CDC pero no me convense para mi proyecto! la comunicacion se cae o se cuelga casi q a cada rato (estoy usando un 18f4550)

Alguno de ustedes sabe como usar el USB HID??

Hasta los momentos sigo confiando en el puerto serial! es demasiado estable! y no da problemas!!!
 
Hola, muy buenos aportes en el post, y felicidades a Moyano por su excelente trabajo!!!

Yo estoy tratando de hacer la comunicacion utilizando la mpusbapi.dll en visual basic .net y tengo un inconveniente con las llamadas. Pues veras, yo lo tengo funcionando con vb 6 y todo perfecto, al intentar realizar las funciones en vb .net tengo un inconveniente con los punteros.

Esta es la declaracion muy parecida a como se hace en vb 6:

Código:
Public Declare Function MPUSBRead Lib "mpusbapi.dll" (ByVal handle As Long, ByVal pData As Long, ByVal dwLen As Long, ByRef pLength As Long, ByVal dwMilliseconds As Long) As Long

Public Declare Function MPUSBWrite Lib "mpusbapi.dll" (ByVal handle As Long, ByVal pData As Long, ByVal dwLen As Long, ByRef pLength As Long, ByVal dwMilliseconds As Long) As Long

Al realizar la llamada a la funcion queda de esta forma:

Código:
If (MPUSBWrite(myOutPipe, VarPtr(SendData(0)), SendLength, SentDataLength, SendDelay) = MPUSB_SUCCESS) Then

El programa no ejecuta el If, es decir no realiza la escritura en el usb.

Este dato VarPtr es utilizada en vb 6 sin problemas, para el vb.net he realizado la siguiente declaracion:

Código:
Public Function VarPtr(ByVal dato As Byte) As Long
        Dim GCH As GCHandle = GCHandle.Alloc(dato, GCHandleType.Pinned)
        Dim GCH2 As Integer = GCH.AddrOfPinnedObject.ToInt32
        GCH.Free()
        Return GCH2
    End Function

Pero aun no se si esta bien declarado.


Muchas gracias por lo que puedan aportar.
 
Hola. Una pregunta Moyano: el programa que hiciste que genera un COM virtual ( ese que está en la primer página) cuando conectas el cable USB al PC no te salta un cartel que dice que el controlador está deshabilitado y que hay que instalarlo ????, porque a mi me hace eso. Me fijo en el administrador de dispositivos y el puerto me aparece, pero con un signo de pregunta amarillo ( como que no está instalado el controlador ).
Bueno espero me den una manito con eso. Gracias.
 
Bueno lo que tenés que hacer es lo siguiente...
Ir a panel de control ....sistema....administrador de dispositivos.
Ahi te va a aparecer un icono de signo de pregunta amarillo en la parte de USB....entonces le hacer doble click y pones reistalar controlador ...buscas el driver correspondiente y le das click en siguiente...entonces te va a aparecer un cartel diciendo que estos controladores no son firmados por windows entonces le das click en siguiente para proseguir.
Luego de esto te tiene que instalar los controladores correspondientes...

Un saludo y espero que lo puedas hacer funcionar.
 
Hola, gracias por contestar. Hice lo que me dijiste pero no se porque no encuentra el controlador. No se de donde sacarlo. La puse a buscar en internet y no encuenta nada.
Voy a seguir incistiendo a ver si puedo.
Saludos.
 
Si trabajas con el compilador CCS y USB entonces en la carpeta DRIVER'S del compilador se encuentra el driver para emulación CDC...en caso de que estés trabajando con el stack de MICROCHIP buscalo en la carpeta driver's del Microchips Solutions....fijate que sea el más actualizado con soporte para 32 y 6 bits.
 
Bueno avance un poco mas. Encontró el driver en la carpeta Drivers de CCS pero cuando iba por la mitad de la instalación me dice que falta el archivo ccport.sys. Y no lo puedo localizar. No está ni en la carpeta de microchip ni en la de CCS. Pensé que era mas simple la cuestión. Igual gracias.
Saludos
 
jonathan podrías pasarme un programita que sea un bullk para chechar mi pic18f4550, lo quize conectar por medio de la usb pero dice mi pc que es un dispositivo desconocido, me gustaría saber como hago un driver para instalarlo y me reconosza mi pic.
 
Ya solucioné el problema del controlador. Le estaba errando de driver. Parecía ser el RS232 pero era el UART COM el que tenia que instalar. Ahora está andando bien. Muchas gracias Moyano.

ese ultimo post que pusieron esta bueno. albermillan69 (y)

Saludos.
 
Ya que pude resolver el problema estuve haciendo algunas pruebas de transmitir datos del PIC a la PC y mostrar en pantalla con un programita en visualC#. Anda bastante bien. Pero la ambición quiere mas, ja.
La cosa es que con este puerto COM virtual y usando la funcion printf( usb_cdc_putc, ....... ) me transforma los datos con el codigo ASCII. Claro ! , porque esta función es especial para mandar carácteres.

Si yo por ejemplo quiero mandar una tabla datos del pic a la PC y que esta los reciba sin tener que decodificarlos ¿ cómo hago ?. Alguien lo ha hecho ???

El software en C# lo hice de modo que se reciban los datos del puerto en un vector de tipo BYTE que luego transformo a string para mostrarlo en la caja de texto con la función Convert.ToString().

bueno mando un saludo y contento por haber echo me primer transferencia por usb :).
 
Si yo por ejemplo quiero mandar una tabla datos del pic a la PC y que esta los reciba sin tener que decodificarlos ¿ cómo hago ?. Alguien lo ha hecho ???

bueno mando un saludo y contento por haber echo me primer transferencia por usb :).

Estas usando el USB CDC?

No se si en tu programa haciendo algo como valor=int(recibido) te de el entero q mandaste desde el pic! Prueba a ver q tal!!!

Saludos!!!
 
en C# lo que hago es lo siguiente:

//esto va cuando se produce el evento de llegada de mensaje
byte[] mensaje = new byte[1];
SerialPort1.Read(mensaje, 0, 1);

Desde el pic lo que hago es lo siguiente:

int valor = 32;
printf( usb_cdc_putc, "%u" , valor); // para mandar por ejemplo el numero 32

y con esto me está llegando cualquier cosa menos el numero 32.
Tambien probé mandar numeros entre comillas pero me los manda codificados en ASCII.
Alguna sugerencia ?? :D
 
Atrás
Arriba