desktop

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

Hola pkdos, muy interesantes tus proyectos debo decir, y a decir verdad me llamó mucho la atención ya que encuentro muy util la herramienta NTgraph ya que no poseo labview y VB es un entorno mas familiar para mi.

Gran aporte.
 
Hola a todos, les comento mi problema. Estoy usando el PIC18F14K50, probe con la libreria de Michochip y me funciono bien,pero en CCS no me anda, solo recibe datos pero no identifica cual, recibe siempre un 0. Para transmitir no hay problema, lo hace bien.
Ya habia posteado la misma duda pero ahora lo que hice es hacerlo funcionar con MPLAB (funciona pero prefiero CCS). La version de CCS es 4.104.
Alguien sabe que puedo cambiar para que funcione bien la recepcion de datos? Estoy usando los ejemplos de la pagina 1.

Gracias y saludos

Daniel
 
Q onda chavos, he logrado hacer la comunicacion USB en modo BULK con un xtal de 20 Mhz y 24Mhz pro tengo problemas para usar los cristales de 40Mhz y 48Mhz, alguien me podria ayudar a configurar los #Fuses.
 
Hola a todos, les comento mi problema. Estoy usando el PIC18F14K50, probe con la libreria de Michochip y me funciono bien,pero en CCS no me anda, solo recibe datos pero no identifica cual, recibe siempre un 0. Para transmitir no hay problema, lo hace bien.
Ya habia posteado la misma duda pero ahora lo que hice es hacerlo funcionar con MPLAB (funciona pero prefiero CCS). La version de CCS es 4.104.
Alguien sabe que puedo cambiar para que funcione bien la recepcion de datos? Estoy usando los ejemplos de la pagina 1.

Gracias y saludos

Daniel

Usa la versión 4.065 y nos dices que sucedió ;)
 
Que onda, ya he logrado hacr la comunicación USB, con un xtal de 4Mhz consigo 150 muestras en 1 segundo, con un xtal de 20Mhz consigo 280 en promedio y con un xtal de 24Mhz consigo 305 muestras por segundo en promedio, he intentado utilizar el xtal de 40Mhz y el de 48Mhz pro no he conseguido configurar bien #fuses,.
Alguien sabe de que forma lo tengo que hacer? , necesito alcanzar una mallor velocidad de muestreo.

Gracias y saludos
 
Saludos headhead, la página que recomiendas ya esta caducada www.colpic.co.cc , porfavor, podrías poner la nueva pág donde tienes colgada la aplicacion que comunica el PC con un PIC mediante el puerto USB usando una aplicacion en C#.

Muchas gracias
 
@KR20: Hey!!! Que tipo de comunicación estás implementando? Según lo que yo sé el cristal no va a hacer que varíe la frecuencia interna a la que trabaja el pic, si se configuran bien los fuses... (Que alguien me corrija si estoy equivocado x favor!!!!)

Para 48MHz la configuración debería ser algo así: ECPLL, PLL12, CPUDIV1 y el resto igual que los demás cristales.

Para 40MHz: ECPLL, PLL10, CPUDIV1, ...

Insisto: SI ME EQUIVOCO CORRÍJANME!!! :oops:
 
Hola a todos, tengo un problema con enviar mas de 2 datos desde el PIC al PC, resulta que (Imagen 1) a pesar de en el PIC enviar 5 datos diferentes hacia el PC usando usb_put_packet (tengo el mismo problema si uso usb_puts) unicamente me envia 2 datos por el buffer 1 y 2 nada mas, ahunque lo configure con mas bytes en el array, no hay caso e probado mil formas y no logro apuntar a la razon, la parte de visual basic se que esta bien, incluso use otro exe que saque de otra pagina que servia para testear los datos en los diferentes buffers, pasa lo mismo, por eso dedusco que el problema esta en el micro controlador, aca esta el C del micro
Código:
#include <18F2550.h> // Definición de registros internos del PIC18F2550.
#fuses NOMCLR,XTPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,NOPBADEN

#use delay(clock=48000000)


#DEFINE USB_HID_DEVICE TRUE // Vamos a utilizar el protocolo HID.

#define USB_EP1_TX_ENABLE USB_ENABLE_INTERRUPT 
#define USB_EP1_TX_SIZE 5 // Definición del tamaño del buffer de salida.

#define USB_EP1_RX_ENABLE USB_ENABLE_INTERRUPT 
#define USB_EP1_RX_SIZE 5 // Definición del tamaño del buffer de entrada.

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

// Definición de las librerías utilizadas.
#include <pic18_usb.h>    // Drivers's USB del PIC18F2550.
#include <USB_easyHID_descriptores.h> // Descriptores USB para la placa MoyaPIC_USB28 y easyHID.
#include <usb.c> // Funciones del USB.

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

// Variables globales.
int8 data[5];

void main()
{
	data[0] = 1;
	data[1] = 2;
	data[2] = 3;
	data[3] = 4;
	data[4] = 5;
	
   usb_init_cs();    // Iniciamos el puerto USB y salimos.
   while(1)
   {
		usb_task();
		usb_put_packet(1,data,5,USB_DTS_TOGGLE);
   }

}

la parte de lectura HID del VB
Código:
    Public Sub OnRead(ByVal pHandle As Integer)

        ' read the data (don't forget, pass the whole array)...
        If hidRead(pHandle, BufferIn(0)) Then

        End If

        dat1 = BufferIn(1)
        dat2 = BufferIn(2)
        dat3 = BufferIn(3)
        dat4 = BufferIn(4)
        TextBox1.Text = dat1
        TextBox2.Text = dat2
        TextBox3.Text = dat3
        TextBox4.Text = dat4

    End Sub
