Autor Tema: Puerto USB  (Leído 3381 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Puerto USB
« en: 06 de Noviembre de 2009, 17:22:23 »
Hola grupo, les pido ayuda por lo siguiente:

Me pueden remitir a algún lugar donde pueda obtener información un poco más clara acerca de los funciones del USB, ejemplo que significa:
usb_cdc_init()
usb_init()
usb_task()
usb_cdc_kbhit()
etc.

muchas gracias.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Puerto USB
« Respuesta #1 en: 06 de Noviembre de 2009, 17:53:36 »
Hola, el manual en inglés de CCS trae la descripción de tales funciones. Además puedes verlas descritas en el archivo usb_cdc.h de la carpeta drivers de PICC.

Desconectado El_Guitre

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1046
Re: Puerto USB
« Respuesta #2 en: 06 de Noviembre de 2009, 18:36:15 »
Aqui la expliacion de algunas de las funciones de esa librería, alguna vez las pase a español en el encabezado de la librería. Como bien dijo Santiago esta en el directorio de instalacion de CCS

usb_cdc_kbhit() - Retorna TRUE si hay uno o mas caracteres recibidos y esperando en el buffer de recepción.
 
usb_cdc_getc() - Toma un caracter del buffer de recepción.  Si  no hay datos en el buffer espera hasta que lleguen  Si no queremos esperar en un bucle infinito, debemos usar  usb_cdc_kbhit() primero, para chequear que hay datos antes / de llamar a  usb_cdc_getc().  

usb_cdc_putc(char c) - Pone un caracter en el buffer de transmisión.  Si el buffer esta lleno, queda esperando a que este se vacíe para poner el caracter en el buffer. El buffer de transmisión es leído por la PC muy rápido, en consecuencia, el buffer estara lleno solo unos  milisegundos.  Si no queremos quedar esperando en un bucle  debemos usar usb_cdc_putready() para chequear si hay lugar lugar antes de poner el dato en el buffer.

usb_cdc_putready() - Retorna TRUE si hay lugar en el buffer de transmisión para otro caracter.  

usb_cdc_connected() - Retorna TRUE si fue recibido un Set_Line_Coding.  La mayoría de los programas de terminales seriales (com Hyperterminal), envian un mensaje Set_Line_Coding cuando el programa inicia y esto abre el puerto COM virtual. Esta es una forma sencilla de determinar si la PC esta lista para mostrar datos en el programa de terminal serial pero no garantiza que funcione siempre o en otro programa de terminal serial

usb_cdc_putc_fast(char c) - Similar a usb_cdc_putc(), pero  si el buffer de transmisión esta lleno saltara el caracter

usb_cdc_line_coding - Una estructura usada para  Set_Line_Coding  y Get_Line_Coding.  Generalmente puede no usarla.

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Puerto USB
« Respuesta #3 en: 06 de Noviembre de 2009, 19:09:08 »
migsantiago, guitre, muchas gracias por las respuestas, permítanme les hago estas otras preguntas:

1- Se debe inicializar el USB sólo cuando el dispositivo es conectado al PC ?
    usb_cdc_init();
    usb_init();   

2- Que evento se genera cuando el conector USB es conectado al PC ?, creo que es en este momento cuando debo inicializar el USB ?
    usb_cdc_init();
    usb_init();   

3- Para saber si desconectaron el USB sólo basta con chequear la función usb_cdc_connected() ?

Mil gracias.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Puerto USB
« Respuesta #4 en: 06 de Noviembre de 2009, 22:40:27 »
Hola, son una infinidad de interrupciones las que se generan con USB, pero como usuario no te toca atender ninguna, CCS lo hace por ti.

¿Vas a usar fuente independiente o fuente USB?

Si es fuente independiente puedes inicializar el USB únicamente si detectas el voltaje USB entrando al PIC conectándolo a un pin I/O, aunque lo mejor es usar usb_init_cs() que inicializa el USB aún cuando el pic no ha sido conectado.

Después en tu programa solo usas usb_task() de vez en cuando para que el pic se conecte al detectar conexión USB.

En tu programa quedaría algo así

Código: [Seleccionar]

void main()
{
usb_init_cs(); //arranca el usb pero no conecta
while(1){
usb_task(); //Pone al pic en el estado USB apropiado, conecta si hace falta
if(usb_enumerated()) //Solo entra si el PIC ya está en estado CONFIGURED
{
printf("c");
}
}
}

Checa el ejemplo ex_usb_serial.c, viene muy fácil.

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Puerto USB
« Respuesta #5 en: 07 de Noviembre de 2009, 09:59:25 »
migsantiago, muchas gracias, ya estoy a punto de terminar mi primer ejercicio con el puerto USB.