hola a todos
me parece excelente este post, todo lo que se necesita para aprender usb...
he visto los ejemplos de PalitroqueZ y son muy buenos, y hoy quiero plantearle una inquietud
mi problema es el siguiente, estoy realizando una comunicacion tipo cdc, con muestreo en lcd, pero si meto en el codigo algo que tenga que ver con la lcd no me sirve, si quito lo de la lcd funciona perfecto, no se uqe pasa, en proteus funciona bn, estoy utilizando cristal de 4 mhz y los fuses los configuro asi,,,
#fuses XTPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,NOPBADEN
con solo lcd_init(); se me traba el pic, esto en montaje real, ni siquiera se conecta,,, comento lo que tiene que ver con lcd y de una aparece el com y realiza todo bn,,, ya llevo un dia y no he logrado encontrar el error,,,,
habia leido que para poder trabajar con el usb del pic y con otros modulos habia que usar usb_init_cs();, pero igual y no funciona,,, que sera...
aqui esta mi codigo,, lo que hace es que cuando no esta conectado con usb, funciona con bateria y hace el proceso, si esta a usb funciona de ahi y hace lo mismo pero con muestreo en pc,,,, todo eso lo hace bn,,, pero si escribo o inicio la lcd, ya no sirve,,,, yo habia realizado bastantes comunicaciones usb, pero que yo recuerde no tenia este problema,,,
#include <18F2550.h>
#DEVICE ADC=10
#fuses XTPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)
#define use_portb_lcd TRUE
#include <lcd.c>
#include "usb_cdc.h"
float luxsd;
long temper,luxs;
unsigned int temp,lux[2],recib,modo=0,hini=0,hini1=0,warning=0x0f;
signed int enc=0xff;
void usb_com()
{
if(usb_cdc_connected())
{
output_high(pin_c6);
output_low(pin_c7);
if (usb_enumerated())
{ warning=0;
if(usb_cdc_kbhit())
{
recib=usb_cdc_getc();
if(recib==0x31)
{
usb_cdc_putc(temp);
usb_cdc_putc(lux[0]);
usb_cdc_putc(lux[1]);
}
if(recib==0x32)
{
output_HIGH(pin_A3);
//lcd_putc("\fInt Luz");
//lcd_putc("\n Temp: C lux");
enc=1;
}
if(recib==0x33)
{
output_low(pin_A3);
lcd_putc("\f");
enc=0xff;
}
if(recib==0x34)
{
usb_cdc_putc(0x0f);
usb_cdc_putc(0x0f);
usb_cdc_putc(0x0f);
}
if(recib==0x35)
{
output_high(pin_c7);
output_low(pin_c6);
}
if(recib==0x36)
{
/*lcd_putc("\f Inicio de Insp");
lcd_putc("\nen Base de Datos");
delay_ms(200);
lcd_putc("\fInt Luz");
lcd_putc("\n Temp: C lux");*/
}
if(recib==0x37)
{
/*lcd_putc("\f Termino Insp");
lcd_putc("\nen Base de Datos");
delay_ms(2000);
lcd_putc("\fInt Luz");
lcd_putc("\n Temp: C lux");*/
}
}
}
}
}
void adquisicion()
{
set_adc_channel(0);
delay_us(10);
luxs = read_adc();
delay_us(60);
set_adc_channel(1);
delay_us(10);
temper = read_adc();
delay_us(60);
luxsd = (((0.00000000000006) * (luxs ^ 6)) - ((0.0000000002) * (luxs ^ 5)) + ((0.0000004) * (luxs ^ 4)) - ((0.0003) * (luxs ^ 3)) + ((0.119) * (luxs ^ 2)) - (26.409 * luxs) + 2632);
temp= temper*0.48828125;
lux[0]=make8(luxs,0);
lux[1]=make8(luxs,1);
/*
if (temp>=100)
{
lcd_gotoxy(7,2);
printf(lcd_putc,"%d",temp);
}
if (temp>=10)
{
lcd_gotoxy(7,2);
printf(lcd_putc," %d ",temp);
}
else
{
lcd_gotoxy(7,2);
printf(lcd_putc," %d ",temp);
}
//if (luxs>=100000)
// {lcd_gotoxy(9,1);
//printf(lcd_putc,"%ld",luxs);}
if (luxs>=10000)
{
lcd_gotoxy(9,1);
printf(lcd_putc," %f",luxsd);
}
if (luxs>=1000)
{
lcd_gotoxy(9,1);
printf(lcd_putc," %f ",luxsd);
}
if (luxs>=100)
{
lcd_gotoxy(9,1);
printf(lcd_putc," %f ",luxsd);
}
if (luxs>=10)
{
lcd_gotoxy(9,1);
printf(lcd_putc," %f ",luxsd);
}
else
{
lcd_gotoxy(9,1);
printf(lcd_putc," %f ",luxsd);
} */
}
void main()
{
set_tris_a(0x03);
setup_adc_ports(AN0_TO_AN1);
setup_adc(ADC_CLOCK_INTERNAL );
output_high(pin_c7);
output_low(pin_c6);
output_low(pin_A3);
/*lcd_init();//inicializamos el USB
lcd_putc("\fLuxometroDigital");
lcd_putc("\n Mesalud Ltda");*/
while(true)
{
if (input(pin_c0) == 1)
{
if (input(pin_c1) == 1)
{
if(warning==0 && hini1==1)
{
usb_cdc_putc(0xff);
usb_cdc_putc(0x36);
usb_cdc_putc(0x36);
warning=1;
}
/*lcd_putc("\f Desconecte USB");
lcd_putc("\n o La Bateria");*/
delay_ms(2000);
/*lcd_putc("\fEl Equipo Puede");
lcd_putc("\n Sufrir Danos");*/
delay_ms(2000);
hini=0;
enc=0xff;
}
else
{
warning=0;
if(hini==0)
{
//lcd_putc("\fLuxometroDigital");
//lcd_putc("\n Mesalud Ltda");
}
hini=1;
modo=0x0f;
}
}
else
{
modo=0xf0;
warning=0;
output_low(pin_a2);
if(hini==0)
{
//lcd_putc("\fLuxometroDigital");
//lcd_putc("\n Mesalud Ltda");
}
hini=1;
if(hini1==0)
{
usb_cdc_init();
usb_init_cs();
hini1=1;
}
}
if (hini==1)
{
if(input(pin_c2))
{
delay_ms(200);
enc=enc*-1;
if(enc==1)
{
output_HIGH(pin_A3);
//lcd_putc("\fInt Luz");
//lcd_putc("\n Temp: C lux");
usb_cdc_putc(0xff);
usb_cdc_putc(0x32);
usb_cdc_putc(11);
}
else
{output_LOW(pin_A3);
usb_cdc_putc(0xff);
usb_cdc_putc(0x33);
usb_cdc_putc(11);
//lcd_putc("\f");
}
}
}
if(enc==1)
{
if (modo==0x0f)
{
output_high(pin_a2);
adquisicion();
}
if(modo==0xf0)
{
usb_task();
adquisicion();
usb_com();
}
}
else
{
output_low(pin_a2);
if(modo==0xf0)
{
usb_task();
usb_com();
}
}
}
}
de antemano muchas gracias,,,, espero que me puedan colaborar...........