Upload
lynhu
View
228
Download
0
Embed Size (px)
Citation preview
Taller de Firmware
Facultad de Ingeniería
Instituto de Computación
Técnicas de Manejo de E/S
Introducción (1/1)
• Los distintos tipo de dispositivos de hardware con los que se debe interactuar tienen particularidades que debemos contemplar.
• También los recursos de interfaz muchas veces son escasos por lo que hay que aprovecharlos al máximo y reutilizarlos de ser posible.
• Todo esto lleva al desarrollo de técnicas de manejo de dispositivos que deberán estar implementadas adecuadamente en el software.
Contenido
• Efecto Rebote
• Optimización de Entradas
• Optimización de Salidas
• Modulación por Ancho de Pulso
• Aspectos Mecánicos
• Efecto Rebote
• Ataque por hardware
• Ataque por software
Efecto Rebote
Aspectos Mecánicos (1/3)
• Las llaves y botones (incluyendo las “teclas”) son, normalmente, dispositivos mecánicos que cierran un circuito poniendo en contacto dos láminas metálicas.
• En el caso de las teclas actualmente se utilizan también otros tipos de métodos (ej: el capacitivo) que no presentan el fenómeno estudiado.
Aspectos Mecánicos (2/3)
Tomado del Catálogo de Cherry Corporation
Aspectos Mecánicos (3/3)
Tomado del Catálogo de Cherry Corporation
Efecto Rebote (1/3)
• Las láminas metálicas utilizadas en la
construcción de las llaves/botones poseen,
inherentemente, elasticidad.
• Por ello al intentar ponerlas en contacto se
genera un choque que produce un movimiento
en sentido contrario que aleja las láminas.
• Este proceso se repite hasta disipar la energía
cinética adquirida por la lámina móvil.
Efecto Rebote (2/3)
• Este fenómeno es conocido como efecto
rebote.
• El efecto se manifiesta en el hecho que el cierre
(apertura) del circuito no es instantáneo.
• Durante un cierto tiempo la llave (ó el botón)
oscila entre cerrado y abierto.
• El fenómeno se puede dar tanto al cerrar el
circuito como al abrirlo.
Efecto Rebote (3/3)
t
ON
OFF
Ataque por Hardware (1/4)
• La forma mas sencilla de minimizar el problema por hardware es mediante el uso de un circuito RC.
Tomado de www.embedded.com
Ataque por Hardware (2/4)
• El circuito RC si bien no evita el rebote, logra que no haya una oscilación entre cerrado y abierto.
• Esto se logra porque el condensador debe perder (ó ganar) su carga (a través de la resistencia) lo que demora un cierto tiempo.
• Esto “suaviza” la evolución en el tiempo del nivel de la entrada de la compuerta y permite que su salida no siga los vaivenes de la apertura y cierre de la llave.
Ataque por Hardware (3/4)
• Los valores de R1, R2 y C se eligen de forma que la constante de tiempo del circuito de carga ((R1+R2) * C) y descarga (R2 * C) sean similares al tiempo de establecimiento del contacto (el que demora la lámina móvil en detenerse).
Ataque por Hardware (4/4)
t
ON
OFF
0
1
Vin
Ataque por Software (1/5)
• Una de las formas de resolver el problema por software es con una técnica de “cambio de estado demorado”.
• Esta técnica consiste en cambiar el estado de la entrada conectada a la llave un cierto tiempo después que se haya detectado el primer cambio e ignorando todo cambio intermedio que haya.
• Ese tiempo debe ser superior al de establecimiento de la llave.
Ataque por Software (2/5)
• Ejemplo de código de implementación:
if (in(LLAVE) != valor_llave) {
delay(T_ESTABLECIMIENTO);
valor_llave = !valor_llave;
}
Ataque por Software (3/5)
• Otra forma de resolver el tema es por la técnica de “cambio de estado confirmado”.
• Consiste en cambiar de estado solamente luego que un cierto número de muestras periódicas y consecutivas de la entrada coincidan en un nuevo valor.
• El número de muestras se debe elegir en función de la frecuencia de muestreo y del tiempo de establecimiento de la llave.
Ataque por Software (4/5)
• Ejemplo de código de implementación (polling):if (in(LLAVE) != valor_llave){
cont = 0;
while ((in(LLAVE) != valor_llave) && (cont < MAX_CONT_REBOTE)) {
delay(T_MUESTRA);
cont++;
}
if (cont >= MAX_CONT_REBOTE)
valor_llave = !valor_llave;
}
Ataque por Software (5/5)
• Ejemplo de código de implementación (interrupción):void interrupt timer() {
if ((in(LLAVE) != valor_llave)&& (cont != 0)) {cont++;if (cont >= MAX_CONT_REBOTE) {
valor_llave = !valor_llave;cont = 0;
}} else {
if (in(LLAVE) != valor_llave)cont = 1;
elsecont = 0;
}
Resumen (1/1)
• El efecto rebote aparece en toda llave o botón (switch) implementado por medios mecánicos.
• Puede ser resuelto por hardware (típicamente mediante un circuito RC).
• Puede ser resuelto por software– por “cambio demorado”– por “cambio confirmado”
Optimización de Entradas
• Escasez de Puertos de E/S
• Codificación de Entradas
• Multiplexado en el tiempo
• Organización Matricial
• Precauciones a considerar
Escasez de Puertos de E/S (1/2)
• Los puertos de E/S son, normalmente, un recurso escaso en los microcontroladores.
• Es poco común encontrar microcontroladores que tengan más de algunas decenas de puertos.– 8, 16, 32 son números habituales
• Son además compartidos entre entrada y salida.– muchos microntroladores permiten elegir la
función de cada puerto por programación.
Escasez de Puertos de E/S (2/2)
• El problema es cuando tengo más señales lógicas de entrada a considerar que los puertos disponibles.
• Por ejemplo consideremos el caso de un teclado.– Aún si el teclado es solamente numérico se
necesitarían 10 entradas (una para cada tecla asociada a un dígito) y un par más para “aceptar” y “borrar”, por ejemplo.
– Un teclado de PC tiene más de 100 teclas.
Codificación de Entradas (1/5)
• Una forma directa de resolver el problema
sería la codificación de las entradas.
• De esta forma si tenemos N señales de
entrada precisaríamos:
puertos = log2 (N+1)
nota 1: α = parte entera superior de αnota 2: el 1 es para reservar un código (ej: el 0) para cuando no hay señal activa
Codificación de Entradas (2/5)
Mic
roco
ntro
lad
or
Co
dific
ado
r
PE1
PE0
D7
PE2 c
ba
D6D5D4D3D2D1
Señales
Codificación de Entradas (3/5)
• El problema fundamental de esta técnica es
que solamente puede identificar una señal de
entrada por vez.
• Si más de una señal de entrada se activa al
mismo tiempo la codificación que aparecerá
en los puertos de entrada dependerá de
cómo se realice el codificador, pero
probablemente sea errónea.
Codificación de Entradas (4/5)
• El siguiente es un circuito codificador sencillo,
pero que falla si hay dos señales activas a la
vez:
Codificación de Entradas (5/5)
• Este circuito codificador es más elaborado y
resuelve el problema de la simultáneidad
asignando jerarquía.
Multiplexado en el Tiempo (1/3)
• Una forma habitual de resolver el problema
de la escasez de puertos es reutilizando las
mismas entradas para distintas señales en
momentos de tiempo distinto.
• Esto se logra multiplexando las señales en
el tiempo.
• De esta forma un puerto de entrada estará
asociado a una señal diferente en cada
instante.
Multiplexado en el Tiempo (2/3)
• El ahorro se comprueba de la siguiente forma:– Supongamos que tengo 8 señales.
– Si no las multiplexara precisaría 8 puertos (de entrada) para manejarlas.
– Pero si las multiplexo me alcanza con 4 puertos• 3 de salida para seleccionar la señal a presentar
• 1 de entrada para recibir el valor
– Otra forma sería:
• 2 de salida para seleccionar una pareja de señales
• 2 de entrada para recibir los valores
Multiplexado en el Tiempo (3/3)
• En general para N señales se necesitan:
puertos = log2 N + 1
Mic
roco
ntr
olad
or
Mul
tiple
xorPS1
PS0
D7PS2
PE0 S
c
ba
D6D5D4D3D2D1D0
Señales
Organización Matricial (1/3)
• Para el caso particular de los teclados se
suelen emplear estrategias intermedias, en
función de la cantidad de puertos disponibles.
• El objetivo es simplificar el circuito externo,
evitando el uso de mutiplexores y/o
codificadores.
• Se utiliza el arreglo matricial de las teclas.
puertos = m + n, con m.n ≥ N
Organización Matricial (2/3)
• Veamos el ejemplo del teclado numérico:
– 10 teclas de dígitos
– 1 tecla de “Aceptar” y 1 tecla de “Borrar”
• Son 12 teclas en total.
• Se precisarían:
– 12 entradas (método directo)
– 4 (codificado)
– 5 (multiplexado en el tiempo estándar)
Organización Matricial (3/3)
• En el caso de la organización matricial vamos a
requerir 7 puertos en el ejemplo.
Mic
roco
ntro
lad
or
PS1
PS0
PS2
PE0
PS3
PE1
PE2
321
654
987
0 AB
Precauciones a Considerar (1/1)
• En el caso de utilizar codificación hay que
recordar que no se pueden detectar distintas
señales en forma simultánea, por lo que está
reservado a unos pocos casos particulares.
• En el caso de multiplexado en el tiempo, el
problema de simultaneidad no se da, pero la
frecuencia de muestreo debe ser
significativamente superior a la frecuencia
más alta de las señales de entrada.
Resumen (1/1)
• Los puertos de un microcontrolador son un
recurso escaso a cuidar.
• Para optimizar su uso se puede recurrir a
técnicas de codificación, multiplexado en el
tiempo ú organización matricial de las entradas.
• Cada técnica tiene sus limitaciones y
condiciones de aplicabilidad.
Optimización de Salidas• Escasez de Puertos de E/S
• Codificación de Codificación
• Multiplexado en el tiempo
– Latch Externo
– Ciclo de Trabajo
• Organización Matricial
• Precauciones a considerar
Escasez de Puertos de E/S (1/1)
• Al igual que en el caso de las entradas el
problema de contar con un número limitado
de puertos también se da con las salidas.
• El tipo de soluciones pasa más o menos por
los mismos lugares ya vistos, con algunas
particularidades por tratarse, en este caso, de
salidas.
Codificación de Salidas (1/3)
• Al igual que en las entradas es posible la
codificación de las salidas.
• De esta forma si tenemos N señales de
salida precisaríamos:
puertos = log2 (N+1)
nota 1: α = parte entera superior de αnota 2: el 1 es para reservar un código (ej: el 0) para cuando no hay ninguna salida activa
Codificación de Salidas (2/3)
Mic
roco
ntro
lad
or
Dec
odifi
cad
or
PS1
PS0
D7
PS2 c
ba
D6D5D4D3D2D1
Señales
Codificación de Salidas (3/3)
• El problema fundamental de esta técnica es
que solamente puede identificar una señal de
salida por vez.
• Si bien en este caso no hay problema de
error de codificación, la restricción de no
simultaneidad es mucho más restrictiva: sólo
puede haber una salida activa en cada
instante del tiempo.
Multiplexado en el Tiempo (1/3)
• En el caso de las salidas también es factible
el multiplexado en el tiempo.
• En este caso en cada instante un puerto de
salida tendrá el valor de una determinada
señal de salida.
• El principal problema aquí es cuando las
señales de salida deben ser persistentes en
el tiempo, o sea deben tener un nivel
constante.
Multiplexado en el Tiempo (2/3)
Mic
roco
ntro
lad
or
Dem
ulti
plex
or
PS1
PS0
D7PS2 c
ba
D6D5D4D3D2D1
Señales
PS3 G
Multiplexado en el Tiempo (3/3)
• Por esto es que normalmente la técnica de
multiplexado se acompaña de mecanismos
complementarios que viabilicen su uso:
- Latch Externo
- Ciclo de Trabajo
Multiplexado en el Tiempo
Latch Externo (1/2)
• En este caso se procede a colocar Flip-Flops
externos al microcontrolador para guardar los
estados de las señales de salida.
• Se puede usar el reloj del sistema para
sinronizar o se puede generar un flanco de reloj
mediante un puerto de salida del
microcontrolador
Multiplexado en el Tiempo
Latch Externo (2/2)M
icro
cont
rola
dor
Dec
odifi
cad
or
PS1
PS0
D7
PS2 c
ba
D6D5D4D3D2D1
Señales
D0
CE
D Q
CE
D Q
PS3
CLK
Multiplexado en el Tiempo
Ciclo de Trabajo (1/7)
• Otra forma muy habitual de multiplexar salidas
en el tiempo es utilizar algunas características
físicas de los fenómenos que se quieren
manipular con las señales de salida.
• Típicamente:
– constantes de tiempo térmicas en fenómenos de
transferencia de energía.
– persistencia de las retinas de los seres humanos.
Multiplexado en el Tiempo
Ciclo de Trabajo (2/7)
• Las mencionadas características están vinculadas al denominado “ciclo de trabajo”.
• Este parámetro caracteriza una onda cuadrada (o mejor dicho rectangular) y establece la relación entre la duración del estado “alto” respecto a la del ciclo completo en un período.
• Una onda cuadrada “perfecta” tiene un ciclo de trabajo del 50%.
Multiplexado en el Tiempo
Ciclo de Trabajo (3/7)
• El multiplexado en el tiempo con ciclo de
trabajo compensado, busca generar el mismo
valor medio de la señal en el ciclo completo.
• Si estoy multiplexando N señales, entonces el
valor de salida deberá ser N veces más grande
durante el “time-slot” que le corresponda a la i-
ésima señal, para compensar su falta en el
resto del ciclo.
Multiplexado en el Tiempo
Ciclo de Trabajo (4/7)
• Como muchos fenómenos físicos responden al
valor medio (o a la integral en el tiempo) de la
señal, entonces no ven afectado su efecto por
el uso del multiplexado.
• Ejemplo:– supongamos que tengo que entregar 50 Joules a
una resistencia para calentar un horno de precisión, usando una fuente de 5 Volts.
Multiplexado en el Tiempo
Ciclo de Trabajo (5/7)
– La forma directa es entregarle 10 A en forma constante en el tiempo.
• P = V.I = 5 V . 10 A = 50 Watts
• E = ∫ P dt = 50 Joules (en cada segundo)
– Si multiplexo en el tiempo la señal de “activación” del horno con otras 4, entonces ahora la función potencia tiene un valor P durante 200 ms y 0 durante 800 ms.
– Para que la integral siga valiendo lo mismo, entonces debe ser P = 250 W, lo que significa un valor 5 veces mas alto de corriente, I = 50 A.
Multiplexado en el Tiempo
Ciclo de Trabajo (6/7)
• Esto es efectivamente equivalente y funciona,
porque lo que importa es la integral en el
tiempo y no el valor instantáneo de la señal de
salida.
• Y esto es así en los fenómenos físicos que
impliquen capacidad de acumulación por parte
de los elementos intervinientes.
Multiplexado en el Tiempo
Ciclo de Trabajo (7/7)
• En el caso de lámparas y/o LEDs el fenómeno que se utiliza es similar, basado en la cracterística de persistencia del ojo humano.
• El ojo humano no es capaz de seguir el parpadeo de una fuente de luz que destelle a más de 20 y tantas veces por segundo.
• Esta característica es la que permite, entre otras cosas, la técnica del cine.
Organización Matricial (1/4)
• En algunos casos se utiliza la organización
matricial de las salidas, típicamente junto a la
técnica de multiplexado en el tiempo.
• Un ejemplo clásico es el de los displays de 7
segmentos, que se manejan con 7 salidas para
los segmentos y M salidas de activación, una
por cada display. – usa el hecho que los display son un conjunto de
LEDs con cátodo común.
Organización Matricial (2/4)
• En el caso de la organización matricial vamos a
requerir 10 puertos en el ejemplo.
Mic
roco
ntro
lad
or
PS1PS0
PS2
PS7
PS3
PS8
PS9
PS4PS5PS6
Organización Matricial (3/4)
• Un ejemplo más “radical” de organización
matricial y multiplexado en el tiempo es el que
utilizan los letreros en base a LEDs (usados en
aplicaciones de anuncios, por ej. en algunas
líneas de transporte colectivo).
• En este caso se codifican las columnas de LED
(se activa una por vez).– Al igual que en el caso anterior no se muestran las
resistencias limitadoras de corriente
Organización Matricial (4/4)
Mic
roco
ntro
lad
or
PS1PS0
PS2
PS8
PS3
PS9
PS10
PS4PS5PS6PS7
PS11PS12PS13PS14PS15
De
codi
fica
dor
Precauciones a Considerar (1/2)
• En el caso de utilizar manejo del ciclo de
trabajo se deben cuidar los valores máximos
de corriente que acepten los dispositivos
involucrados.
• Si bien en materia de disipación de calor no
hay cambio, el valor de pico de corriente es
mucho más alto, lo que puede no ser
soportado por los dispositivos.
Precauciones a Considerar (2/2)
• En el caso particular de LEDs ó lámparas
también hay que cuidar que la frecuencia de
muestreo sea superior a 25 Hz, de forma de
utilizar la persistencia del ojo.
• En términos generales la frecuencia de
muestreo debe ser coherente con las
constantes de tiempo de los sistemas
involucrados.
Resumen (1/1)
• Lo mismo que se ha analizado para los puertos
que actúan vale para los de salida.
• Las técnicas para su optimización son similares,
aunque su aplicación es más restrictiva.
• El muestreo con compensación del ciclo de
trabajo es una técnica muy utilizada que se
basa en la existencia de “inercia” en la
naturaleza, incluyendo el ojo humano.
Modulación Ancho de Pulso• Introducción a PWM
• Implementación Hardware
• Implementación Software
• Aplicaciones PWM– transmisión de información
– control de potencia
Introducción a PWM (1/5)
• La Modulación por Ancho de Pulso (PWM =
Pulse Width Modulation) es una técnica de
modulación que utiliza la modificación del
ciclo de trabajo de una onda rectangular.
• Esa alteración del ciclo de trabajo resulta en
la modificación del valor medio de la onda, en
forma proporcional a ese cambio.
Introducción a PWM (2/5)
t
V
00 TαT
Introducción a PWM (3/5)
• El valor medio de la señal es:
dada la forma de la onda:
1
0
( )T
Ts s t dt= ∫
1s TV V
Tα α = =
Introducción a PWM (4/5)
• Es decir el valor medio de la señal es
proporcional a la relación on-off de su ciclo
de trabajo (el “ancho” del pulso).
• Esta propiedad me permite, entre otras
cosas, codificar información en ese ancho.
Introducción a PWM (5/5)
• Existen tres tipos de PWM:
– Centrada: el pulso está centrado en la ventana de
tiempo correspondiente a un ciclo de la onda.
– Flanco Inicial: el pulso comienza junto con la
ventana de tiempo correspondiente al ciclo.
– Flanco Final: el pulso termina junto con la ventana
de tiempo correspondiente al ciclo.
Implementación Hardware (1/2)
• Es muy común que los microcontroladores dispongan de circuitos “timer” programables.
• Estos timers muchas veces permiten ser configurados como generadores de PWM.
• Para ello se le configuran los parámetros:
– período
– relación on/off
Implementación Hardware (2/2)
• Una forma de utilizarlos es programandolos
para que generen una interrupción cada vez
que lleguen al período.
• En la rutina de atención se procede a
escribirles un nuevo valor de relación on/off,
generando así la variación en el ancho del
pulso que se desee.
Implementación Software (1/3)
• Cuando no se dispone de un timer con PWM se puede recurrir a técnicas de software, ya sea “puras” o con el soporte de un “timer” común (sin PWM).
• Sin “timer”aux = in(SALIDA);
out(SALIDA, aux | 1);
ancho = (valor / VALOR_MAX) * T;
delay (ancho);
out(SALIDA, aux & 0xFE);
delay (T - ancho);
Implementación Software (2/3)
• Con “timer” en Programa Principalvoid interrupt timer() {
tics++;
}
tics_ancho = (valor / VALOR_MAX) * (T / Ptimer);
aux = in(SALIDA);
out(SALIDA, aux | 1);
tics = 0;
while (tics < tics_ancho);
out(SALIDA, aux & 0xFE);
while (tics < (T / Ptimer);
Implementación Software (3/3)
• Con “timer” en Rutina Interrupciónvoid interrupt timer() {
if (tics == 0) { aux = in(SALIDA);out(SALIDA, aux | 1);
}tics++;if (tics == (valor / VALOR_MAX) * (T / Ptimer)){
aux = in(SALIDA);out(SALIDA, aux & 0xFE);
}if (tics > (T / Ptimer))
tics = 0;}
Aplicaciones PWM (1/1)
• La técnica de modulación por ancho de pulso se aplica en diversas áreas.
• Si bien por ser una técnica de modulación se la puede utilizar para transmitir información, sus aplicaciones más habituales están en el campo de la electrónica de control, aplicada típicamente a motores y otro tipo de dispositivos que puedan ser controlados variando el valor medio de una magnitud (ej: la corriente o la diferencia de potencial).
Aplicaciones PWM
Transmisión de Información (1/3)
• Esta aplicación es la “directa” asociada al
concepto de modulación.
• La forma de onda transporta en sí misma
información codificada en el ancho del pulso.
• La forma de codificarla es la vista para generar
el pulso del ancho requerido (en función del
“valor” a codificar).
Aplicaciones PWM
Transmisión de Información (2/3)
• La decodificación requiere determinar el
comienzo del pulso y calcular el ancho relativo
del pulso respecto al período de la onda
rectangular original.
• Una forma sencilla de hacerlo es alimentar la
señal a decodificar a un puerto de entrada que,
además, genere una interrupción por flanco
ascendente.
Aplicaciones PWM
Transmisión de Información (3/3)
void interrupt senial() {tics = 0;termino_pulso = FALSE;
}void interrupt timer() {
if (((in(ENTRADA) & 1) == 0) && (!termino_pulso)) {valor = VALOR_MAX * (tics / (T / Ptimer));termino_pulso = TRUE;
}}
Aplicaciones PWM
Control de Potencia (1/5)
• En este caso se utiliza la proporcionalidad del
valor medio de la señal al ancho del pulso, para
controlar la potencia que se le aplica a un
dispositivo.
• La forma mas sencilla de pensar esto es
suponer que con la señal atacamos una “llave
electrónica” (ej. un transistor) para permitir el
pasaje de corriente solo durante el pulso.
Aplicaciones PWM
Control de Potencia (2/5)
• Esto generará que la reacción del dispositivo sea proporcional a la energía que está recibiendo y por tanto adapte su comportamiento a la misma.
• Ejemplos:– un calentador generará más ó menos calor
– un LED brillará más ó menos
– un motor girará más ó menos rápido (aplica a determinados tipos de motores)
Aplicaciones PWM
Control de Potencia (3/5)
• Para que esto sea efectivamente así se debe cumplir que la frecuencia de trabajo del PWM sea convenientemente alta.
• La mayoría de los sistemas físicos se comportan como un “pasabajos”, reaccionando al valor medio de la señal y no siguiendo los cambios instantáneos que se produzcan.
• La frecuencia de trabajo debe ser superior a la “frecuencia de corte” equivalente.
Aplicaciones PWM
Control de Potencia (4/5)
• En aplicaciones de precisión se debe tener presente que las curvas de comportamiento de los dispositivos muchas veces no son lineales.
• Ejemplo:– la iluminación de un LED no es siempre proporcional
a la corriente que lo circula, ya que su curva de respuesta no es una recta perfecta.
• Por esto si se requiere precisión se deben implementar factores de corrección.
Aplicaciones PWM
Control de Potencia (5/5)
• Los factores de corrección muchas veces son formulas en función del ancho relativo del pulso (α), del estilo:
f = cos(α . π/4)• Estas funciones se implementan como
tablas estáticas numéricas para no despediciar preciosos recursos de CPU haciendo el cálculo cada vez.
Resumen (1/1)
• La Modulación por Ancho de Pulso (PWM) es
una técnica muy utilizada a nivel de
microcontroladores.
• Permite tanto transmitir información (en
formato “digital”) como realizar el control de la
potencia aplicada a dispositivos que acepten
“filtrar” los cambios rápidos y reaccionen sólo
siguiendo los valores medio (de potencia,
corriente, voltaje, etc).
Preguntas