Hola a todos, escribo porque tengo un pequeño problema con la funcion read_adc(). Resulta que cuando llamo a la funcion, y le asigno el valor que esta devuelve a una variable (en mi caso se llama temp, y la declaro con long) solo le asigna la parte alta de los 10 bits, osea solo le asigna el registro ADRESH. No se porque ocurre esto. En consecuencia quise manipular los registros yo mismo, pero el complilador me da el error: Undefined identifier ADRESH.
Puedo ver los registros con el debug, y estaria convirtiendo bien el ADC, pero no puedo manipular bien el resultado de esa conversion. Dejo el codigo a continuacion. El pic es un 16F886
Alguien sabe porque me da error el compilador? o porque se asigna esa variable?
//------Directivas para el compilador--------
#Include <16F886.h> //PIC utilizado
#Fuses HS, NOWDT, NOPUT, NOBROWNOUT, NOCPD, NOPROTECT //Configuramos los fuses
#Use Delay (Clock=20000000) //Oscilador a 4Mhz
#Use Fast_Io(B) //Optimizamos E/S del PORTB
#Use Fast_Io(A) //Optimizamos E/S del PORTA
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#byte portb = 0x06
long Pulsos=0;
long temp=0;
void main(void)
{
//-----------------------configuramos la interrupciones------------------------------------------
disable_interrupts(global); //desactivo todas las interrupciones
//-----------------------configuro el timer 1--------------------------------------------------
setup_timer_1( T1_INTERNAL | T1_DIV_BY_1); //Defino como fente al clock interno
set_timer1(0); //cargo el timer0
enable_interrupts(INT_TIMER1);
//-----------------------configuro la Interrupcion Externa------------------------------------
enable_interrupts(INT_EXT);
ext_int_edge(L_TO_H);
//-----------------------Configuracion de ADC--------------------------------------------------
setup_adc_ports(sAN10);
setup_adc(ADC_CLOCK_DIV_32); //configura el converso
set_adc_channel(10);
//---------------------------//activo las interrupciones---------------------------------------
enable_interrupts(global);
set_tris_a(0b00000000);
set_tris_b(0b00000011);
set_tris_c(0b00000000);
while(true)
{
delay_ms(2000);
set_adc_channel(10);
delay_us(20);
temp=read_adc();
printf("%lu %lu\n\r",Pulsos,temp);
}
}
#int_ext
void Interrupcion_ext()
{
if(input(PIN_B0))
{
set_timer1(0);
ext_int_edge( H_TO_L );
}
else
{
Pulsos=get_timer1();
ext_int_edge( L_TO_H );
}
}
Desde ya muchas gracias. Saludos.-