ahi esta, no hay caso para enviar mas datos a la vez, lo necesito para poder terminar un proyecto :LOL: es lo unico que me falta, ojalaa alguien que sepa la respuesta me pueda ayudar, de antemano Gracias.

Ahi subi el VB porsiacaso, ahunque dudo que sea eso, estoy convencido de que hay algo en el micro.
 

Adjuntos

  • Imagen 1.JPG
    Imagen 1.JPG
    134.1 KB · Visitas: 103
  • Conexion USB.rar
    8.1 KB · Visitas: 232
  • Visual Basic.rar
    240.4 KB · Visitas: 263
Última edición:
Hola:
Tengo realicé un circuito impreso que utilizando el 18f2550 se comunica por usb, el problema es que tengo por toda la plaqueta un ruido o señal senoidal indeseable de 48MHz(que casualidad no?), para tener una idea de la magnitud de esta señal es de cerca de 20 mV que se realimenta a las entradas analógicas ¿Alguien a sufrido o solucionado esto?. Aclaro que he utilizado capacitores de desacople de: cerámica, cerámica multicapas, de tantalio, etc. de diversos valores y no ha sido solución.
 
@ChoN: Qué es exactamente lo que quieres hacer? Tengo curiosidad... Para comunicarme con el PIC por HID yo uso una librería que me facilitó un prof en la Universidad. Yo la utilizo con VisualStudio, programando en C#. Aquí te la dejo. Espero te sirva... :)

El archivo contiene un dll y otro archivo .pdb, con que usas esta librería? No se abre con visual.
Saludos.
 
Ahí dije: Con VisualStudio 2008 o 2005... En realidad lo que uso es el archivo usbLibrary.dll
Le das click cn el botón derecho del mouse sobre la barra de los componentes y le das a algo que dice Agregar componente o algo así, ahí busca el dll y listo!!!

Eso me crea un componente (como un Botón o cualquier otro perolito de esos) y tiene eventos de Dispositivo conectado, Desconectado, Datos Recibidos, entre otros...

Pero sólo lo he usado con VisualStudio programando en C#
 
Hola Adler.

¿Modificastes el descriptor del usb, para que el PC sepa que se le envia?. La parte que menciono es:
const char USB_CLASS_SPECIFIC_DESC[] = {...}

Mirando los aportes que dio el compañero "nonames" en este mismo foro página 44 pone unos enlaces, en los que describe a los descriptores HID:
http://www.keil.com/forum/docs/thread15398.asp
http://www.usbmadesimple.co.uk/ums_ms_desc_conf.htm

Y el que estoy utilizando yo:
www.usb.org/developers/devclass_doc/HID1_11.pdf

Te comento que a mi me pasa eso, lo que estoy haciendo es dos conversiones de 10 bits, he probado modificar el descriptor, para que se envie 4 bytes. Ojo no me va, y no se porque:

Código:
const char USB_CLASS_SPECIFIC_DESC[] = {
6, 0, 255, // Usage Page = Vendor Defined
9, 1, // Usage = IO device
0xa1, 1, // Collection = Application
0x19, 1, // Usage minimum
0x29, 8, // Usage maximum

0x15, 0x00, // Logical minimum (-128) 0x15, 0x00, 0x80,
0x26, 0xFF, 0x00 // Logical maximum (127) 0x26, 0xFF, 0x03, 0x25, 0x7F,

0x75, 8, // Report size = 8 (bits)
0x95, 4, // Report count = 16 bits (2 bytes) ///2
0x81, 4, // Input (Data, Var, Abs)
0x19, 1, // Usage minimum
0x29, 8, // Usage maximum
0x75, 8, // Report size = 8 (bits)
0x95, 4, // Report count = 16 bits (2 bytes) 2 /// 4
0x91, 4, // Output (Data, Var, Abs) 2 /// 4
0xc0 // End Collection
};

Saludos a todos.
 
pkdos: pude lograr enviar 3 datos de conversores analogos por USB sin problema, te debe haber faltado el tiempo de espera de 20us para que el conversor pueda hacer su pega, bueno ahi te adjunto el C el vb y el descriptor que uso, ojalaa te sirva, saludos!
 

Adjuntos

  • imagen1.JPG
    imagen1.JPG
    141.4 KB · Visitas: 117
  • USB_easyHID_descriptores.rar
    1.8 KB · Visitas: 297
  • ADC HID USB.rar
    611.7 KB · Visitas: 385
  • imagen 1.JPG
    imagen 1.JPG
    189.1 KB · Visitas: 129
Última edición:
pkdos: pude lograr enviar 3 datos de conversores analogos por USB sin problema, te debe haber faltado el tiempo de espera de 20us para que el conversor pueda hacer su pega, bueno ahi te adjunto el C el vb y el descriptor que uso, ojalaa te sirva, saludos!

Hola:

Como tengo ganas de hacer eso. ejjeje. En asm es complicado.

Saludo.
 
Ahí dije: Con VisualStudio 2008 o 2005... En realidad lo que uso es el archivo usbLibrary.dll
Le das click cn el botón derecho del mouse sobre la barra de los componentes y le das a algo que dice Agregar componente o algo así, ahí busca el dll y listo!!!

Eso me crea un componente (como un Botón o cualquier otro perolito de esos) y tiene eventos de Dispositivo conectado, Desconectado, Datos Recibidos, entre otros...

Pero sólo lo he usado con VisualStudio programando en C#

Gracias! Y disculpas, no estoy a full con C# ultimamente...
Saludos.

PD: Si tenes un ejemplo en C# utilizando esta librería se agradece!!!
 
Última edición:
Atrás
Arriba