Páginas: [1] 2   Ir Abajo
Imprimir
Autor Tema: Pic18Fx550_modo HID  (Leído 1545 veces)
ccencho
Administrator
Crea robots útiles pa la humanidad
*
Desconectado Desconectado

Mensajes: 293


Laberinto

axgt8@hotmail.com
Ver Perfil WWW Email
« : Diciembre 24, 2009, 12:22:50 »

Hola amigos abro este hilo con el objetivo de no congestionar y combinar el tema de PIc18x550 a modos CDC, el cual pueden verlo en este hilo del foro:


El cual por cierto tiene la base para la programacion de los PIC18Fx550.... icon_lol

Bueno ahora si nos metemos a el modo HID(Dispositivo de Interfas Humana, mouses,keypad,etc):

Primero tenemos que..tener presente que no vamos necesitar instalar nigun driver( como se hacia en el modo CDC)...ya que este modo HID usa los driver que viene en el windows .

Segundo tenemos que modificar el VID&PID correspondiente para que nuestro pic sea reconocido por el PC.
Asi que vamos primero a definir que es VID&PID:

VID: Identificador del vendedor osea Microchip
El VID es un número de 16 bits que significa Vendor Identification o código que identifica al fabricante del hardware a conectar. En nuestro caso utilizamos el número 04D8h que identifica a Microchip.( fuente picmania)

PID: Identificador del Producto
El PID es un número de 16 bits que significa Product Identification o código que identifica al dispositivo en concreto hardware a conectar. En nuestro caso utilizamos el número 000Ah que identifica a la familia de los PIC18 de este fabricante.(fuente picmania)


Bueno vamos a modificar esto y algo mas para esto vamos tener que ir a la libreria usb_desc_hid.h  del CCS compiler y en la primera parte cambios los VID & PID

Citar
#IFNDEF __USB_DESCRIPTORS__
#DEFINE __USB_DESCRIPTORS__

#ifndef USB_CONFIG_PID
   #define USB_CONFIG_PID  0x0020
#endif

#ifndef USB_CONFIG_VID
   #define  USB_CONFIG_VID 0x0461
#endif

Lo cambiamos...
Citar
#IFNDEF __USB_DESCRIPTORS__
#DEFINE __USB_DESCRIPTORS__
#ifndef USB_CONFIG_PID
   #define USB_CONFIG_PID 0x0000
#endif

#ifndef USB_CONFIG_VID
   #define  USB_CONFIG_VID 0x04D8
#endif

Nota: La version del CCScompiler que estoy utilizando es la 4.093 icon_lol

