hola todos en el foro
espero puedan orientarme:
la idea es adquirir datos por adc y graficarlos en glcd. simple. controlando el tiempo de muestreo, el cual controla el timer.
1.-tengo un pic 18f4550 al que no le puedo asignar el valor al ccpx, de ninguna forma lo he podido hacer, mi intencion es usar el CCP_1=XXX y compararlo con el timer para resetearlo pero no puedo asignarlo y hace la cuenta de 16 bits, usando el ccp como (CCP_COMPARE_RESET_TIMER)
2.-tambien probe con setup_ccp2(CCP_COMPARE_RESET_TIMER|ccp_use_timer3); y usar el timer 3 me marca error (no sabe que es la instruccion apesar de estar declarada en el header del pic)...busque en todos lados en el foro pero tampoco encontre mucho.
en proteus no se ve que se muevan los registros de ccp para asignar los valores que yo quiero.
les mando el codigo que utilizo por si le ven algo rraro y porcierto el codigo funciona perfecto con un pic 16f877
//osciloscopio nahum 1/jun/2010
//
#include <18f4550.h>
#device ADC=10
#define CRYSTAL 20000000
#use delay(clock=CRYSTAL)
#fuses HS,NOWDT
#include <HDM64GS12.c>
#include <graphics.c>
#define CLOCKFREQ (0.25 * CRYSTAL) // clock es 1/4 de la frecuencia del cristal;
#define TimerCounts(seconds) ((int16) (CLOCKFREQ * (seconds) + 0.5))
int16 valor;
float tension;
#int_ad
void ad_int()
{
valor=read_adc(ADC_READ_ONLY);
CCP_2 =(TimerCounts (2e-4)); // Interrupt at 0.0002sec-5khz;
}
void main()
{
int8 xa=128,ya=0;
glcd_init(ON);
disable_interrupts(global);
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
setup_ccp2(CCP_COMPARE_RESET_TIMER);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
set_timer1(0);
CCP_2 =(TimerCounts (2e-4)); // Interrupt at 1 msec-1khz;
enable_interrupts(INT_AD);
enable_interrupts(global);
glcd_fillscreen(0);
glcd_line(1,63,1,1,1);
glcd_line(1,31,127,31,1);
do{
tension=(valor*5.0)/1024.0;
ya=1.0+12.6*tension;
glcd_pixel(xa,ya,1);
xa--;
if(xa<2)
{
xa=128;
glcd_fillscreen(0);
glcd_line(1,64,1,1,1);
glcd_line(1,31,128,31,1);
}
} while(true);
}
saludos y gracias desde ya.
