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

en la carpeta del programa PICC , dentro de ella se encuentra una carpeta que se llama drivers.
Los documentos al mplab se incorporan solos , lo unico que tenes que hacer es declararlo en tu codigo fuente.

Un saludo !
 
Eso es lo que supuse. Sin embargo, cuando intente compilar el codigo que subiste en tu primer post de este tema, al intentar compilarlo, el usb.h no lo encontra. Soy bastante nuevo en todo.
 
Instale el MPLAb v8.36 , luego el MCHPFSUSB v2.5b , más tarde cree un proyecto según como esta explicado en MPLAB-C18-Getting-Started. Sin embargo, al copiar el codigo(ejercicio_n1_174) explicado en el primer post de este tema, no me reconoce ciertos .h tales como usb.h.
Por otro lado, note que al instalar MCHPFSUSB v2.5b, era posible encontrar las librerías que estaba necesitan en "C:\MCHPFSUSB\fw\Cdc”.
Por lo que entonces, quería saber como hago para importarlas al mpLab para poder usarlas y que de todo lo que se encuentra en C:\MCHPFSUSB\fw\Cdc he de usar para poder probar lo que se explico en el primer post de este tema.
 
hola Moyano me interesa saber si as probado estos driver en vista o si hay alguno que me sirva para este sistema operativo lo que me produce esa inquietud es que realice una aplicación en visual c++ en mfc utilizando unos driver que a posteado palitroques en algún lado en xp corrió bien pero a la hora de correrlos en vista me reconoce el dispositivo pero los datos me dan erróneos no se si fue a causa del driver o otro sea el motivo
gracias
att Fran Restrepo

http://www.migsantiago.com/index.php?option=com_content&view=article&id=9&Itemid=10
 
Última edición:
Hola amigos, soy nuevo en este foro, he leido desde el primer post y vaya que son bastantes Gracias aMoyano me he sacado de muchas dudas, pero quiero concretar mis repuestas ya que no soy tan experto en la programada de PICs.
Para empezar quiero comentar que estoy elaborando un proyecto para controlar procesos de produccion. Ahora mi duda es esta... quiero hacer lo mismo como en las gasolineras que te dice la cantidad de litros que se vaciaron, la diferencia que esta sera gobernada por una PC; estoy haciendo una aplicacion en basic para obtener esos resultados. Ahora ya tengo un dispositivo que arme (medidor de flujo) que arroja "x" pulsos por cada litro, y utilizare interfaz USB para enviar los datos al ordenador, tengo a la mano el PIC18F2550, tengo el grabador y y utilizare ccs con el pwc, mi duda es la elaboracion del programa para el PIC, que configuracion tengo que tomar en cuenta tanto de los parametros como de la conexion del circuito, ia tenog la idea ,, pero si peden sugerirme que puedo tomar en cuenta para hacer mi programa..

Nota: La funcion es esta, en la aplicacion VB6 se escoge el tipo de recipiente por ejemplo: 20 litros, y manda la instruccion para que el medidor de flujo solo deje pasar 20 litros y al llegar a los 20 litros mandar a cerrar la valvula. Pero la aplicacion de basic debe de visualizar los litros que que se vaciaron o bien pasaron por el medidor en tiempo real. La cosa es migrar los pulsos a la aplicacion vb6.

Bueno me extendi :s, espero sus aportaciones. Gracias a todos :).. Saludos
 
Que trabajo. Muy bien hecho. Ojalá aparezca algo de manual para poder por fin manejar el puerto USB algún día para aprender apagar y encender Led.
 
¿Qué tal?
Hace tiempo que no lo sigo, ejejje. Bueno, epero que el proyecto USB siga adelante. Si llega USB 3.0 en navidades llegas las nuevas placas bases y tarjetas, en temas de PIC con USB 3.0 me da que tardarán en venderlo hasta que mucha gente tenga USB 3.0.
 
El protocolo USB 3.0
por ejemplo Blue ray ustedes lo tienen hace ya 2 años ....cuando acá recién se está poniendo a la venta a precios altisimos.
Lo que yo te digo es el tema de la brecha digital q hay...acá por donde yo vivo es bastante complicado conseguir ciertas cosas y si las conseguis las tenés que pagar como si fueran oro.
 
A, entiendo. En EE.UU. lo usan 5 años antes que España. muchas cosas. Hoy en día con Ebay, hay cosas que no frenan.

Vendrán rápido. Argentina vende muchos PIC que hasta creo que en España.
 
Hola Amigos del foro, les cuento que yo estoy haciendo un proyecto con un PIC18F4550 conectado vía USB, el software que utilice fue el CCS C, y el visual Basic 6.0,... El proyecto es censillo, se trata de un pequeño programa en visual Basic en el cual yo coloco en binario 4 números por ejemplo 0001 1001 0101 0111 = 1957... y la idea es que este numero 1957 aparezca en 4 displays utilizando únicamente 8 salidas del pic, por lo tanto utilizo 4 para un decodificador y las otras cuatro para manejar 4 transistores que me activan los displays.

