Autor Tema: problema en declaracion de variables para enviar datos por usb modo cdc  (Leído 1542 veces)

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

Desconectado hernanutn

  • PIC16
  • ***
  • Mensajes: 117
hola el problema que cuando declaro 2 variables del tipo int el programa anda, pero mas de 2 deja de funcionar el envio de datos, tambien para los int8 sucede los mismo, estoy programando en PCW compiler. desde ya gracias

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: problema en declaracion de variables para enviar datos por usb modo cdc
« Respuesta #1 en: 01 de Febrero de 2015, 17:30:08 »
Hola, por favor ayúdanos para que te ayudemos.  :mrgreen: Gracias.

http://www.todopic.com.ar/foros/index.php?topic=16136.0

Desconectado hernanutn

  • PIC16
  • ***
  • Mensajes: 117
Re: problema en declaracion de variables para enviar datos por usb modo cdc
« Respuesta #2 en: 01 de Febrero de 2015, 17:43:57 »
tengo esta porcion de codigo que es una funcion:

void espirometria()
{
char recepcion;               //Dato recibido del PC
int1 control;                 //falso o verdadero para mostrar tensión

int flujoh=0,flujol=0;
int8  Templ=0,Temph=0;
int16 Temp16Bits=0,presion16bits=0,flujo16=0,presionh=0,presionl=0;
float temperatura=0,presion=0;

printf(lcd_putc,"ESPIROMETRIA");


do
{
                //Detección de la conexión de dispositivo USB
      //Devuelve TRUE si dispositivo ha sido enumerado por el PC
      if (usb_enumerated()){
      
           /*CONFIGURACION CANAL 2 CON 12 BITS*/
                         output_low(CS);
                         spi_write(220);/* canal 3*/
                        flujoh=spi_read(0);//obtenemos el Temp alto del registro de temperatura
                         flujol=spi_read(0);//obtenemos el Temp bajo del registro de temperatura
                         output_high(CS);
                        flujoh = flujoh & 0x7F;
                         flujo16=make16(flujoh,flujol);
                        
             /*CONFIGURACION CANAL 3 CON 12 BITS*/
                         output_low(CS);
                         spi_write(172);/* canal 3*/
                         Temph=spi_read(0);//obtenemos el Temp alto del registro de temperatura
                         Templ=spi_read(0);//obtenemos el Temp bajo del registro de temperatura
                         output_high(CS);
                         Temph = Temph & 0x7F;
                        
                         Temp16Bits=make16(Temph,Templ);
                         Temp16Bits=Temp16Bits>>3;
                         temperatura=Temp16Bits*0.122;       /*FACTOR DE CONVERSION=(5*100/4095)  */


              /*CONFIGURACION CANAL 4 CON 12 BITS*/
                          output_low(CS);
                          spi_write(228);
                          presionh=spi_read(0);//obtenemos el Temp alto del registro de temperatura
                          presionl=spi_read(0);//obtenemos el Temp bajo del registro de temperatura
                          output_high(CS);
                          presionh = presionh & 0x7F;
                        
                          //tensionl>>=3;
                          presion16Bits=make16(presionh,presionl);//convertimos a un registro de 16Bits
                            lcd_gotoxy(1,1);
                            
                            // printf(lcd_putc,"%lx",tension16Bits);
                         presion16Bits=presion16Bits>>3;
                        
                          presion=(presion16Bits*0.0012-0.2+0.675)/4.5E-5;
                          presion=presion/1000;
              
                          
                           lcd_gotoxy(1,2);
                            printf(lcd_putc,"T=%3.1f P=%3.1f KPa",temperatura,presion);
                            
                
                           if (usb_cdc_kbhit()){        
                                recepcion=usb_cdc_getc();  //lo lee
                                   //si es caracter vacio(barra espaciadora)enciende o apaga visualización
                                    if (recepcion==' ') control=control+1;
                                    }
                                  //Si control=1 envia a PC valor de tensión leido
                              if (control==1)
                              {
                               printf(usb_cdc_putc,"A%x%x",flujoh,flujol);
                               printf(usb_cdc_putc,"B%x%x", Temph,Templ);
                         printf(usb_cdc_putc,"C%x%x",presionh,presionl);
                              }
                                        
                                    
                                    
                            
          

         delay_ms(50);
                          
                          }


}while(TRUE);
}


de este modo anda, pero por ej al declarar esto int flujoh=0,flujol=0,a=0,b=0; no anda, es decir en una hyperterminal no muestra lo que deberia recibir, pero si en el lcd muestra esto:printf(lcd_putc,"T=%3.1f P=%3.1f KPa",temperatura,presion);


« Última modificación: 01 de Febrero de 2015, 17:51:16 por hernanutn »

Desconectado hernanutn

  • PIC16
  • ***
  • Mensajes: 117
Re: problema en declaracion de variables para enviar datos por usb modo cdc
« Respuesta #3 en: 02 de Febrero de 2015, 02:47:22 »
ya lo solucione, elimine esta parte del codigo:
    if (usb_cdc_kbhit()){       
                                recepcion=usb_cdc_getc();  //lo lee
                                   //si es caracter vacio(barra espaciadora)enciende o apaga visualización
                                    if (recepcion==' ') control=control+1;
                                    }
                                  //Si control=1 envia a PC valor de tensión leido
                              if (control==1)


xq es para la hyperterminal en el codigo original de donde lo saque, y para labview no hace falta, mando directamente esto:
  printf(usb_cdc_putc,"A%x%x",flujoh,flujol);
                               printf(usb_cdc_putc,"B%x%x", Temph,Templ);
                         printf(usb_cdc_putc,"C%x%x",presionh,presionl);


ese era el error y no las variables.


 

anything