Universidad Autónoma de Baja California
Facultad de Ciencias Químicas e Ingeniería
Microcontroladores
Práctica 5
Docente: Ricardo Castro González
Alumno: Diaz Medina Juan Jesus
Matricula: 1288487
Tijuana, Baja California a 12 de abril de 2024
Práctica 5
i. Uso de puertos para juego con LEDs
Objetivo:Manejo de lógica de un juego haciendo uso de un retardo.
Equipo: - Computadora Personal
Teoría:
- Técnicas anti-rebote de botones
Descripción:
• Implementar el juego de simón dice con base al esquemático de la
Fig. 1 y elcódigo proporcionado en el repositorio.
Figura 1. Esquemático
Funciones a implementar:
void initIO(void)
Inicialización requerida de los puertos utilizados en esta práctica, según la Fig. 1.
eButtonState_t checkButtons(eButtonId_t *buttonNumber)
Retorna el ID del botón detectando y su possible estado eBtnUndefined,
eBtnShortPressed y eBtnLongPressed. Donde el umbral para una larga duración es
cualquiera que sea mayor a 1 segundo. Es importante ignorar el rebote mecánico, un
ejemplo de este rebote se puede apreciar en la Fig 2
bool playSequence(eGameState_t gameState)
Muestra el patrón actual que refleja el estado del juego. Estos estados son los siguientes:
eWaitForStart:
Sequencia de walking-zero del LED de mas a la izquierda al LED de mas a la derecha,
actualizándose cada 500 ms (s0=0b11111, s1=0b01111, …, s4=0b11110, y repetir)
eOngoingGame:
Despliega la secuencia hasta el nivel actual mas uno (s + 1).
eWaitForPlayer:
En este estado el LED refleja el estado del botón correspondiente, es decir si SW1 es
precionado, D1 es encendido.
eYouWin:
Sequencia de walking-one del MSB al LSB con rebote, actualizándose cada 250 ms
(s0=0b0001, s1=0b0010, …, s3=0b1000, s4=0b0100, s6=0b0010 y repetir), repetir 3
veces. Seguido por una secuencia que alterna todos los LEDs, se encienden y apagan
simultáneamente alternando cada 250 ms, repetido 3 veces
eYouLose:
Secuencia que alterna todos los LEDs, se encienden y apagan simultáneamente
alternando cada 1000 ms, repetido 3 veces.
Nota: Es importante tener en cuenta que ninguna de las dos funciones anteriores
debe bloquear la tarea, ya que que ambas deben aparentar que están corriendo al
mismo tiempo. Para lograr esto, hacer uso de la variable global de mili-segundos.
Teoría: Técnicas Anti rebote
Se conoce como rebote a la propiedad de los botones y switches mecánicos en la que se introduce
ruido eléctrico en la señal cuando estos son encendidos o apagados. El ruido causado por rebote es
indeseado ya que puede ocasionar una lectura incorrecta de la señal. Este tipo de error ocurre en
todos los microcontroladores y dispositivos digitales.
Ilustración 1. Rebote mecánico en un botón
Anti rebote por software
Este tipo de anti rebote se lleva a cabo tomando múltiples mediciones de la señal de entrada y
determinando si la señal debe o no tomarse como correcta dependiendo de si se recibieron múltiples
señales en un periodo corto de tiempo. Por ejemplo, si se reciben dos señales de ENCENDIDO, y el
tiempo entre estas dos señales es mayor a la duración promedio del ruido introducido por el rebote,
entonces es seguro decir que la señal de entrada es de ENCENDIDO. Normalmente dos mediciones
de la señal son suficientes para conseguir un anti rebote efectivo.
Anti rebote por hardware
La manera mas simple de crear un anti rebote en hardware es agregar un capacitor al circuito, esto
con el objetivo de impedir cambios bruscos en voltaje creador por el rebote y permitir que el cambio
se de en una curva suave y gradual. El valor del capacitor dependerá del voltaje de operación,
corriente, etc.
Ilustración 2. Ejemplo de un circuito anti rebote con capacitor
Comentarios y Conclusiones
En esta practica se creo un programa en AVR capaz de ejecutar el juego de Simón dice. Esta
práctica involucro la integración de todos los temas vistos hasta ahora en el curso de
microcontroladores, en particular el uso y configuración de puertos tanto de entrada como de salida.
Una nueva técnica sobre la que se tuvo que aprender fue el anti rebote por software. Hasta ahora no
se hacia trabajado con componentes mecánicos como botones, por lo tanto, no se conocía sobre la
problemática del rebote y fue un tema sobre el que se tuvo que investigar.
Otra consideración que se tuvo que tomar en cuenta fue que al tratarse de un juego que tiene que
checar constantemente si el jugador esta presionando botones fue necesario manejar toda la lógica
del programa sin ningún tipo de loop y aprender a controlar el flujo del programa de esa manera.
En general, fue una práctica larga y difícil pero que permitió integrar los conocimientos adquiridos
hasta ahora en el curso y aprender sobre un par de temas nuevos para futuras prácticas.
Bibliografía y Referencias
Diligent Reference (s.f.) Debouncing via Software. Obtenido de:
https://digilent.com/reference/learn/microprocessor/tutorials/debouncing-via-software/start
The Geek Pub (2019) Debouncing a Switch in Hardware or Software. Obtenido de:
https://www.thegeekpub.com/246471/debouncing-a-switch-in-hardware-or-software/