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

Mejor, porque el Visual C++ es más complicado, cuando lo compares te darás cuenta, es pesado, no se puede comprar con el C de PIC que es muy limitado y fácil.

Me falta por hacer el Visual C# que me detecte los led desde el PC.
 
hola amigos por hay eh leido que trabajan bastante el delphi y supuestamente es como que mejor para aquellos que trabajamos con electronica yo me inicio en el...mi intensión no es decir cual es el mejor si no cual se adapta mejor segun la profesion que ejerzamos...

saludos gracuias yonathan por la información sobre usb es muy extensa
 
Delphi lo dejé por Visual Studio, el cambio tardé en adaptarme, si me diera cuenta de lo bueno que es, no tardaría tanto.

Me da pena de Delphi porque fue el primero en aprender, no por ello el mejor, claro.

http://www.microsoft.com/express/download/

Aún sigo con el RS232 y me estoy peleando hasta para conseguir manejar el CASIO (calculadora con el 16F84)

Saludos.
 
Lo de la calculadora por RS232 + PIC16F84A, está muy buena aunque tambien puede hacerse con el PIC18F2550 y emulación CDC.

Yo nunca he programado en delphi porque sale de mi estructura (Programación en C), ya que tiene una estructura de programación basada en pascal.

Hasta ahora solamente he programado en Visual C# y Visual Basic 2005.
 
¿bulk/interrup transfers?

aca les aclaro eso:

· transferencias de control:
usado para comandos (y respuestas) cortos y simples. Es el tipo de transferencia usada por el pipe 0

· transferencias isócronas:
proveen un ancho de banda asegurado pero con posibles pérdidas de datos. Usado típicamente para audio y video en tiempo real

· transferencias interruptivas:
para dispositivos que necesitan una respuesta rápida (poca latencia), por ejemplo, mouse y otros dispositivos de interacción humana.

· transferencias masivas (BULK):
para transferencias grandes y esporádicas utilizando todo el ancho de banda disponible, pero sin garantías de velocidad o latencia. Por ejemplo, transferencias de archivos.

entonces nosotros debemos definir que tipo de transferencia vamos a realizar.
en el ejemplo de Jaime se están declarando 2 endpoints (1 bidirecionales) como transferencia masiva o BULK.



#define USB_EP1_TX_SIZE 1 //size to allocate for the tx endpoint 1 buffer
podemos definir el tamaño del buffer en bytes, el límite lo tendremos que buscar en el driver correspondiente (con FS hasta 64 bytes por transacción).

nota: no confundir FS con HS, con High Speed se llega hasta 480Mbps, el módulo USB del pic soporta Full Speed = 12Mbps
usb_wait_for_enumeration()
según el concepto que dan en el driver, hace lo mismo que usb_enumerated(). La diferencia está en que el primero se queda en un bucle indefinido hasta que el HOST le dé la orden de habilitación.

para propósitos donde queramos hacer otras actividades en el PIC, usaremos el segundo.
 
hola que post tan interesante me h a servido para aclarar un monton de dudas, pero ahora quisiera saber si alguno de ustedes ha tratado de enviar señales analogicas atraves del 18f2550 hacia el labview, por que yo lo he intentado pero miren el resultado.
 

Adjuntos

  • seal_896.jpg
    seal_896.jpg
    18.5 KB · Visitas: 923
Estoy tratando de traducir los documentos que siguen para poder postearlos, ya que la mayoría de la información sobre el puerto USB está en inglés técnico.

Cualquier proyecto por más sencillo que sea usando la librería mpusbapi.dll , posteenlo porque sirve como objeto de estudio para desarrollos más complejos.
 
pues yo lo que estoy tratando de medir es una señal de 60Hz, pero proveniente de un generador de señales, luego de que sale del generador lo paso por un filtro de corte a 120Hz para asi despues montarla en una componente dc para que pueda ser enviada al pic. gracias por la ayuda bye
 
jenn_t dijo:
pues yo lo que estoy tratando de medir es una señal de 60Hz, pero proveniente de un generador de señales, luego de que sale del generador lo paso por un filtro de corte a 120Hz para asi despues montarla en una componente dc para que pueda ser enviada al pic. gracias por la ayuda bye

cuentanos de que forma estan ingresando la señal haber si depronto podemos ayudarte
 
Hola a todos

Despues de una torticolis que me hizo desmayar del dolor , me puse las pilas para terminar un pequeño pero funcional ejemplo de comunicación bajo el protocolo HID.

