La verdad muy buena pregunta...nunca he hecho uso de los timer's a esa frecuencia de trabajo...podrías habrir un hilo propio o posterarlo en los foros de CCS.
Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
#include <18F2550.h>
#DEVICE ADC=10
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)
#define use_portb_lcd TRUE
#define on_ext pin_a2
#define on_usb pin_c6
#define off_usb pin_c7
#define r_100 pin_a3
#define r_1000 pin_a4
#define r_10000 pin_a5
#define on_pin output_high
#define off_pin output_low
// CCS Library dynamic defines
#DEFINE USB_HID_DEVICE TRUE //Tells the CCS PIC USB firmware to include HID handling code.
#define USB_EP1_TX_ENABLE USB_ENABLE_INTERRUPT //turn on EP1 for IN bulk/interrupt transfers
#define USB_EP1_TX_SIZE 3 //Numero de byte de envio (maximo 64 bytes)
#define USB_EP1_RX_ENABLE USB_ENABLE_INTERRUPT //turn on EP1 for OUT bulk/interrupt transfers
#define USB_EP1_RX_SIZE 1 //Numero de byte de Recepcion (maximo 64 bytes)
// CCS USB Libraries
#include <pic18_usb.h> //Microchip 18Fxx5x hardware layer for usb.c
#include <hid 8-byte.h> //USB Configuration and Device descriptors for this UBS device
#include <usb.c>
#include <math.h>
#include <lcd.c>
float luxsd,luxsf;
long temper,luxs;
int temp,lux[2],recib[1],modo=0,hini=0,hini1=0,warning=0x0f,escn=0,FR=0,outbuffer[3];
signed int enc=0xfe;
short int ind=0,escala=0;
int32 vlux=0;
void f_escala_ext()
{
switch (escn)
{
case 0:
off_pin(r_100);
off_pin(r_1000);
on_pin(r_10000);
break;
case 1:
off_pin(r_100);
off_pin(r_10000);
on_pin(r_1000);
break;
case 2:
off_pin(r_1000);
off_pin(r_10000);
on_pin(r_100);
break;
}
}
void f_escala_usb()
{
switch (escn)
{
case 0:
off_pin(r_100);
off_pin(r_1000);
on_pin(r_10000);
outbuffer[0]=0xff;
outbuffer[1]=0x37;
outbuffer[2]=0x0f;
usb_put_packet(1, outbuffer, 3, USB_DTS_TOGGLE);
break;
case 1:
off_pin(r_100);
off_pin(r_10000);
on_pin(r_1000);
outbuffer[0]=0xff;
outbuffer[1]=0x38;
outbuffer[2]=0x0f;
usb_put_packet(1, outbuffer, 3, USB_DTS_TOGGLE);
break;
case 2:
off_pin(r_1000);
off_pin(r_10000);
on_pin(r_100);
outbuffer[0]=0xff;
outbuffer[1]=0x39;
outbuffer[2]=0x0f;
usb_put_packet(1, outbuffer, 3, USB_DTS_TOGGLE);
break;
}
}
void vizualizar()
{
if (temp>=100)
{
lcd_gotoxy(1,2);
printf(lcd_putc," %d °C",temp);
}
if (temp>=10)
{
lcd_gotoxy(1,2);
printf(lcd_putc," %d °C",temp);
}
else
{
lcd_gotoxy(1,2);
printf(lcd_putc," %d °C",temp);
}
//if (luxs>=100000)
// {lcd_gotoxy(9,1);
//printf(lcd_putc,"%ld",luxs);}
if (luxsd>=10000 && FR==0)
{
lcd_gotoxy(1,1);
printf(lcd_putc," %ld lux ",vlux);
}
if (luxsd>=1000 && FR==0)
{
lcd_gotoxy(1,1);
printf(lcd_putc," %ld lux ",vlux);
}
if (luxsd>=100 && FR==0)
{
lcd_gotoxy(1,1);
printf(lcd_putc," %ld lux ",vlux);
}
if (luxsd>=10 && FR==0)
{
lcd_gotoxy(1,1);
printf(lcd_putc," %ld lux ",vlux);
}
else
{
IF(FR==0)
{
lcd_gotoxy(1,1);
printf(lcd_putc," %ld lux ",vlux);
}
}
}
void adquisicion()
{
set_adc_channel(0);
delay_ms(5);
luxs = read_adc();
delay_ms(5);
set_adc_channel(1);
delay_ms(5);
temper = read_adc();
delay_ms(5);
luxsf=(float)luxs;
if(escala==0)//autoescala
{
if(luxs>=984)//fuera de rango
{
if(escn!=0)//diferente de rango r_10000
{
escn=escn-1;
if(modo==0x0f)
{f_escala_ext();}
else
{f_escala_usb();}
delay_ms(5);
set_adc_channel(0);
delay_ms(5);
luxs = read_adc();
delay_ms(5);
}
else
{
lcd_gotoxy(1,1);
lcd_putc(" FUERA DE RANGO ");
FR=1;
outbuffer[0]=0xff;
outbuffer[1]=0x40;
outbuffer[2]=0x0f;
usb_put_packet(1, outbuffer, 3, USB_DTS_TOGGLE);
}
}
else
{FR=0;
f_escala_usb();}
if(escn==0 && FR==0)
{
lcd_gotoxy(9,2);
lcd_putc("R 10000 ");
luxsd= (10.163*luxsf)+10;
if(luxs<=100)
{
escn=escn+1;
if(modo==0x0f)
{f_escala_ext();}
else
{f_escala_usb();}
delay_ms(5);
set_adc_channel(0);
delay_ms(5);
luxs = read_adc();
delay_ms(5);
}
}
if(escn==1)
{
lcd_gotoxy(9,2);
lcd_putc(" R 1000 ");
luxsd= (1.0071*luxsf)+10;
if(luxs<=90)
{
escn=escn+1;
if(modo==0x0f)
{f_escala_ext();}
else
{f_escala_usb();}
delay_ms(5);
set_adc_channel(0);
delay_ms(5);
luxs = read_adc();
delay_ms(5);
}
}
if(escn==2)
{
lcd_gotoxy(9,2);
lcd_putc(" R 100");
luxsd= (0.0916*luxsf)+10;
}
}
else
{}
vlux=(int32)luxsd;
temp= (int8)temper*0.48828125;
lux[0]=make8(luxs,0);
lux[1]=make8(luxs,1);
vizualizar();
switch (escn)
{
case 0:
lcd_gotoxy(9,2);
lcd_putc("R 10000 ");
break;
case 1:
lcd_gotoxy(9,2);
lcd_putc(" R 1000 ");
break;
case 2:
lcd_gotoxy(9,2);
lcd_putc(" R 100");
break;
}
}
void usb_com()
{
if (usb_enumerated())
{
if(ind==0)
{
on_pin(on_usb);
off_pin(off_usb);
}
else
{
on_pin(off_usb);
off_pin(on_usb);
}
warning=0;
if(usb_kbhit(1))
{
usb_get_packet(1, recib, 1);
if(recib[0]==0x31)
{
adquisicion();
outbuffer[0]=temp;
outbuffer[1]=lux[0];
outbuffer[2]=lux[1];
usb_put_packet(1, outbuffer, 3, USB_DTS_TOGGLE);
}
if(recib[0]==0x32)
{
//on_pin(r_100);
lcd_putc("\f");
enc=1;
}
if(recib[0]==0x33)
{
//off_pin(r_100);
lcd_putc("\f");
enc=0xfe;
}
if(recib[0]==0x34)
{
outbuffer[0]=0x0f;
outbuffer[1]=0x0f;
outbuffer[2]=0x0f;
usb_put_packet(1, outbuffer, 3, USB_DTS_TOGGLE);
ind=0;
}
if(recib[0]==0x35)
{
lcd_putc("\f");
enc=0xff;
ind=1;
}
if(recib[0]==0x36)
{
lcd_putc("\f Inicio de Insp");
lcd_putc("\nen Base de Datos");
delay_ms(2000);
lcd_putc("\f");
}
if(recib[0]==0x37)
{
lcd_putc("\f Termino Insp");
lcd_putc("\nen Base de Datos");
delay_ms(2000);
lcd_putc("\f");
}
}
}
}
void main()
{
setup_adc_ports(AN0_TO_AN1);
setup_adc(ADC_CLOCK_INTERNAL );
set_tris_a(0x03);
on_pin(off_usb);
off_pin(on_usb);
off_pin(r_100);
off_pin(r_1000);
on_pin(r_10000);
lcd_init();//inicializamos el USB
lcd_putc("\fLuxometroDigital");
lcd_putc("\n Mesalud Ltda");
while(true)
{
if(input(pin_b3)==1)
{escala=~escala;}
if (input(pin_c0) == 1)
{
if (input(pin_c1) == 1)
{
if(warning==0 && hini1==1)
{
outbuffer[0]=0xff;
outbuffer[1]=0x36;
outbuffer[2]=0x0f;
usb_put_packet(1, outbuffer, 3, USB_DTS_TOGGLE);
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;
off_pin(on_ext);
if(hini==0)
{
lcd_putc("\fLuxometroDigital");
lcd_putc("\n Mesalud Ltda");
}
hini=1;
if(hini1==0)
{
usb_init();
//usb_init_cs();
hini1=1;
}
}
if (hini==1)
{
if(input(pin_c2))
{
enc=~enc;
if(enc==1)
{
lcd_putc("\f");
lcd_gotoxy(8,2);
lcd_putc(" R 10000");
if(modo==0xf0)
{
outbuffer[0]=0xff;
outbuffer[1]=0x32;
outbuffer[2]=0x0f;
usb_put_packet(1, outbuffer, 3, USB_DTS_TOGGLE);
}
}
else
{
if(modo==0xf0)
{
outbuffer[0]=0xff;
outbuffer[1]=0x33;
outbuffer[2]=0x0f;
usb_put_packet(1, outbuffer, 3, USB_DTS_TOGGLE);
}
lcd_putc("\f");
}
}
delay_ms(200);
}
if(enc==1)
{
if (modo==0x0f)
{
on_pin(on_ext);
delay_ms(50);
adquisicion();
}
if(modo==0xf0)
{
off_pin(on_ext);
usb_task();
usb_com();
}
}
else
{
if(modo==0xf0)
{
off_pin(on_ext);
usb_task();
usb_com();
}
}
}
}
pero hay una parte del código, bueno especialmente la del principio que no puedo hacer que funcione, y es precisamente la del VID y PID del dispositivo que se conecta USB,
precisamente encontrjé el archivo en ccs llamado "Descriptor_easyHID", el cual creo que se ha generado precisamente con el easyHID (corrígeme si estoy mal)
pero resulta que en este computador tengo es windows 7 y vi que en un post anterior decías que este software no servía en este sistema operativo sino solo en XP.
eso lo hiciste con un 18f2550 cierto??