Autor Tema: Problema PIC18F4550 USB CDC - PC  (Leído 2466 veces)

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

Desconectado Thanathos

  • PIC10
  • *
  • Mensajes: 10
Problema PIC18F4550 USB CDC - PC
« en: 04 de Diciembre de 2012, 19:59:52 »
Antes que nada muchas gracias por su atención, me encuentro desarrollando una comunicación USB CDC con PIC18F4550.

Simplemente se trata de leer una valor con el ADC y transmitirlo al Computador, dependiendo del valor recibido el computador me envia los valores '1', '2' ó '3' y con estos enciendo uno de tres led conectador al puerto B.

El código "base" se basa en el aporte de esta pagina http://picmania.garcia-cuervo.net/usb_3_cdctransfers.php , he hecho muchas veces comunicación USB sin contratiempo alguno, sien embargo esta vez consigo que los datos se transmitan del PIC al PC, pero al intentar trasmitir del PC al PIC este solo recibe el valor 0X0F.

Resumiendo:
 - El PIC si puede enviar al PC la variable "análoga".
 - Pero al enviar desde el PC a PIC siempre llega el valor 0X0F.

No sé si sea algún bug en la versión del compilador aunque he probado las Versiones 4.128, 4.110, 4.104 . y no he conseguido hacer que funcione.

Cabe anotar que ya utilice el buscador y nada :(, asi que cualquier sugerencia es muy bien recibida.

De antemano muchas gracias.


#include "18F4550.h"
#DEVICE ADC=8
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)

#include ".\include\usb_cdc.h"

int8 conversion=0;
char recibe='a';
 
void main() {
   setup_adc(ADC_CLOCK_INTERNAL);             //configuro A/D
  setup_adc_ports(AN0_ANALOG);     
  set_adc_channel(0);
   
     output_low(PIN_B3);
  output_low(PIN_B4);
  output_low(PIN_B5);
 
 
  set_tris_a(0b11111111);
  set_tris_b(0b11000111);
 
  //set_tris_d(0b11110000);
 
 
    output_high(PIN_D2);                       // encendemos led en Rojo para indicar presencia de energia
  output_low(PIN_D3);

   
   delay_ms(300);
   usb_cdc_init();
   usb_init();
   while(!usb_cdc_connected()) {}
   do
   {  usb_task();
      if (usb_enumerated())
      {    output_high(PIN_D3);                       // encendemos led en Verde para indicar coneccion
            conversion=read_adc();                           // iniciamos convercion
            delay_ms(10);
            if (usb_cdc_kbhit())                               //si el endpoint de salida contiene datos del host
            {     recibe=usb_cdc_getc();
                  if (recibe=='1')
                   {  output_low(PIN_B3);     //verde
                      output_low(PIN_B4);     //rojo
                      output_high(PIN_B5);    //amarillo
                   }
                  if (recibe=='2')
                   {  output_low(PIN_B3);    //verde
                      output_high(PIN_B4);   //rojo
                      output_low(PIN_B5);    //amarillo
                   }
                  if (recibe=='3')
                   {  output_high(PIN_B3);    //verde
                      output_low(PIN_B4);     //rojo
                      output_low(PIN_B5);     //amarillo
                   }
            }
            usb_cdc_putc(conversion);
      }
   } while (TRUE);
}

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Problema PIC18F4550 USB CDC - PC
« Respuesta #1 en: 04 de Diciembre de 2012, 21:23:48 »
Hola, asi a simple vista creo ke el delay que estas usando puede que este molestando e la comunicacion usb, prueba haciebdo el codigo de otra manera, pero sin usar el delay_ms, prueba usando algun timer del micro para generar esa pausa.

saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Problema PIC18F4550 USB CDC - PC
« Respuesta #2 en: 05 de Diciembre de 2012, 01:57:31 »
Hola! Como estas mandando el byte desde la PC? Seguro q no estas mandando un retorno de carro o salto de linea al final? Hace un putc de lo q recibis para ver bien como llegan los datos.
Saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein


 

anything