Todo va muy bien, ya tengo la comunicación USB y ya se ven los numeros en los dislays, el problema que tengo es que los displeys prenden y apagan mucho y esto se debe a que el visual basic no es capas de hacerlo lo suficientemente rapido como para que no titilen los displays, por este motivo necesito que los datos que envia el visual basic los guarde el pic18f4550 y los muestre continuamente… y no se como hacer esto.

Por favor una ayudita...

Este es el programa del pic.

Código:
//*************************************************************************
//                            PicUSB.c
// Realizado con el compilador CCS por Andrés Felipe Gómez Rendón
// *************************************************************************
 
#include    <18F4550.h>
#fuses      HSPLL,            //CRISTAL DE ALTA VELOCIDAD
#fuses      NOWDT,            //NO TRABAJAR CON EL PERRO GUARDIAN.
#fuses      PROTECT,          //PROTEGER EL CODIGO DE LECTURAS
#fuses      EBTR,             //PROTEGER LA MEMORIA DE LECTURAS
#fuses      CPD,              //PROTEGER LA EEPROM DE LECTURAS
#fuses      CPB,              //PROTEGE EL CODIGO DE BITS DE LECTURAS
#fuses      EBTRB,            //PROTEGE LA TABLA DE LECTURAS
#fuses      NOLVP,            //NO PERMITE LA PROGRAMACION A BAJO VOLTAGE
#fuses      NODEBUG,          //LO PROTEGE DE LECTURAS
#fuses      USBDIV,           //EL RELOJ DEL PLL DE USB SE DIVIDE X 2
#fuses      PLL5,             //DIVIDE POR 5 EL OCSILADOR DE 20MHZ
#fuses      CPUDIV1,          //NO DIVIDA EL RELOJ 
#fuses      VREGEN,           //REGULADOR DE VOLTAJE USB ACTIVO
#fuses      MCLR,             //EL PIN DE MASTER CLEAR ESTA ACTIVO.
#fuses      LPT1OSC,          //EL OXILADOR CONSUME MAS ENERGIA PERO ES MAS ESTABLE AL RUIDO.
#fuses      FCMEN,            //MONITOREA EL OXILADOR Y SI DETECTA UNA FALLA PASA A RELOJ INTERNO..
 
#use        delay(clock= 20000000)                                      // Cristal de 20MHz
 
 
// =========================================================================
// Definiciones para la librería dinámica CCS. Para la configuración dinámica
// hay que definir algunos valores. Están explicados en usb.h
// =========================================================================
 
#define     USB_HID_DEVICE      FALSE                                   // Deshabilitamos el uso de las directivas HID
#define     USB_EP1_TX_ENABLE   USB_ENABLE_BULK                         // Activa EP1(EndPoint1) para las transferencias IN Bulk/Interrupt
#define     USB_EP1_RX_ENABLE   USB_ENABLE_BULK                         // Activa EP1(EndPoint1) para las transferencias OUT Bulk/Interrupt
#define     USB_EP1_TX_SIZE     4                                       // Tamaño reservado para el Buffer Tx EndPoint1
#define     USB_EP1_RX_SIZE     3                                       // Tamaño reservado para el Buffer Rx EndPoint1
 
