Diferencia entre revisiones de «Comparador Analógico - MC9S08QE128»

De Wikitronica
Saltar a: navegación, buscar
(Ensamblador (Assembler))
(Ensamblador (Assembler))
Línea 172: Línea 172:
 
   LDA #$00    ; cargo en el acumulador el valor para colocar 0 en el puerto PTE
 
   LDA #$00    ; cargo en el acumulador el valor para colocar 0 en el puerto PTE
 
   STA PTED    ; guardo el valor en el registro
 
   STA PTED    ; guardo el valor en el registro
 
  
 
Vector de interrupción:
 
Vector de interrupción:

Revisión del 23:04 16 nov 2012

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.

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

Archivo:Diagrama de bloques.jpg
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 numero 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 interrupcion 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 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 interrupcion
   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 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; // 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 infinito mientras no ocurre algún evento de comparación */
   BSET ACMP1SC_ACF //borrar la bandera del ACMP1
   BSET PTED_PTED0 //prende PTE0

Referencia