Una vez esto...le damos compilar y reemplazarr el usb_desc_hid.h  en la carpeta driver del ccscompiler. luego probamos y verificamos que todo esta bien( pueden hacerlo en proteus o en real, yo lo probe en real ,aca una foto de ello.


Ahora otra cosa que puden configurar el USB_STRING_DESC el cual posee 3 string y de los cuales nosotros cambiaremos el nombre del dispositivo como "www.icabots.com"

Citar
char const USB_STRING_DESC[]={
   //string 0
         4, //length of string index
         USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
         0x09,0x04,   //Microsoft Defined for US-English
   //string 1
         8, //length of string index
         USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
         'I',0,
         'C',0,
         'A',0,
   //string 2
         32, //length of string index
         USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
         'w',0,
         'w',0,
         'w',0,
         '.',0,
         'i',0,
         'c',0,
         'a',0,
         'b',0,
         'o',0,
         't',0,
         's',0,
         '.',0,
         'c',0,
         'o',0,
         'm',0
};

#ENDIF

Bueno si todo esta bien creo que ya podemos ponernos manos al compilador y a programar jaaaaaaaaaa..ahi vamos con nuestro primer ejemplo:

Ejemplo Nº1: Reconocimiento y enumeración del HOST con nuestro pic
Para esto se mostrar mediante leds que el pic ya fue enumerado y reconocido por el HOST

Primero ire a comer..jaaa    icon_lol icon_lol icon_lol regreso con el ejemplo....y su videito correspodiente
listo ya vine..a seguir... yupi

Bueno aca el primer ejemplo:
Citar
/*******************************************************************************************/
/******************** ENUMERACION DEL HOST _CLASE HID **************************************/
/*******************************************************************************************/
#include <18f4550.h>
#fuses hspll,nowdt,nomclr,noprotect,nolvp,nodebug,usbdiv,pll1,cpudiv1,vregen
#use delay(clock=48M)                                // clock  a 48Mhz
#define USB_CON_SENSE_PIN PIN_B2                    // pin para reconcer conexion por hardware
//*********************** configuracion y declaraciones ****************
#define ledv  PIN_B6                                 // asignando etiquetas a el pinb6
#define ledr  PIN_B7
#define ledon output_high                            // asignando etiquetas a la funcion output 
#define ledoff output_low

/*******************************************************************************************/
#DEFINE USB_HID_DEVICE TRUE                      // Vamos a utilizar el protocolo HID.
#define USB_EP1_TX_ENABLE USB_ENABLE_INTERRUPT // Definición del tamaño del buffer de salida.
#define USB_EP1_TX_SIZE 64
#define USB_EP1_RX_ENABLE USB_ENABLE_INTERRUPT // Definición del tamaño del buffer de entrada.
#define USB_EP1_RX_SIZE 64

/*************************************************************************************************/
// Librerías utilizadas.

#include <pic18_usb.h>                 // Drivers's USB del PIC18F2550.
#include <usb_desc_hid.h>              // Descriptores USB.
#include <usb.c>                       // Funciones del USB.

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

int8 data[64];                // denificnion de variables y funciones
int8 enumerado_host;
void usb_enum_on(void);
void usb_enum_off(void);

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

/********************************** PROGRAMA PRINCIPAL********************************************/
void main()
{
   usb_enum_off();       // aun no se enumera el HOST
   usb_init_cs();       // Iniciamos el puerto USB y salimos.
   while(1)
   {   usb_task(); // Configuramos el puerto USB.
       if (usb_enumerated()) // Si el puerto es enumerado y configurado por el host..
         { usb_enum_on(); }       // HOST enumerado
                                                                                                         
                                             
   }   
}
//*****************************************************************
/////********************rutinas*************************//////////
//******************************************************************

void usb_enum_on(void)
{
   ledoff(ledr);                                       // encendemos el led verde
    ledon(ledv);   
}

void usb_enum_off(void)
{   
   ledoff(ledv);                                      // enciendo el led rojo yq aun no detecta el host
   ledon(ledr);
}

El esquemático es el mismo que se uso en la clase CDC.


Bueno hasta aquí el primer ejemplo... próximamente veremos en reconocimiento del host en caliente y control de dispositivos por el usb( prender cosas por la pc con visual basic y el usb)

Nota: adjunto los archivos en proteus+ccscompiler para su correcta simulación o prueba en real.
« Última modificación: Diciembre 24, 2009, 04:50:14 por ccencho » En línea

Investigacion y desarrollo
ccencho
Administrator
Crea robots útiles pa la humanidad
*
Desconectado Desconectado

Mensajes: 293


Laberinto

axgt8@hotmail.com
Ver Perfil WWW Email
« Respuesta #1 : Diciembre 26, 2009, 11:58:15 »

Hola amigos  yupi acá regresando publico el segundo ejemplo que vendría hacer la fusión  de Reconocimiento del Hots y control de periféricos.... icon_lol

1.Bueno aca empezamos con el codigo estudiar

Citar
/*******************************************************************************************/
/******************** ENUMERACION DEL HOST _CLASE HID+ CONTROL DE LEDS *********************/
/*******************************************************************************************/
#include <18f4550.h>
#fuses hspll,nowdt,nomclr,noprotect,nolvp,nodebug,usbdiv,pll1,cpudiv1,vregen
#use delay(clock=48M)                                // clock  a 48Mhz
#define USB_CON_SENSE_PIN PIN_B2                    // pin para reconcer conexion por hardware
//*********************** configuracion y declaraciones ****************
#define ledv  PIN_B6                                 // asignando etiquetas a el pinb6
#define ledr  PIN_B7
#define ledon output_high                            // asignando etiquetas a la funcion output 
#define ledoff output_low

/*******************************************************************************************/
#DEFINE USB_HID_DEVICE TRUE                      // Vamos a utilizar el protocolo HID.
#define USB_EP1_TX_ENABLE USB_ENABLE_INTERRUPT // Definición del tamaño del buffer de salida.
#define USB_EP1_TX_SIZE 64
#define USB_EP1_RX_ENABLE USB_ENABLE_INTERRUPT // Definición del tamaño del buffer de entrada.
#define USB_EP1_RX_SIZE 64

/*************************************************************************************************/
// Librerías utilizadas.

#include <pic18_usb.h>                 // Drivers's USB del PIC18F2550.
#include <usb_desc_hid.h>              // Descriptores USB.
#include <usb.c>                       // Funciones del USB.

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

int8 datos[64];                // denificnion de variables y funciones
int8 enumerado_host;
void usb_enum_on(void);
void usb_enum_off(void);

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

/********************************** PROGRAMA PRINCIPAL********************************************/
void main()
{
   output_d(0);
   usb_enum_off();       // aun no se enumera el HOST
   usb_init_cs();       // Iniciamos el puerto USB y salimos.
   while(1)
   {
            usb_task(); // Configuramos el puerto USB.
                  if (usb_enumerated()) // Si el puerto es enumerado y configurado por el host..
                  {   
                     usb_enum_on();       // HOST enumerado                 
                     if (usb_kbhit(1))    // Si hay un paquete de datos en el buffer lo tomamos y guardamos en la variable data.
                     {
                        usb_get_packet(1, datos, 1);                   
                        switch(datos[0]){
                        case 1:
                        output_toggle(PIN_D0);
                        break;
                        case 2:
                        output_toggle(PIN_D1);
                        break;
                        case 3:
                        output_toggle(PIN_D2);
                        break;
                        case 4:
                        output_toggle(PIN_D3);
                        break;
                        case 5:
                        output_toggle(PIN_D4);
                        break;
                        case 6:
                        output_toggle(PIN_D5);
                        break;
                        case 7:
                        output_toggle(PIN_D6);
                        break;
                        case 8:
                        output_toggle(PIN_D7);
                        break;
                        case 9:
                        output_d(0); // Limpia el puerto d(borra leds)
                        break;
                        case 0:
                        output_d(255); //Prende leds
                        break;
                                             
                        }
                     }                               
                  }
   }
}



//*****************************************************************
/////********************rutinas*************************//////////
//******************************************************************

void usb_enum_on(void)
{
   ledoff(ledr);                                       // encendemos el led verde
    ledon(ledv);   
}

void usb_enum_off(void)
{   
   ledoff(ledv);                                      // enciendo el led rojo yq aun no detecta el host
   ledon(ledr);
}

2. Acá el programita en visual basic...para su control..( aca una fotito..el programa lo adjuntare el final del post,NOTA: solo usuarios registrados pueden verlo para descargarlo


Bueno....el circuito es el mismo del post anterior.. icon_lol..bueno debo decir que el control image usado  en visual basic...es algo lento su reacción...en comparación con el Commandbutton,..asiq el proximo ejemplo solucionaremos este detalles reemplazándolo por Commandbutton....pero como es un ejemplo academico
normal..jeee..

Hasta el próximo ejemplo..... chau

En línea

Investigacion y desarrollo
ccencho
Administrator
Crea robots útiles pa la humanidad
*
Desconectado Desconectado

Mensajes: 293


Laberinto

axgt8@hotmail.com
Ver Perfil WWW Email
« Respuesta #2 : Enero 01, 2010, 01:05:26 »

Hola amigos....ante todo  FELIZ AÑO NUEVO 2010  holass  yupi yupi yupi yupi,son los deseos de todo el grupo ICABOTS... icon_lol icon_lol icon_lol.

Bueno ahora si....bueno amigos..despues de un 2009 lleno de cosas y entre ellas...estos post de manejo del modulo USB del PIC18F4550....ahora en clases HID...aca vengo con el ultimo avanze que realize...y es sobre una interfas...realizada en visual basic...la cual, puede leer 4 entradas digitales, 4 entradas analogas y puede control 8 salidas digitales...todo esto con el PIC18F4550 via conexion USB en modo HID( no necesita driver, ni simula puerto serial)....asiq....aca subo primero el videito......y la demas informacion detalladas(circuito,codigo,etc) lo hare en los dias siguientes..

<a href="http://www.youtube.com/watch?v=Oam6rSb_hOk" target="_blank">http://www.youtube.com/watch?v=Oam6rSb_hOk</a>
En línea

Investigacion y desarrollo
ccencho
Administrator
Crea robots útiles pa la humanidad
*
Desconectado Desconectado

Mensajes: 293


Laberinto

axgt8@hotmail.com
Ver Perfil WWW Email
« Respuesta #3 : Enero 07, 2010, 12:20:43 »

Hola amigos regreso al post y bueno como lo prometido es deuda aca adjunto todo lo relacionado con el proyecto:

Contenido Full:
  • Programa para el PIC+Librerias en Ccscompiler
  • Esquematico para simulacion en Proteus 7.6 Sp0
  • Ejecutable de la interfase en visual Basic

Descargar aqui:
http://www.megaupload.com/?d=3FM2CNUC
En línea

Investigacion y desarrollo
chino
Conoce de robots por la TV
*
Desconectado Desconectado

Mensajes: 13


Ver Perfil Email
« Respuesta #4 : Enero 07, 2010, 04:11:54 »

Este modo de HID a diferencia del CDC es que tu creas tu propio instalador el *.inf Huh?
es cierto o no Huh?
En línea
ccencho
Administrator
Crea robots útiles pa la humanidad
*
Desconectado Desconectado

Mensajes: 293


Laberinto

axgt8@hotmail.com
Ver Perfil WWW Email
« Respuesta #5 : Enero 07, 2010, 04:13:58 »

Hola Chino bueno este modo es mas facil,yq no tienes q instalar ningun driver ni naa ya que es plug and play.
En línea

Investigacion y desarrollo
chino
Conoce de robots por la TV
*
Desconectado Desconectado

Mensajes: 13


Ver Perfil Email
« Respuesta #6 : Enero 07, 2010, 04:50:06 »

osea  es como un flash que se instala al conectar?

si es asi esta buenisimo
En línea
jesolar
Conoce de robots por la TV
*
Desconectado Desconectado

Mensajes: 1


Ver Perfil Email
« Respuesta #7 : Enero 21, 2010, 10:29:58 »


Hola ccencho, bueno estoy haciendo una pequeña cosa con el pic 18f2550, anda bien lo que tu has puesto, pero quiero preguntarte donde puedo sacar informacion o algun ejemplo de como hacer un programa en visual basic para leer el puerto usb, para asi poder terminar mi pequeña aplicacion, lo que quiero hacer es mandar pulsos del pic, y que se visualicen en la pantalla del pc, algo asi como un 1 y que valla sumando... me puedes ayudar  Huh?
En línea
ccencho
Administrator
Crea robots útiles pa la humanidad
*
Desconectado Desconectado

Mensajes: 293


Laberinto

axgt8@hotmail.com
Ver Perfil WWW Email
« Respuesta #8 : Enero 27, 2010, 05:02:03 »

Claro amigo....mas bien explica bien que es lo quieres hacer y bueno para poder ver como ayudarte.. Roll Eyes Roll Eyes Roll Eyes
En línea

Investigacion y desarrollo
andres
Conoce de robots por la TV
*
Desconectado Desconectado

Mensajes: 2


Ver Perfil
« Respuesta #9 : Febrero 01, 2010, 10:39:28 »

Hola amigos regreso al post y bueno como lo prometido es deuda aca adjunto todo lo relacionado con el proyecto:

Contenido Full:
  • Programa para el PIC+Librerias en Ccscompiler
  • Esquematico para simulacion en Proteus 7.6 Sp0
  • Ejecutable de la interfase en visual Basic

Descargar aqui:
http://www.megaupload.com/?d=3FM2CNUC
tiempo disculpa buenos dias soy nuevo en el foro, lo que pasa es que estoy tratando de hacer una pequeña aplicación con el pic 18f4550 para iniciar estoy tratando de montar el código de ccs del ejemplo que tienes en esta pagina pero me sale el siguiente error 128 "C:\pic\usb\main.h"line 2(9,14):A #DEVICE required before this line y no he podido darle solución me podrias colaborar con un aporte de solucion. muchas gracias

En línea
ccencho
Administrator
Crea robots útiles pa la humanidad
*
Desconectado Desconectado

Mensajes: 293


Laberinto

axgt8@hotmail.com
Ver Perfil WWW Email
« Respuesta #10 : Febrero 01, 2010, 10:46:14 »

Hola bueno en primer lugar, ten encuenta que modificado las librerías,las cuales las he adjuntado en el post, asi que primero fíjate si has usado las librerías modificadas, segundo revisa las versiones que estas usando del compilador , yo uso el ccscompiler 4.093.  icon_lol
En línea

Investigacion y desarrollo
andres
Conoce de robots por la TV
*
Desconectado Desconectado

Mensajes: 2


Ver Perfil
« Respuesta #11 : Febrero 03, 2010, 10:37:46 »

tiempo disculpa buenos dias soy nuevo en el foro, lo que pasa es que estoy tratando de hacer una pequeña aplicación con el pic 18f4550 para iniciar estoy tratando de montar el código de ccs del ejemplo que tienes en esta pagina pero me sale el siguiente error 128 "C:\pic\usb\main.h"line 2(9,14):A #DEVICE required before this line y no he podido darle solución me podrias colaborar con un aporte de solucion. muchas gracias


cool hola CCeencho buenas noches disculpa tanta molestia. ya pude compilar el código que diste de Ccscompiler  pero ahora sale un error al momento de ejecutar el programa de visual basic Run time errror 9 el cual sierra la aplicacion de inmediato por estee lado. segundo el pic no muestra ningún indicio de conexión HID lo cual me tiene bastante loco en este tema. por favor te pido la colaboracion de guiarme de sobre como se puede corregir estos errores. a otra cosa me puedes regalar un esquema del montaje que utilizaste para esta practica es que lo mas probable es que este cometiendo también un error de adecuación de hardware de ahi la razon del no reconocimiento HID.   gracias CCencho se le agradece la atencion prestada.
En línea
ccencho
Administrator
Crea robots útiles pa la humanidad
*
Desconectado Desconectado

Mensajes: 293


Laberinto

axgt8@hotmail.com
Ver Perfil WWW Email
« Respuesta #12 : Febrero 04, 2010, 04:57:53 »

Bueno, quisas si subes tu código en visual asi podre ayudarte mejor en tu problema..  Bien
En línea

Investigacion y desarrollo
gato0429
Conoce de robots por la TV
*
Desconectado Desconectado

Mensajes: 2


Ver Perfil Email
« Respuesta #13 : Marzo 04, 2010, 08:34:31 »

hi ccencho, yo estoy progrmando el 18f4550, pero me interesa la interfas en basic q desarrollas, que librerias usas para hacer la conexion con el pic, lo q quiero hacer es captura la data de una balanza digital y que la pase a la compu y de ahi procese la data, gracias cencho espero puedas ayudarme Huh? Huh?
En línea
Vexelius
Conoce de robots por la TV
*
Desconectado Desconectado

Mensajes: 1



Ver Perfil Email
« Respuesta #14 : Mayo 06, 2010, 01:06:35 »

Saludos, felicidades por esta serie de tutoriales, me han ayudado a aprender mucho.

Una petición: Podrías proporcionar también el código fuente de los programas en Visual basic? También quiero analizarlos, pues no entiendo todavía muy bien como recibir y enviar datos con VB por medio del HID.
En línea
Páginas: [1] 2   Ir Arriba
Imprimir
Ir a: