TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: jfmateos2 en 13 de Febrero de 2013, 12:00:08

Título: Detectar en el PIC que el ordenador está listo para comunicarse por USB CDC
Publicado por: jfmateos2 en 13 de Febrero de 2013, 12:00:08
Tengo un PIC conectado a unos sensores y quiero que, en caso de que se conecte por USB a un ordenador y se abra una sesión de hyperterminal, el PIC presente un mensaje de presentación.

No sé cómo detectar en el PIC que el hyperterminal está listo para comunicarse con el PIC.

He leído algo sobre una señal DTR pero prefiero consultar antes de liarme más.

Estoy usando C18.

Gracias.
Título: Re: Detectar en el PIC que el ordenador está listo para comunicarse por USB CDC
Publicado por: MLO__ en 13 de Febrero de 2013, 12:25:59
Hola

Lo que habria que detectar es cuando se conecta al puerto ... y mientras esperas la numeracion (que se da cuando se abre el hyperterminal) se podrian leer los sensores. En el momento de abrir el hyperterminal se sale del ciclo de espera de numeracion y se pasaria al mensaje que mencionas ...

Saludos
Título: Re: Detectar en el PIC que el ordenador está listo para comunicarse por USB CDC
Publicado por: jfmateos2 en 13 de Febrero de 2013, 18:00:52
Gracias MLO.

Más concretamente, la clave está en el archivo usb_functions_cdc.c, en la variable control_signal_bitmap.DTE_PRESENT.

He creado en main.c una variable llamada mostrarBienvenida a la que asigno inicialmente el valor 0.

Luego, en usb_functions_cdc.c defino esa misma variable como extern (extern unsigned char mostrarBienvenida;), y en la línea 341 pongo el siguiente código:

Código: [Seleccionar]
            if(control_signal_bitmap.DTE_PRESENT == 1)
            {
mostrarBienvenida = 1;
}

De modo que en el main.c ya sólo me queda hacer:

Código: [Seleccionar]
if(mostrarBienvenida == 1){
mostrarBienvenida = 0;
putUSBUSART(bienvenida,sizeof(bienvenida));
}

La pista la he cogido de aquí: http://www.microchip.com/forums/m529368-print.aspx
Título: Re: Detectar en el PIC que el ordenador está listo para comunicarse por USB CDC
Publicado por: Nocturno en 14 de Febrero de 2013, 02:19:33
¿Y sabes cómo detectar si se desconecta el usb?
Yo choqué una vez con ese problema y la única forma de resolverlo fue sensando si llegaban 5V por el cable USB, pero no fui capaz de hacerlo por software.
Título: Re: Detectar en el PIC que el ordenador está listo para comunicarse por USB CDC
Publicado por: jfmateos2 en 14 de Febrero de 2013, 03:24:32
No sé si esto te servirá: http://www.microchip.com/forums/m667931.aspx
Título: Re: Detectar en el PIC que el ordenador está listo para comunicarse por USB CDC
Publicado por: Nocturno en 14 de Febrero de 2013, 07:07:49
Me parece que ese bit no existe en los 18F, pero lo chequearé.
Título: Re: Detectar en el PIC que el ordenador está listo para comunicarse por USB CDC
Publicado por: MGLSOFT en 14 de Febrero de 2013, 10:15:04
En USB_CDC.h del CCS esta esta estructura declarada:

Citar
struct  {
   int1 dte_present; //1=DTE present, 0=DTE not present
   int1 active;      //1=activate carrier, 0=deactivate carrier
   unsigned int reserved:6;
} usb_cdc_carrier;
Título: Re: Detectar en el PIC que el ordenador está listo para comunicarse por USB CDC
Publicado por: Nocturno en 14 de Febrero de 2013, 18:25:12
Pues he metido esto en el bucle principal de mi programa y compila bien, pero el led verde no se enciende nunca:

Código: C
  1. if (usb_cdc_carrier.dte_present)
  2.          output_high(verde_anodo);
  3.         else
  4.          output_low(verde_anodo);
Título: Re: Detectar en el PIC que el ordenador está listo para comunicarse por USB CDC
Publicado por: MGLSOFT en 14 de Febrero de 2013, 19:03:52
Y antes activas el Carrier ??
Título: Re: Detectar en el PIC que el ordenador está listo para comunicarse por USB CDC
Publicado por: Nocturno en 14 de Febrero de 2013, 19:17:40
Sí, pero nada  :?
Título: Re: Detectar en el PIC que el ordenador está listo para comunicarse por USB CDC
Publicado por: MLO__ en 14 de Febrero de 2013, 19:51:59
Hola

Y luego la deteccion no se hace con un divisor de tension? creo que en el archivo del CCS estaba el valor de las resistencias (100k si no estoy mal) ... recuerdo que en una de las versiones se podia detectar si se conectaba el hyperterminal tambien .... voy a buscarlo que ha de estar "refundido" por ahi ..

Saludos
Título: Re: Detectar en el PIC que el ordenador está listo para comunicarse por USB CDC
Publicado por: Nocturno en 15 de Febrero de 2013, 02:42:08
Sí, detectando la presencia de los 5V es sencillo saber si está enchufado o no, pero me sorprende que no se pueda conseguir por software.
Título: Re: Detectar en el PIC que el ordenador está listo para comunicarse por USB CDC
Publicado por: MLO__ en 16 de Febrero de 2013, 01:26:41
Hola maestro Noc ... por que dices que no se puede?? a mi me funciona con la funcion input_state() ...

Saludos
Título: Re: Detectar en el PIC que el ordenador está listo para comunicarse por USB CDC
Publicado por: Nocturno en 16 de Febrero de 2013, 02:12:35
¿Usando USB CDC en un PIC18F?, a ver si a ser la versión de CCS, ¿cuál estás usando?