Autor Tema: Problema con ADC en CCS (16F886)  (Leído 2063 veces)

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

Desconectado Ranculche

  • PIC12
  • **
  • Mensajes: 74
Problema con ADC en CCS (16F886)
« en: 15 de Septiembre de 2014, 18:08:30 »
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.-
« Última modificación: 15 de Septiembre de 2014, 18:12:24 por Ranculche »

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Problema con ADC en CCS (16F886)
« Respuesta #1 en: 15 de Septiembre de 2014, 18:55:43 »
Hola Quizá te falte esto
#device adc = 10

Saludos

Desconectado Ranculche

  • PIC12
  • **
  • Mensajes: 74
Re: Problema con ADC en CCS (16F886)
« Respuesta #2 en: 15 de Septiembre de 2014, 19:02:45 »
Hola Diego, gracias por tu respuesta. Igualmente no se a que te referis con esa linea. Donde iria y para que seria. En el encabezado me da error el compilador. Gracias

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Problema con ADC en CCS (16F886)
« Respuesta #3 en: 15 de Septiembre de 2014, 22:34:24 »
Hola, esta directiva le define al PIC como formatear el conversor AD si a 8 o a 10 bit, que es como lo necesitas

Pon la línea luego de definir el PIC

Ejemplo:
#Include <16F886.h>
#device adc = 10

Saludos.