Comparador Analógico - MC9S08QE128

De Wikitronica
Saltar a: navegación, buscar


Este artículo está incompleto. Necesita trabajo adicional. Revisar la discusión.


El módulo comparador analógico (ACMP) integrado proporciona un circuito para comparar dos tensiones de entrada analógicas o para comparar una tensión de entrada analógica con una tensión de referencia interna.

El MC9S08QE128 tiene dos comparadores analógicos independientes (ACMPs), llamados ACMP1 y ACMP2 respectivamente. Para explicar de manera general nos referiremos al comparador como ACMPx siendo x la representación del comparador 1 ó 2.


Funcionamiento de un Comparador

Breve explicación de la forma de trabajo de un comparador

Para este circuito, si la señal Vi(+) es mayor o igual a la señal Vi(-), la salida Vo será aproximadamente igual a Vdd. Pero si la señal Vi(+) es menor a Vi(-), la salida Vo será aproximadamente igual a Vss.


Comparador

Características

La ACMPx tiene las siguientes características:

  • Está diseñado para operar a través de la gama completa de la tensión de alimentación (rail-to-rail operation).
  • Posee una interrupción seleccionable en el flanco ascendente o descendente en la salida del comparador.
  • Posibilidad de comparar con un voltaje fijo interno de referencia de banda prohibida.
  • Opción para permitir que la salida del comparador sea visible en un pin digital.

Funcionamiento

Diagrama de bloques del ACMP.
El ACMPx tiene dos pines de entrada analógica ACMPx+, ACMPx- y un pin digital de salida ACMPxO que también puede ser configurado para habilitar un pin externo. El pin ACMPx+ se puede alimentar con un voltaje variable de o a 3V. El ACBGS se utiliza para seleccionar entre la tensión de referencia de banda prohibida o el pasador ACMPx + como la entrada a la entrada no inversora del comparador analógico.

La salida del comparador es alta cuando ACMPx+ es mayor que ACMPx-, y es baja cuando ACMPx+ es menor que ACMPx-. Esta salida se puede leer directamente a través de ACO o puede ser conducida al pin digital ACMPxO utilizando ACOPE.

El ACF se puede establecer en un flanco de subida o de bajada de la salida del comparador y se selecciona por medio del ACMOD.

Registro de Control y Estado (ACMPxSC)

El ACMPx posee un registro de 8 bits, que es usado para configurarlo.

NOTA: recordar que la x del ACMPx es porque en el MC9S08QE128 hay dos comparadores. Así que para configurar se debe sustituir la x por el número del comparador que se va a utilizar (1 ó 2).

Bits del ACMP.


Bits Descripción
7

ACME

Analog Comparator Module Enable: ACME es el habilitador del comparador analógico.

0 = ACMP no está habilitado.

1 = ACMP está habilitado.

6

ACBGS

Analog Comparator Bandgap Select: ACBGS selecciona entre la banda de referencia de voltaje interna o el pin ACMPx+ como valor para la entrada no inversora del comparador.

0 = Si el voltaje externo aplicado en ACMPx+ es usado como entrada el comparador.

1 = Si la banda de referencia de voltaje interna es usada como entrada del comparador.

5

ACF

Analog Comparator Flag: ACF se coloca en 1 cuando ocurre algún evento de comparación. Esta bandera se borra cuando se escribe 1 en ACF.

0 = No ha ocurrido un evento de comparación.

1 = Ha ocurrido un evento de comparación.

4

ACIE

Analog Comparator Interrupt Enable: ACIE es el habilitador de las interrupciones. Si el ACIE está en 1, la interrupción se ejecutará cuando cuando el ACF esté en 1.

0 = Interrupciones deshabilitadas.

1 = Interrupciones habilitadas.

3

ACO

Analog Comparator Output: en ACO se lee el valor de la salida del ACMP. El ACO puede ser reseteado a 0 y su lectura también puede ser 0 si el ACMP está deshabilitado (ACME = 0).
2

ACOPE

Analog Comparator Output Pin Enable: ACOPE permite colocar la salida del comparador en el pin externo ACMPxO.

0 = La salida del ACMP no está disponible en ACMPxO.

1 = La salida del ACMP se expulsada a ACMPxO.

1:0

ACMOD

Analog Comparator Mode: ACMOD selecciona el tipo de evento de comparación con el cual se colocará en 1 ACF.

00 = Codificación 0 – salida del ACMP flanco descendente.

01 = Codificación 1 – salida del ACMP flanco asscendente.

00 = Codificación 2 – salida del ACMP flanco descendente.

00 = Codificación 3 – salida del ACMP flanco asscendente o descendente.

Configuración

Referencia interna

Cuando se utiliza la tensión de referencia de banda prohibida para la entrada a ACMP1+ y / o ACMP2+, el usuario debe habilitar el buffer de hueco de banda mediante el establecimiento de SPMS [BGBE].

Modulador de pulso (TMP)

Los módulos ACMPx pueden ser configurados para conectar la salida ACMPxO del comparador analógico como entrada del canal de captura 0 del TPMx, esto se hace colocando ACICx en SOPT2. Si el ACICx está en 1, el pin no está disponible externamente independientemente de la configuración del TPMx. Para ver mayor información de como se configura el TPM ver (PWM (Modulación de Ancho de Pulso)).

Supresión del reloj

El bus del reloj de ambos ACMPs puede ser activado o desactivado mediante el bit SCGC2 [ACMP]. Este bit se coloca en 1 después de un reset, permitiendo la activación del bus del reloj. Para ahorrar energía, el bit SCGC2 [ACMP] se puede colocar en 0 para desactivar el reloj cuando no esté en uso. (para más información de cómo configurar el bus del reloj ver la Sección 5.7, “peripheral Clock Gating” del manual del MC9S08QE128 Reference Manual. Freescale).

