Comparadores analógicos «configuraciones», Pic C Compiler

En esta sección aprenderás a realizar diferentes aplicaciones, utilizando las diferentes configuraciones de los comparadores analógicos del microcontrolador PIC. Comparadores independientes con salida digital, comparadores con referencia común, comparadores con referencia de voltaje de módulo interno.

Comparador analógico

Un comparador analógico es un componente que compara dos señales analógicas y proporciona una salida que indica la relación entre las dos señales. En el caso de los microcontroladores PIC, los comparadores analógicos permiten comparar una tensión de referencia con una tensión analógica de entrada y generar una señal de salida en función de la relación entre ambas tensiones.

Los comparadores analógicos en los microcontroladores PIC se encuentran generalmente en los periféricos denominados «comparador de tensión analógico» o «comparador analógico». Estos comparadores suelen tener varias características comunes, como las siguientes:

  1. Múltiples entradas: Los comparadores analógicos en los microcontroladores PIC suelen tener dos o más entradas analógicas que se pueden seleccionar para la comparación.

  2. Tensión de referencia: Se puede establecer una tensión de referencia interna o externa que se utilizará como punto de comparación con la señal analógica de entrada.

  3. Salida digital: El comparador genera una salida digital que indica la relación entre la señal de entrada y la tensión de referencia. Por lo general, esta salida es un valor binario (alto o bajo) que puede ser utilizado por el microcontrolador para tomar decisiones.

  4. Histeresis: Algunos comparadores analógicos en los microcontroladores PIC ofrecen la opción de agregar histeresis, lo que ayuda a evitar cambios rápidos en la salida cuando la señal de entrada está cerca del valor de referencia.

Los detalles específicos sobre cómo configurar y utilizar los comparadores analógicos pueden variar según el modelo de microcontrolador PIC que estés utilizando. Para obtener información detallada y precisa, es recomendable consultar la hoja de datos y el manual de referencia del microcontrolador específico que estés utilizando.

Configuración de comparadores para el PIC18F4550.

Configuraciones

Un comparador independiente con salida digital.


setup_comparator(A0_A3_NC_NC_OUT_ON_A4);

Dos comparadores independientes con salidas digitales.


setup_comparator(A0_A3_A1_A2_OUT_ON_A4_A5);

Dos comparadores de referencia común con salidas digitales.


setup_comparator(A0_A3_A1_A3_OUT_ON_A4_A5);

Dos comparadores independientes.


setup_comparator(A0_A3_A1_A2);

Dos comparadores de referencia común.


setup_comparator(A0_A3_A1_A3);

Cuatro entradas multiplexadas a dos comparadores.


setup_comparator(A0_VR_A1_VR);

Cuatro entradas multiplexadas a dos comparadores.


setup_comparator(A3_VR_A2_VR);

Configuración del módulo de voltaje de referencia «CVref».


setup_vref(VREF_LOW | N°);

setup_vref(VREF_HIGH | N°);

Comparador con salida digital

Ejemplo:

Circuito de conexión

Procedimiento

Simplemente se habilita la función con la configuración del comparador que se utilizará. 

Código 


#FUSES NOMCLR

void main()
{
   setup_comparator(A0_A3_NC_NC_OUT_ON_A4);

   while(TRUE)
   {  
   

   }
}

Registros C1OUT y C2OUT

Los registro C1OUT y C2OUT se pueden leer como si fueran una variable creada, el valor dependerá de la comparación de las entradas de voltaje analógico.


C1OUT //registro del comparador 1

C2OUT //registro del comparador 2

Ejemplo:

Circuito de conexión

Código ejemplo: Registros C1OUT y C2OUT


#FUSES NOMCLR

#define comp1 pin_d0
#define comp2 pin_d1

void main()
{
   setup_comparator(A0_A3_A1_A2);
   while(TRUE)
   {  
   
      if(C1OUT) //si C1OUT es 1
      {
         output_bit(comp1,1);
      }else //si C1OUT es 0
      {
         output_bit(comp1,0);
      }
      
       if(C2OUT) //si C2OUT es 1
      {
         output_bit(comp2,1);
      }else //si C2OUT es 0
      {
         output_bit(comp2,0);
      }

   }
}

Invertir registros C1OUT y C2OUT

Se puede invertir el estado de los registros C1OUT y C2OUT. 


CP1_INVERT //invierte el registro C1OUT
CP2_INVERT //invierte el registro C2OUT

Código ejemplo: Invertir registros C1OUT y C2OUT


#FUSES NOMCLR

#define comp1 pin_d0
#define comp2 pin_d1

void main()
{
   setup_comparator(A0_A3_A1_A2 | CP1_INVERT | CP2_INVERT); //Registros C1OUT y C2OUT invertidos
   
   while(TRUE)
   {  
   
      if(C1OUT) //si C1OUT es 1
      {
         output_bit(comp1,1);
      }else //si C1OUT es 0
      {
         output_bit(comp1,0);
      }
      
       if(C2OUT) //si C2OUT es 1
      {
         output_bit(comp2,1);
      }else //si C2OUT es 0
      {
         output_bit(comp2,0);
      }

   }
}

Interrupción del comparador

La interrupción del comparador se activa por cualquier cambio en C1OUT y C1OUT.


   enable_interrupts(GLOBAL);
   enable_interrupts(INT_COMP);

Cuando se activa la interrupción, al final se debe resetear el comparador utilizado, para desactivar la interrupción.


#INT_COMP
void comparador()
{
   setup_comparator(Ax_Ax_Ax_Ax...);  
}

Código ejemplo: Interrupción del comparador


#FUSES NOMCLR

#define comp1 pin_d0
#define comp2 pin_d1

#INT_COMP
void comparador()
{
   if(C1OUT) //si C1OUT es 1
   {
      output_bit(comp1,1);
   }else //si C1OUT es 0
   {
      output_bit(comp1,0);
   }
   
   if(C2OUT) //si C2OUT es 1
   {
      output_bit(comp2,1);
   }else //si C2OUT es 0
   {
      output_bit(comp2,0);
   }
   
   setup_comparator(A0_A3_A1_A2); //Resetea el comparador y la interrupcion 
}


void main()
{
   setup_comparator(A0_A3_A1_A2);

   enable_interrupts(GLOBAL);
   enable_interrupts(INT_COMP);
   while(TRUE)
   {  

   }
}

Módulo de voltaje de referencia

Para los comparadores:


setup_comparator(A0_VR_A1_VR);

setup_comparator(A3_VR_A2_VR);

se debe configurar el voltaje de referencia «CVref» del modulo interno del PIC.

El numero correspondiente al voltaje se elije en las tablas antes vistas.


   setup_vref(VREF_HIGH | N°); // N° => voltaje de referencia

setup_vref(VREF_LOW | N°); // N° => voltaje de referencia

Ejemplo:

Circuito de conexión

Código ejemplo: Módulo de voltaje de referencia


#FUSES NOMCLR

#define comp1 pin_d0
#define comp2 pin_d1

void main()
{
   setup_comparator(A0_VR_A1_VR);
   setup_vref(VREF_HIGH | 0); // 1.25 volts de referencia

   while(TRUE)
   {  
   
      if(C1OUT) //si C1OUT es 1
      {
         output_bit(comp1,1);
      }else //si C1OUT es 0
      {
         output_bit(comp1,0);
      }
      
       if(C2OUT) //si C2OUT es 1
      {
         output_bit(comp2,1);
      }else //si C2OUT es 0
      {
         output_bit(comp2,0);
      }

   }
}

Scroll al inicio