Autor Tema: Problema con conversor adc  (Leído 1479 veces)

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

Desconectado sancarajo

  • PIC10
  • *
  • Mensajes: 3
Problema con conversor adc
« en: 21 de Abril de 2012, 14:38:58 »
Buenas gente, les comento que he tenido unos problemas utilizando un pic16f876a programado con ccs puntualmente con el ADC. Copio parte del código y paso a comentar mis problemas:
Este es un pic que lee una señal analógica y de superar ciertos rangos me da un 1 en una pata, la cosa es que en un principio definí el set_adc_channel(0) para leer la pata RA_0 del pic y en el proteus andaba todo perfecto pero cuando lo voy a probar en la placa no leia nada, basandome en prueba y error llegue a que para poder leer una señal analógica en la pata RA_0 debo poner set_adc_channel(1) y anda perfecto... El tema es que no entiendo porque,¿ a alguien se le ocurre algo?
"Este es el main en donde configuro entre otras cosas el ADC"

//------------------------------------------------------------------------------
void main(void)
{
   trisA = 0b11111111;
   trisB = 0b10111101;
   trisC = 0b00000000;
   setup_timer_1 ( T1_INTERNAL|T1_DIV_BY_4 );
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_RB);
   enable_interrupts(INT_EXT);
   disable_interrupts(INT_TIMER1);
   setup_adc(ADC_CLOCK_DIV_8);
   setup_adc_ports( ALL_ANALOG );
   out = 0;
   set_adc_channel(1);
   delay_ms(100);
   do
   {
      if(interrupcion_rb == 1)
      {
         disable_interrupts(INT_RB);      
         while(superior == 0)
         {
            if( arriba == 0 && escritura == 1 )
            {
               modif(&ref_sup, 1);
            }
            else  
               if( abajo == 0 && escritura == 1 )
               {
                  modif(&ref_sup, -1);
               }
            imp_nro(ref_sup);
         }
         while(inferior == 0)
         {
            if( arriba == 0  && escritura == 1 )
            {
               modif(&ref_inf, 1);
            }
            else  
               if( abajo == 0  && escritura == 1 )
               {
                  modif(&ref_inf, -1);
               }
            imp_nro(ref_inf);
         }
         interrupcion_rb = 0;
         enable_interrupts(INT_RB);      
      }
   }
   while(TRUE);
}
//-------------------------------------------------------------------------------------------------

"Y esta es la parte donde se hace la lectura para el conversor"

//------------------------------------------------------------------------------
#INT_RB
void int_rb_change()
{
      if(piezo == 0)
      {
         while((aux = (read_adc() / 2.56)) > lectura)
         {
            lectura = aux;
         }
         if((int) lectura > ref_sup || (int) lectura < ref_inf )
         {
            out = 1;
            delay_ms(1000);
         }
         imp_nro(lectura);
         enable_interrupts(INT_RB);
         aux = lectura = 0;
      }
      else
      if(superior == 0 || inferior == 0)
      {
         disable_interrupts(INT_RB);
         interrupcion_rb = 1;
         enable_interrupts(INT_RB);
      }
}
//------------------------------------------------------------------------------


Desde ya muchas gracias, saludos.
« Última modificación: 24 de Abril de 2012, 12:02:04 por sancarajo »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema con conversor adc
« Respuesta #1 en: 21 de Abril de 2012, 18:36:48 »
  Supongo que será un error de typeo cuando decís que querés leer una señal analógica en el pin RB_0, habrás querido decir RA_0.
Porque los pines del puerto B no tienen entrada analógica.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado sancarajo

  • PIC10
  • *
  • Mensajes: 3
Re: Problema con conversor adc
« Respuesta #2 en: 24 de Abril de 2012, 11:59:57 »
Si si eso mismo, gracias por la corrección. Paso a corregir el mensaje origina. ¿Te pasó algo parecido a esto?