TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Medusa en 29 de Enero de 2008, 21:45:54

Título: Problemas con el USB en modo CDC
Publicado por: Medusa en 29 de Enero de 2008, 21:45:54
Hola,

Estoy tratando de implementar una intefase usando el USB en modo CDC, este es mi codigo:

Código: [Seleccionar]
#include <18f2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=20000000)
#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7)

#define SELECTOR   PIN_A0


#define LEDV       PIN_B6
#define LEDR       PIN_B7
#define LED_ON     output_high
#define LED_OFF    output_low

#include <usb_cdc.h>

char c=0x00;
char rec=0x00;

void menu (void);

////******************************************************************************************
//#build(reset=0x800)
// #build(interrupt=0x808)
// #org 0x0000,0x07ff
// void bootloader() {
// #asm
// nop
// #endasm
//} // Reserve space for the bootloader

//******************************************************************************************
void menu (void){

   printf(usb_cdc_putc,"\r\n");
   printf(usb_cdc_putc,"Menu:\r\n");
   printf(usb_cdc_putc,"  [R] Leer DATO\r\n");
   printf(usb_cdc_putc,"  [C] Configurar Canal\r\n");
   printf(usb_cdc_putc,"  [X] Salir\r\n\n");
   printf(usb_cdc_putc,"\r\n");
   printf(usb_cdc_putc,"\r\n");
   printf(usb_cdc_putc,"Comando: ");

   rec=toupper(usb_cdc_getc());
}     
//********************************************************************************************
void main() {

   LED_OFF(LEDV);                   
   LED_ON(LEDR);
   
   usb_cdc_init();
   usb_init();                         
   
   while (TRUE) {
   
   usb_task();

//   if(usb_enumerated()){               
         if (input (SELECTOR)){
       LED_ON(LEDR);                   
          LED_OFF(LEDV);
       printf(usb_cdc_putc,"Prendio el Led ROJO \r\n");
       Delay_ms(300);
      }
       else{
       LED_OFF(LEDR);                   
          LED_ON(LEDV);
       printf(usb_cdc_putc,"Prendio el Led VERDE \r\n"); 
       Delay_ms(300);
       menu();
 
     // }
      }
    }
 }


