Lea cuidadosamente el siguiente documento y realice lo que se le pide:
Comencemos con la
instrucción “Button”, la cual es utilizada para la eliminación de rebotes en
pulsadores o para efectuar repeticiones en un botón, como sucede en el caso de
los teclados de las computadoras, en las cuales si dejamos presionado un botón
o tecla, la misma se repite indefinidamente a una frecuencia específica, la
cual puede ser variada fácilmente como lo demostraremos a continuación.
Antes de empezar, veamos la
sintaxis de la instrucción Button:
Button
Sintaxis: Button pin, estado, retardo,
rango, variable, acción, etiqueta
La instrucción “Button”
elimina los rebotes de un “pulsador” o “switch”, y genera auto-repetición.
Pin: especifica el pin del
puerto en el cual será conectado el pulsador.
Estado: indica cual es estado
lógico que debe ocurrir cuando el pulsador es presionado (0 o 1). Si es 0, el
pulsador deberá ser activo-bajo y si es 1, el pulsador deberá ser activo-alto
(Ver figura 1).
Figura 1
Retardo: es una variable o
constante (0 – 255) que especifica cuantos ciclos deben pasar antes de efectuar
la auto-repetición. Este campo tiene dos funciones especiales: si el campo
retardo es igual 0, no permite anti-rebote y no permite auto-repetición. Si el
campo retardo es igual a 255, permite el antirebote pero no permite la auto-repetición.
Rango: es una variable o
constante (0 – 255) que especifica el número de ciclos entre auto-repeticiones.
Variable: es una variable
auxiliar tipo Byte, definida también al inicio del programa para uso exclusivo
de la instrucción Button, por lo cual no deberá ser utilizada con otro fin en
el programa. Siempre debe ser inicializada antes del comando Button.
Acción: indica el estado del
botón cuando éste no es presionado.
Etiqueta: la instrucción realiza
un salto a la etiqueta definida en este campo cuando el pulsador no ha sido
presionado.
Adicionalmente
utilizaremos la instrucción “Pulsout” en el ejemplo, para generar pulsos de
tiempo definido.
PULSout
Sintaxis: PULSout pin, nivel, variable
La instrucción “PULSout”,
genera pulsos con una duración definida en decenas de microsegundos.
(Tiene una resolución de 10 microsegundos para un oscilador de 4 Mhz, y una
resolución de 2 microsegundos para un oscilador de 20 Mhz).
Para este trabajose
armarán tres ejemplos basados en el circuito de la figura 2.
Figura 2
Se puede observar en el
diagrama esquemático, que mientras el pulsador permanece abierto, hay un cero
lógico en el pin RB0, el cual debemos configurar como entrada en el programa.
Cuando el pulsador sea presionado, el estado lógico en el pin RB0 será un uno
lógico.
La salida a través de
la cual se van a generar los pulsos será el pin RB1, en el cual hemos conectado
un osciloscopio para poder ver el resultado de las señales generadas a partir
de las especificaciones dadas en cada ejemplo a continuación.
Para el primer ejemplo,
se pide generar un pulso de 1.5 milisegundos una vez presionado el botón.
Luego, pasados 20 milisegundos con el botón presionado, debe empezar una
auto-repetición de este pulso cada 10 milisegundos.
Veamos el siguiente programa:
Define Osc
4
TRISB = %11111101 ' Configuración del puerto B
A Var Byte
' declaración de la variable A para la instrucción Button.
A = 0 ' inicializa la variable A
PORTB.1 = 0 ' Inicializa la Salida RB0
Inicio:
Button PORTB.0,1,2,1,A,0,Tiempo
PulsOut PORTB.1,150 ' Genera un pulso de 1.5ms o 150 decenas de microsegundos.
Tiempo:
Pause 10 ' Pausa de 10 mili segundos
GoTo Inicio ' Salta a inicio
End
Ahora analicemos la secuencia del
programa:
· Mientras el pulsador
permanece abierto, la instrucción Button salta a la etiqueta especificada, la
cual en este caso hemos denominado “Tiempo”. Seguidamente el programa completa
el ciclo ejecutando las instrucciones que siguen, y finalmente retorna a la
etiqueta inicio.
· Si es presionado el
pulsador, se genera el primer pulso a través de la instrucción “Pulsout
PortB.1, 150” (figura 3), y el programa continúa su curso hasta completar el
primer ciclo. En este punto la auto repetición aún no comienza, ya que hemos
especificado en la instrucción Button, que ésta debe comenzar al terminar el
segundo ciclo:
Figura 3
Ejercicio
Genere un pulso de 2.5
milisegundos, con un tiempo para anti-rebotes en el pulsador de 30
milisegundos, y un tiempo entre cada auto-repetición de 10 milisegundos.