#include    <pic18_usb.h>                                               // Microchip PIC18Fxx5x Hardware para el CCS PIC USB Driver
#include    <PicUSB.h>                                                  // Configuración del USB y los descriptores para este dispositivo
#include    <usb.c>                                                     // Handles usb ,tokens y descriptores
 
 
// =========================================================================
[/COLOR]
[COLOR=#505050]// =========================================================================
 
#define     LED7            PIN_B7                                      // PORTE.2 OUT DISPLAYS_1 DIS_4 RE7(40)
#define     LED6            PIN_B6                                      // PORTE.2 OUT DISPLAYS_1 DIS_3 RE6(39)
#define     LED5            PIN_B5                                      // PORTB.7 OUT DISPLAYS_1 DIS_2 RB5(48)
#define     LED4            PIN_B4                                      // PORTB.6 OUT DISPLAYS_1 DIS_1 RB4(37)
#define     LED3            PIN_B3                                      // PORTB.5 OUT DISPLAYS_1 BIT_3 RB3(36)
#define     LED2            PIN_B2                                      // PORTB.4 OUT DISPLAYS_1 BIT_2 RB2(35)
#define     LED1            PIN_B1                                      // PORTB.3 OUT DISPLAYS_1 BIT_1 RB1(34)
#define     LED0            PIN_B0                                      // PORTB.2 OUT DISPLAYS_1 BIT_0 RB0(33)
 
#define     LED_ON          output_high                                 // Salida en alto
#define     LED_OFF         output_low                                  // Salida en bajo
 
#define     modo            recibe[0]                                   // Byte que indica el modo de operación
#define     param1          recibe[1]                                   // Primer parámetro recibdo
#define     param2          recibe[2]                                   // Segundo parámetro recibdo
 
#define     entrada_0       envia[0]                                    // Byte a envíar en las entradas
#define     entrada_1       envia[1]                                    // Byte a envíar en las entradas
#define     entrada_2       envia[2]                                    // Byte a envíar en las entradas
#define     entrada_3       envia[3]                                    // Byte a envíar en las entradas
 
#define     APAGA_LED       0
#define     ENCIENDE_LED    1  
 
void main(void)                                                         // Función Principal
{
   int8    recibe[3];                                                  // Declaramos la variable recibe de 3 bytes
   int8    envia[4];                                                   // Declaramos la variable envía de 4 bytes
 
 
   set_tris_B(0B11111111); // Nibble bajo entradas, el alto salidas
 
   usb_init();                                                         // Inicializamos el USB
 
   usb_task();                                                         // Habilita el periferico usb y las interrupciones
   usb_wait_for_enumeration();                                         // Esperamos hasta que el PicUSB sea configurado por el PC
 
  if(usb_enumerated())                                                // Si el PicUSB está configurado
 
     while (TRUE)                                                        // Se cumple siempre (Bucle infinito)
   {
 
       if(usb_enumerated())                                            // Si el PicUSB está configurado
       {
 
           if (usb_kbhit(1))                                           // Si el EndPoint de salida contiene datos del PC
           {
               usb_get_packet(1, recibe, 3);                           // Cojemos el paquete de tamaño 3 bytes del EP1
                                                                       // y lo almacenamos en la variable recibe
 
 
               if (modo==ENCIENDE_LED)                                 // Modo Encender Leds
{
 
 
 
                   if (param1==1) {LED_ON(LED0);}                      // Encendemos led 0
                   if (param1==2) {LED_ON(LED1);}                      // Encendemos led 1
                   if (param1==3) {LED_ON(LED2);}                      // Encendemos led 2
                   if (param1==4) {LED_ON(LED3);}                      // Encendemos led 3
                   if (param1==5) {LED_ON(LED4);}                      // Encendemos led 4
                   if (param1==6) {LED_ON(LED5);}                      // Encendemos led 5
                   if (param1==7) {LED_ON(LED6);}                      // Encendemos led 6
                   if (param1==8) {LED_ON(LED7);}                      // Encendemos led 7
}
 
 
               if (modo==APAGA_LED)                                    // Modo Apagar Leds
{
 
                   if (param1==1) {LED_OFF(LED0);}                     // Apagamos led 0
                   if (param1==2) {LED_OFF(LED1);}                     // Apagamos led 1
                   if (param1==3) {LED_OFF(LED2);}                     // Apagamos led 2
                   if (param1==4) {LED_OFF(LED3);}                     // Apagamos led 3
                   if (param1==5) {LED_OFF(LED4);}                     // Apagamos led 4
                   if (param1==6) {LED_OFF(LED5);}                     // Apagamos led 5
                   if (param1==7) {LED_OFF(LED6);}                     // Apagamos led 6
                   if (param1==8) {LED_OFF(LED7);}                     // Apagamos led 7
 
}
 
 
                 }
 
 
 
               }
 
 
           }
       }
Muchas gracias.

bye.
 
Última edición:
Y si estás usando un timer en el visual basic para que refresque los datos tendrías que ver de bajar bajar el tiempo de refresco para que muestre los datos más rápido. Me parece muy poco factible poder aumentar la velocidad de datos que envía el PIC por USB ... aunque me parece que se puede ( pero no se hacerlo ).
Un saludo !
 
Saludos soy nuevo en el foro, muy buena ayuda moyano he aprendido mucho sobre programacion en pic, quisiera saber si alguien sabe como realizar el programa de adquisición no por Visual, sino por Matlab, estoy en un proyecto y no se como comunicar usb y matlab, lei el foro y Nicolas8702. tiene un programa que comunica usb matlab, sin embargo solo viene el programa en labview, le agradeceria mucho a nicolas8702 si me puede ayudar.
Gracias
 
Última edición:
Hola Jonathan, no puedo más que felicitarte por tanto empeño y dedicación, y además de eso compartirlo con todo el mundo.
Te comento que yo trabaje bastante con USB en modo Bulk, enlazandolo con Visual C# y Labview, en algunos proyectos que tengo que acomodar para poder postear.
Te comento que hasta ahora no había podido solucionar el problema del modo HID, hasta que me hiciste ver la luz!
En los ejemplos que posteaste, no he podido simularlos en proteus ya que falta el archivo inf que pide windows cuando detecta el hard, ¿Cómo solucionas esto?
Desde ya muchas gracias.