Subido por tecnica

Clase 3 Interrupciones ADC

Anuncio
Interrupciones y Conversor
ADC²
En esta clase el alumno aprenderá a utilizar las
interrupciones y el uso del nuevo modulo
computacional del PIC16F1885.
Ing. Ariel Coria
INTRODUCCIÓN
Hay ocasiones en que los sistemas deben responder ante determinadas
situaciones con gran velocidad de respuesta. Ante estos eventos, que
necesitan el uso del procesador de manera rápida, se utiliza las
interrupciones.
El PIC16F18855 introduce un nuevo modulo computacional a la salida del
modulo ADC que nos permite tomar los resultados de la conversión y
realizar un pos procesamiento de los datos.
AGENDA
Interrupciones
Funciones
Flags y Registros
Interrupciones
Rutina de interrupción ISR
Conversor ADC con modulo Computacional(ADC²)
Características y modos de funcionamiento
Ejemplo de conversión en Múltiples canales
Maquinas de estados
Uso de maquinas de estados para multiplexar canales ADC
Interrupciones
Interrupciones
Una interrupción es un evento que permite interrumpir el flujo normal del programa
para ejecutar una rutina especial que atienda esa interrupción.
Existen dos métodos detectar la ocurrencia de un evento
Por Polling: Continuo checkeo de la ocurrencia del evento en varios puntos
del código
Interrupciones: Se interrumpe el flujo principal del programa si el evento
ocurre
La rutina que atiende dicha interrupción se la llama ISR(Interrup Service Rutine)
Las interrupciones pueden ser eventos internos o externos al PIC. Todos los periféricos
pueden generar eventos que interrumpan al procesador y algunos pueden despertar
el Microcontrolador del modo Sleep o de bajo consumo.
Todas las Interrupciones tienen las mismas prioridades
Interrupciones - Diagrama
//=====Main Routine===========
no interrupt
void main (void)
{
Main program
code
}
//==Interrupt Service Routine==
void interrupt isr (void)
{
Main( )
program
execution
ISR
completed
interrupt flag set
Interrupt Service
Routine (ISR)
}
Execute ISR( )
Interrupciones - Logica
TMR0IE
TMR0IF
Interrupt
INTE
INTF
IOIE
IOIF
TMR2IE
TMR2IF
GIE
ADIE
ADIF
Other peripherals
PEIE
Interrupciones - Registros
Las Interrupciones en el PIC cuenta con un Registro de control el cual habilita de
manera global las interrupciones y luego dos sets de registros los cuales uno habilitan
las interrupciones de periféricos y los otros contienen los flags indicadores de la fuente
de interrupción
INTCON:
bit 7
GIE
bit 0
PEIE
Enable Bits
Description
GIE
Global Interrupt Enable
PEIE
Peripheral Interrupt Enable
INTEDG
Interrupt Edge Select bit
INTEDG
Debe estar a uno para
utilizar cualquier
interrupción
Debe estar en uno
para utilizar las
interrupciones de
periféricos
Interrupciones - Registros
Luego tenemos dos SETs de Registros que habilitan las interrupciones de periféricos y
otro que contiene los flags, estos se denominan PIE(Peripheral Interrupt Enable) para
la habilitación y PIR(Peripheral Interrupt Request) para los indicadores.
PIE0 Register (Peripheral Interrupt Enables)
TMR0IE
IOCIE
INTE
PIR0 Register (Peripheral Interrupt Requests)
TMR0IF
IOCIF
Enable
Flag
Descripción
TMR0IE
TMR0IF
TMR0 Overflow Interrupt Flag bit
IOCIE
IOCIF
Interrupt-on-Change Interrupt Flag bit (read-only)
INTE
INTF
INT External Interrupt Flag bit
El PIC cuenta con PIE(0-8) y con PIR(0-8)
INTF
Salvado del contexto
Rutina de Interrupción(ISR)
Esta rutina es la encargada de ejecutar las tareas necesarias cuando se produce una
interrupción. Lo primero que hace es verificar cual fue la fuente de interrupción, luego
ejecuta la acción necesaria y termina borrando el flag de interrupción.
void interrupt sample_isr (void)
{
if (INTF)
{
//Realizar tareas de la interrupcion externa
INTF = 0;
}
if (TMR2IF == 1)
{
//Realizar tareas de la interupcion por TMR2
TMR2IF = 0;
}
if (CCP1IF = 1)
{
//Realizar tareas de la interrupcion por CCP1
CCP1IF = 0;
}
}
Interrupciones - Ejemplo
Conversor ADC²
ADC con modulo computacional
El Microcontrolador PIC16F18855 es uno de los primeros modelos de micro que
incluyen el nuevo periférico ADC² el cual agrega a la salida del conversor AD un
modulo de pos-procesamiento por Hardware.
Con este modulo podemos calcular el valor medio de las conversiones o generar un
filtro pasa-bajos.
Los modos de Funcionamiento son:
Modo Básico
Modo Acumulador
Modo Promediado
Modo Burst Promediado
Modo Filtro Pasa Bajo
Además posee un modulo Comparación el cual puede calcular el error a la salida y
compararlo con un umbral de valores ajustables.
ADC con modulo computacional
Sección Comparador
Conversor 10-bit
ADCALC<2:0>
Sección Acumulador
ADTMOD<2:0>
ADERR
ADC
Threshold
Logic
ADRES
Set
Interrupt
flag
Error
ADFILT
Average/Filter
Calc.
1
0
ADPSIS
ADPREV
ADSTPT
ADUTHR
ADLTHR
ADC² Modos de Funcionamiento
Modo Básico: Este modo mantiene compatibilidad con los módulos ADC de otros
micros, en donde se desactivan las funciones de acumulación y promedio. Si es posible
utilizar el comparador en este Modo.
Modo Acumulador: En este modo, las conversiones se van acumulando en un registro
de 16bits llamado ADACC. Por cada conversión, un registro contador incrementara su
valor, el ADCNT(los valores que puede tomar van de 0 a 255 donde se satura). El valor
acumulado puede desplazarse a derecha, lo que equivale a dividir por 2 en cada
corrimiento. El resultado del desplazamiento se almacena en el registro ADFLTR.
Modo Average(Promediado): Es similar al modo Acumulador, en los registros ADAC se
acumula las conversiones y en ADCNT se cuenta el numero de conversiones. Cuando el
ADCNT(cantidad de conversiones) es igual al registro ADRPT(Repeat Setting Registers)
en el registro ADFLTR se almacena el valor promedio. Luego el acumulador y el registro
ADCNT se resetean para volver a calcular el siguiente valor.
ADC² Modos de Funcionamiento
Modo Burst Average: Del mismo modo que el modo promediado, aquí también se
calcula el promedio de una cantidad de muestras. A diferencia del modo anterior, aquí
un simple disparo genera las cantidades de conversiones de manera automática para
alcanzar los datos necesarios y calcular el valor promedio.
Modo Filtro Pasa-Bajo: un filtro pasa-bajo permite dejar inalterables las señales cuya
frecuencia sea menor a una frecuencia de corte y atenúa las señales que estén por
encima de esa frecuencia de corte. El valor del registro ADCRS determina el orden del
filtro y la frecuencia de corte se calcula mediante una constante radian con la cual se
obtiene una caída de ganancia a -3dB.
ADC² Umbrales de Comparación
La salida del pos-procesamiento puede configurarse para obtener un valor del Error de
Calculo y este valor pasar por un comparador al cual puede configurarse los valores
umbrales. Por este modulo pasan los siguientes registros:
ADRES: ADC Result register
ADPREV: ADC Previous Result register
ADSTPT: ADC Threshold Setpoint register
ADFLTR : ADC Filter register
ADC² Interrupción por comparación
El valor del Error de calculo obtenido por el modulo es almacenado en el registro
ADERR que luego es comparado por el valor de umbral Bajo y Alto.
Según como se configure el modulo, el resultado de la comparación se muestra en el
bit ADTIF y si esta habilitado, puede generar una interrupción
Conversor ADC² - Ejemplo
Maquina de Estados Finita
(FSM)
Maquina de Estados Finita(FSM)
Una Máquina de Estado Finita (FSM = Finite State Machine) se basada en la idea de
que hay un número finito de estados para un sistema determinado.
Las máquinas de estado requieren una Variable de Estado (State Variable - SV). La
variable de estado es un apuntador que mantiene un control del estado en que se
encuentra el microcontrolador y dirige el flujo del programa al modulo de software
correspondiente.
La variable de estado puede modificarse
en los módulos (o estados) de software
por si misma o por una función externa
Partes que componen una FSM
Una Maquina de estados Finita están compuesto por las siguientes partes:
Estados: Son las diferentes situaciones en las que puede encontrarse el sistema.
Entradas: Constituyen los acontecimientos o eventos que producen los cambios de
estado.
Salidas: Respuesta del sistema ante los cambios en entradas.
Funciones de Transición de estado: Descripción detallada, para cada estado, de cuál es
el siguiente estado y la salida del sistema, cuando se producen las distintas entradas.
Representación de una FSM
Las formas de representarlos es por medio de diagramas o grafos de estados.
Cada Estado se representa por un circulo.
Cada transición se representa por flechas. Según sea la maquina, la salida puede estar
definida en el estado o en la transición.
More: La salida esta definida únicamente por el estado
Mealy: La salida esta definida por el estado y las entradas.
E
A/
S1
E/S
B/
S2
Transición entre el estado
A y el B desde una
maquina de Moore
A
B
Transición entre el estado
A y el B desde una
maquina de Mealy
Diseño de una FSM
Comenzar con el diseño de los estados necesarios del sistema. Luego identificar cual
será el primer estado
En cada uno de los estados se debe responder la siguiente pregunta: ¿Que condición
se necesita para salir de este estado y que estado es el siguiente?
Dependiendo de lo que suceda en un estado en particular, la variable de estado se
incrementa o decrementa con el objetivo de pasar o saltar al siguiente estado.
Una vez definidas las interrelaciones de los estados y las entradas, pasar esto a un
diagrama, se puede elegir entre un diagrama de Mealy o Moore.
Pasar el diagrama a la implementación en lenguaje C.
Implementación en Código C
La implementación de una maquina de estados en lenguaje C, es muy fácil ya que se
hace uso de la sentencia Switch, el siguiente código muestra como se aplica este
concepto:
switch (state)
{
case (STATE0): // Ejecucion Estado 0
break;
case (STATE1): // Ejecucion Estado 1
break;
case (STATE2); // Ejecucion Estado 2
break;
// ... y así continuamos
default:
state = STATE0 //Si por alguna razón un estado
//indefinido ocurre
}
FSM – Multiplexado ADC
Ejemplo
Diagrama de Estado – Ejemplo ADC
Inicio
…/Inicio Conversión
Convirtiendo
…/Iniciar nueva
conversión
ADC busy/…
ADC Libre/Guardar Resultado Conversión,
Multiplexar canal
Fin Conversión
Diagrama de Estado – Ejemplo ADC
switch (state)
{
case (ADC_STATE_START): // Estado 0
break;
case (ADC_STATE_CONVERT): // Estado 1
break;
case (ADC_STATE_END_CONVERTION); // Estado 2
break;
default:
state = ADC_STATE_START //Si por alguna razón un
// estado indefinido ocurre
}
CONSULTAS
ariel.coria@mcelectronics.com.ar
The Microchip name and logo, the Microchip logo, dsPIC, FlashFlex, KEELOQ, KEELOQ logo, MPLAB, PIC, PICmicro, PICSTART, PIC32 logo, rfPIC, SST, SST Logo,
SuperFlash and UNI/O are registered trademarks of Microchip Technology Incorporated in the U.S.A. and other countries. All other trademarks mentioned
herein are property of their respective companies.
Descargar