Modos de Operación

Modo de Espera (Wait Mode)

Si el ACMP está activado antes de ejecutar la instrucción WAIT, continuará funcionando aunque se esté en modo de espera. Por lo tanto, se debe deshabilitar el ACIE, ya que por más bajo consumo de corriente el ACMP puede ser una fuente de interrupción.

Modo de Parada (Stop Mode)

El ACMP está deshabilitado en todos los modos de parada, independientemente de la configuración que tenía antes de ejecutar la instrucción STOP.

En los modos STOP1 y STOP2 el módulo ACMP estará totalmente apagado, tras la reactivación desde el STOP1 o STOP2, el módulo ACMP pasara a estar en estado de reposición.

En el modo STOP3 el circuito comparador del ACMP entrará a un estado de baja energía, impidiendo la ejecución de alguna operación de comparación. No hay registros que se vean afectados y los relojes dirigidos al ACMP se detienen. Si el STOP3 se sale con un reset, el ACMP se pondrá en estado de reset, por otro lado, si el STOP3 se sale con una interrupción, el ACMP continúa desde el estado en que se encontraba cuando se ejecuto la llamada STOP3.

Modo Segundo Plano Activo (Active Background Mode)

Cuando el microcontrolador se encuentra en Active Background Mode, el ACMP seguirá funcionando con normalidad.

Codificación

Por Interrupciones

El ACMP1 y ACMP2 comparten el mismo vector de interrupción, por lo tanto, si ambos módulos están habilitados se deberá sondear el registro ACF de cada uno para saber cuál fue el que causo la interrupción.

El vector de interrupción del ACMP es Vacmpx y se encuentra en la dirección 0xFFD6:0xFFD7 (High/low).

Lenguaje C

Para activar el ACMP, se de usar el vector de interrupción "void interrupt VectorNumber_Vacmpx ACMP_ISR(void)".

Un ejemplo de cómo se compara con la referencia de banda interna y prenda un led seria:

 void main(void) { //Función Principal.
   ACMP1SC = 0xD1; // Habilitación del modulo ACMP1. Seleccionada la banda de referencia interna.
                   // Habilitación de interrupción. Salida del comparador por flanco de subida.
   PTEDD = 0x01; // Configure el Puerto PTE como salida.
   PTED = 0x00; // Coloca 0 en el puerto PTE.
   
   for(;;) {// ciclo infinito
   }
 }
   
 void interrupt VectorNumber_Vacmpx ACMP_ISR(void) { //Vector de Interrupción.
    ACMP1SC_ACF = 1; // Borrar la bandera del ACMP1.
    PTED_PTED0 = 1; //  Prende PTE0.
 }

Ensamblador (Assembler)

El vector de interrupción se define de la siguiente manera:

 ;*************************************
 ;*    Vector de interrupcion         *
 ;*************************************            
  ORG   $FFD6         ; Posición en memoria donde se encuentra el vector de interrupción del ACMP.  
  DC.W  comparador    ; Rutina para comparar.

Un ejemplo de cómo se compara con la referencia de banda interna en assembler sería:

Inicialización el ACMP1:
  LDA  #$D1   ; Cargo en el acumulador el valor de la inicialización del registro ACMP1SC.
  STA ACMP1SC ; Guardo el valor en el registro.
  LDA  #$01   ; Cargo en el acumulador el valor para configurar el Puerto PTE como salida.
  STA PTEDD   ; Guardo el valor en el registro.
  LDA #$00    ; Cargo en el acumulador el valor para colocar 0 en el puerto PTE.
  STA PTED    ; Guardo el valor en el registro.

Vector de interrupción:
  comparador:  BSET ACMP1SC_ACF ; Borrar la bandera del ACMP1.
               BSET PTED_PTED0  ; Prende PTE0.
               RTI

Por Encuesta

Lenguaje C

Un ejemplo de cómo se compara con la referencia de banda interna y prenda un led sería:

 void main(void) { //Función Principal.
   ACMP1SC = 0xD1; // Habilitación del Módulo ACMP1. Seleccionada la banda de referencia interna.
                   // Habilitación de Interrupción. Salida del comparador por flanco de subida.
   PTEDD = 0x01; // Configura el Puerto PTE como salida.
   PTED = 0x00; // Coloca 0 en el puerto PTE.
   
   for(;;) {// ciclo infinito
   
      WHILE (ACMP1SC_ACF == 1){ //Ciclo de espera hasta que ocurra un evento de comparación.
          ACMP1SC_ACF = 1; //Borrar la bandera del ACMP1.
          PTED_PTED0 = 1; //  Prende PTE0.
      }
    }
 }


Ensamblador (Assembler)

Un ejemplo de cómo se compara con la referencia de banda interna prenda un led en assembler sería:

Inicialización el ACMP1:
  LDA  #$D1   ; Cargo en el acumulador el valor de la inicialización del registro ACMP1SC.
  STA ACMP1SC ; Guardo el valor en el registro.
  LDA  #$01   ; Cargo en el acumulador el valor para configurar el Puerto PTE como salida.
  STA PTEDD   ; Guardo el valor en el registro.
  LDA #$00    ; Cargo en el acumulador el valor para colocar 0 en el puerto PTE.
  STA PTED    ; Guardo el valor en el registro.

Se deberá revisar la bandera ACF para ver si ocurrió algún evento de comparación:

  ciclo: BRSET ACMP1SC_ACF,ACMP1SC,ciclo ;Ciclo mientras no ocurre algún evento de comparación.
    BSET ACMP1SC_ACF ; Borrar la bandera del ACMP1.
    BSET PTED_PTED0  ; Prende PTE0.

Referencia