0% encontró este documento útil (0 votos)
22 vistas6 páginas

Práctica 5

Cargado por

Juan Díaz
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
22 vistas6 páginas

Práctica 5

Cargado por

Juan Díaz
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

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/

También podría gustarte