El lenguaje que utilizé para la programación del PIC es el C de CCS. Este el código fuente.
Código:
// Programa de prueba del protocolo HID (Human interface device).
// Programa: Prende o apaga un led según reciba una señal desde el software del host.
// Programador: Moyano Jonathan.
// Fecha: 13/02/09


#include <18F2550.h> // Definición de registros internos del PIC18F2550.
#fuses NOMCLR,XTPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,NOPBADEN
// NOMCLR: No vamos ha usar el PIN MCLR, el reset se hará por soft.
// XTPLL: Vamos a usar un cristal de 4.00Mhz.
// NOWDT: No vamos a usar el perro guardian.
// NOPROTECT: Memoria no protejida contra lecturas.
// NODEBUG: No utilizamos código para debugear.
// NOLVP: No utilizamos el modo de programación con bajo voltaje.
// USBDIV: signfica que el clock del usb se tomará del PLL/2 = 96Mhz/2 = 48Mhz.
// PLL1: significa que el PLL prescaler no dividirá la frecuencia del cristal. para XT = 4Mhz.
// CPUDIV1: El PLL postscaler decide la división en 2 de la frecuencia de salida del PLL de 96MHZ, si queremos 48MHZ, lo dejamos como está.
// VREGEN: habilita el regulador de 3.3 volts que usa el módulo USB.
// NOPBADEN: Deshabilitamos el módulo conversor ADC del puerto B.
#use delay(clock=48000000)


#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

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

// Definición de las 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];
void main()
{
   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..
                  {
                     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, data, 64);
                        if(data[0] == 1) {
                         output_toggle(PIN_B0);
                        } 
                     }                                
                  }
   }

}

El estudio del código fuente como de las librerías que son necesarias serán objeto de estudio más adelante cuando termine con el protocolo bulk transfer.

El programa del host fue escrito en Visual Basic 2005, ya que Visual C# lo tengo como objeto de estudio al igual que visual Basic 2008.

Cabe mencionar que la comunicación con HID es muy útil y rápida. Este tipo de comunicación no precisa driver ya que el driver en si es nativo de windows desde la versión Win 98se.
 

Adjuntos

  • programa_ejemplo_176.rar
    16.1 KB · Visitas: 1,209
Acá les dejo el esquema en formato .dsn para proteus y JPG para los que no dispongan del software.

PD: La torticolis en serio es un dolor insoportable no se deseo ni a mi peor enemigo. :cry: :cry:
 

Adjuntos

  • esquema_138.rar
    127.9 KB · Visitas: 1,082
:cool: Hola a todos de nuevo

Acá les traigo un nuevo ejemplo. Esta véz se trata de algo concreto, un control de 8 relés por puerto USB utilizando la clase HID C de CCS y Visual Basic 2005.

A diferencia del ejemplo que había posteado sobre el control de 8 relés , este funciona a la perfección y mucho más rápido. No necesita drivers por lo que es plug and play.

Espero les sirva , ahora me voy a dedicar a terminar lo de mpusbapi que es bastante y luego seguiremos si dios quiere con HID y MSDC (mass storage device class) , pero eso será para más adelante.
 

Adjuntos

  • ejercicio_n2_614.rar
    51.1 KB · Visitas: 1,223
Estimado Moyano:
He leido con interes todas tus aportaciones que has hecho con el USB, estoy iniciando justo ese tema tambien pues me interesa transferir datos desde y hacia una pc con un PIC18F4550, mis preguntas son:
El archivo dll de microchip MPUSBAPI deberia ser instalado en la pc ? o este es el firmware que se carga al pic ? si no es asi donde rayos va el archivo dll y cual es el firmware? mientras contestas mis dudas voy a leer toda la información que he bajado de este foro.

Gracias de antemano y saludos
 
Hola como andas aguevara, las respuestas a tus dudas son las siguientes:

- El archivo mpusbapi.dll es el archivo encargado , junto con el driver correspondiente que viene incluido con el de gestionar la comunicación PC - PIC . Ahora bien este archivo no se carga al pic sino que un programa escrito por ejemplo en Visual Basic 6.0 llama a las funciones de esa librería y establece comunicacion con el PIC.

- El firmware es el programa que se le carga al pic , donde hay librerías específicas para gestionar la comunicación usb.

Espero tus dudas hayan sido disipadas , en caso contrario peregunta.

Mañana voy a seguir con el tutorial del protocolo bulk transfer donde voy a hacer incapie nuevamente en esto que has preguntado.
 
Atrás
Arriba