Cuando deshabilito ( //rec=toupper(usb_cdc_getc());) todo funciona OK y puedo comu7nicarme con la PC a traves del Hiperterminal, pero cuando lo habilito esto no logro comunicarme a taves del hiperterminal, alguien podria decirme cual es el problema?
Título: Re: Problemas con el USB en modo CDC
Publicado por: PalitroqueZ en 30 de Enero de 2008, 19:46:54
Hola medusa

pregunta tonta:

si te funciona bien ¿para que lo quieres habilitar?



Título: Re: Problemas con el USB en modo CDC
Publicado por: Medusa en 30 de Enero de 2008, 20:11:02
Hola PalitroqueZ,

El codigo que he colgado es solamente una parte de mi proyecto y es donde he detectado que se produce este problema.
Título: Re: Problemas con el USB en modo CDC
Publicado por: RedPic en 30 de Enero de 2008, 20:19:25
Si lo haces en dos pasos ¿también falla?

rec=usb_cdc_getc();
rec=toupper(rec);
Título: Re: Problemas con el USB en modo CDC
Publicado por: Medusa en 30 de Enero de 2008, 21:46:53
hola RedPic, el problema persiste y es necesario que resetear la mi PC para que nuevamente el Com Virtual este habilitado.
Título: Re: Problemas con el USB en modo CDC
Publicado por: J1M en 30 de Enero de 2008, 21:51:39
hola medusa, posiblemente tengas algo raro dentro de la función 'toupper' y haga que se cuelgue el PIC...

saludos
Título: Re: Problemas con el USB en modo CDC
Publicado por: RedPic en 31 de Enero de 2008, 04:43:17
Eso mismo te iba a decir, quita el toupper() y trabaja con minúsculas a ver que pasa.
Título: Re: Problemas con el USB en modo CDC
Publicado por: Medusa en 31 de Enero de 2008, 12:17:48
Hola, he quitado "toupper" y estoy trabajando solos con munusculas y el problema es el mismo.

 :-/ en el codigo que he colgado  esta sentecia //   if(usb_enumerated()){   esta comentada, pero no es asi debe de estar habilitada y aun asi sigue el problema, tienen alguna sugerencia... :?



Título: Re: Problemas con el USB en modo CDC
Publicado por: RedPic en 31 de Enero de 2008, 12:23:39
Medusa, te pongo la secuencia completa del main() que yo uso para el CDC y que me funciona correctamente. ¿Podrías probarla con tu código a ver si solucionamos algo?

Código: C#
  1. main(){
  2.  
  3. ...
  4.   usb_cdc_init();
  5.   usb_init();
  6.   while(!usb_cdc_connected()) {}
  7.   do{
  8.     usb_task();
  9.     if (usb_enumerated()) {
  10.        ...
  11.        Miprograma
  12.        ...
  13.     }
  14.   }while (TRUE);
Título: Re: Problemas con el USB en modo CDC
Publicado por: Medusa en 31 de Enero de 2008, 21:32:00
Hola, el problema persiste...
Título: Re: Problemas con el USB en modo CDC
Publicado por: RedPic en 01 de Febrero de 2008, 04:32:32
Este fin de semana te voy a preparar un ejemplito mínimo que haga algo, lo programo sobre un 18F2550 y lo pruebo, te mando el .c y el .hex y lo pruebas. Si te falla vamos a empezar a sospechar del compilador o del hardware ¿Ok?

P.D.: ¿Que versión del CCS C usas? Por que a mí la 2.245 me dio problemas y tuve que bajar a 2.242 para solucionarlo.
Título: Re: Problemas con el USB en modo CDC
Publicado por: Nocturno en 01 de Febrero de 2008, 09:10:59
Te has confundido al teclear Diego, es la 3.242.
Título: Re: Problemas con el USB en modo CDC
Publicado por: c4_esp_VR en 01 de Febrero de 2008, 09:52:49
Prueba con esto:

Código: [Seleccionar]
#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)

#include <usb_cdc.h>
#include <usb_desc_cdc.h>

void main() {

usb_cdc_init();
usb_init(); //inicializamos el USB

while (!usb_cdc_connected()) {}
while (true)
{
usb_task();
if(usb_enumerated())
{
usb_cdc_putc(0x41);
}
}
}

Utiliza este código, deberías de estar recibiendo en el pc siempre una A mayuscula.

¿¿¿¿Por cierto de que frecuencia es tu reloj externo????

Espero que te sirva.

Un saludete.
Título: Re: Problemas con el USB en modo CDC
Publicado por: Medusa en 01 de Febrero de 2008, 12:03:27
Hola, la version que tengo es la 4.057
Título: Re: Problemas con el USB en modo CDC
Publicado por: Nocturno en 01 de Febrero de 2008, 12:38:33
Yo tenía esa versión y salí huyendo de ella despavorido cuando veía que mis programas dejaban de funcionar bien. La 3.249 me va como la seda.
Título: Re: Problemas con el USB en modo CDC
Publicado por: RedPic en 01 de Febrero de 2008, 13:25:50
Te has confundido al teclear Diego, es la 3.242.

El Alzehymer, Manolo, el alzehymer.  :oops:
Título: Re: Problemas con el USB en modo CDC
Publicado por: Nocturno en 01 de Febrero de 2008, 14:40:38
¡Qué malo es el Alzheimer!, yo también lo sufro. A mí me afecta a la memoria y a ti a la escritura de algunas palabras, hasta de ella misma...
Título: Re: Problemas con el USB en modo CDC
Publicado por: pocher en 01 de Febrero de 2008, 15:10:53
Y con la 3.249 ya se podían compilar programas con USB? Yo estoy ahora liao (y bien liao) en lo del USB y compilando con la 4.058 de momento los que he hecho no me han dado problemas (tanto en CDC como en BULK).
Título: Re: Problemas con el USB en modo CDC
Publicado por: Nocturno en 01 de Febrero de 2008, 15:13:57
Sí que se puede, Pocher.
No vienen tantos micros, pero los que solemos usar sí están (18F2550 y 18F4550)
Título: Re: Problemas con el USB en modo CDC
Publicado por: J1M en 01 de Febrero de 2008, 15:37:11
Ya que los archivos del compilador son solo las .dll (pcb.dll, pch.dll, etc.) lo que podéis hacer es utilizar el IDE del 3.249 y las bibliotecas del antiguo pero todo aliñado en la instalación del CCS más moderno, así tendréis las ventajas de los dos mundos ;)

saludos!!

pd: a mí personalmente tb me sigue funcionando todo... aunq esto del CCS a veces es cuestión de suerte! jejeje
Título: Re: Problemas con el USB en modo CDC
Publicado por: RedPic en 01 de Febrero de 2008, 19:56:45
Y con la 3.249 ya se podían compilar programas con USB? Yo estoy ahora liao (y bien liao) en lo del USB y compilando con la 4.058 de momento los que he hecho no me han dado problemas (tanto en CDC como en BULK).

Pocher, yo estoy con la 3.242 y el USB va de lujo.
Título: Re: Problemas con el USB en modo CDC
Publicado por: pocher en 02 de Febrero de 2008, 07:34:12
Bueno es saberlo amiguetes. A ver si os podeis pasar por el subforo de VB, voy a dejar una pregunta referente a recibir datos por interrupción en modo BULK USB.

Un saludo