LabMIyL - MieV4 - 6,8 - E2 - P5
LabMIyL - MieV4 - 6,8 - E2 - P5
LabMIyL - MieV4 - 6,8 - E2 - P5
• Añadir dos botones para que uno incremente el número en el display +1 y el otro
lo decremente en -1.
• Es necesario agregar un tope para que el número no pueda disminuir de 0 o
aumentar de 9.
En esta práctica solo hablaremos del debounce por software, sin embargo el debounce
por hardware es comunmente usando en la indutria, pues existen modulos ya listos para
eso, siendo una opcion eficiente y potente para evitar el rebote
Sin embargo, como desventaja, el debounce por software puede incrementar levemente
el tiempo de ejecución y la complejidad del código. Esto se debe a la necesidad de
introducir mecanismos de temporización y control para gestionar los cambios de estado
del switch de manera confiable. Además, si no aplicamos el código correctamente, existe
el riesgo de ignorar interrupciones "verdaderas" o cambios de estado legítimos del
switch, lo que podría afectar la funcionalidad del sistema.
La forma más sencilla de aplicar un debounce por software es comprobar el tiempo entre
disparos de la interrupción. Si el tiempo transcurrido entre dos cambios de estado es
inferior a un determinado umbral de tiempo (threshold), simplemente ignoramos la
interrupción. Esto establece una especie de "zona muerta" en la que se desestiman las
interrupciones generadas por el switch durante ese período, lo que contribuye a la
estabilidad y confiabilidad de la detección de cambios de estado.
Precio Precio
Cantidad Descripción
unitario total
1 Tarjeta de Desarrollo arduino 600 600
1 Fuente de voltaje CD +5V 300 300
1 Protoboard 70 70
9 Resistencias 3 27
1 Display 7 Segmentos 20 20
2 Push bottom 5 10
Conductores: Estos materiales tienen una resistencia eléctrica muy baja, lo que permite
que los electrones se muevan fácilmente a través de ellos. Ejemplos de conductores son
la plata, el cobre, el oro y el aluminio. Aislante: Por el contrario, los materiales aislantes
tienen una alta resistencia eléctrica y restringen el flujo de electrones. Ejemplos de
aislantes son el caucho, el papel, el vidrio, la madera y el plástico.
/*
* Práctica 5.c
*
* Created: 12/10/2023 02:06:18 p. m.
* Author : Javie
* Docente: Jesús Daniel Garza Camarena
*
* Equipo 2
*
* Marcos Ezequiel Cervantes Castro #1953168 N.L: 6
* Javier Osmar Covarrubias Bautista #1958896 N.L: 8
* Brigada: 315
* Dia y hora: Miercoles, V4
*
* Fecha: 20/10/2023
*/
#include <avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>
//--Constantes
#define DELAY 5
//--Inputs
#define SWITCH_DDRX DDRC
#define SWITCH_PORTX PORTC
#define SWITCH_PINX PINC
#define SW_0 PINC1
#define SW_1 PINC2
//--Outputs
//---Puertos para segmentos A a G
#define DISPLAY_DDRX DDRD
#define DISPLAY_PORTX PORTD
#define DISPLAY_DDRX2 DDRB
#define DISPLAY_PORTX2 PORTB
//----Segmento A
#define SEG_A PORTD2
#define SEG_A_ON DISPLAY_PORTX |= _BV(SEG_A);
#define SEG_A_OFF DISPLAY_PORTX &= ~_BV(SEG_A);
//----Segmento B
#define SEG_B PORTD3
#define SEG_B_ON DISPLAY_PORTX |= _BV(SEG_B);
#define SEG_B_OFF DISPLAY_PORTX &= ~_BV(SEG_B);
//----Segmento C
#define SEG_C PORTD4
#define SEG_C_ON DISPLAY_PORTX |= _BV(SEG_C);
#define SEG_C_OFF DISPLAY_PORTX &= ~_BV(SEG_C);
//----Segmento D
#define SEG_D PORTD5
#define SEG_D_ON DISPLAY_PORTX |= _BV(SEG_D);
#define SEG_D_OFF DISPLAY_PORTX &= ~_BV(SEG_D);
//----Segmento E
#define SEG_E PORTD6
#define SEG_E_ON DISPLAY_PORTX |= _BV(SEG_E);
#define SEG_E_OFF DISPLAY_PORTX &= ~_BV(SEG_E);
//----Segmento F
#define SEG_F PORTD7
#define SEG_F_ON DISPLAY_PORTX |= _BV(SEG_F);
#define SEG_F_OFF DISPLAY_PORTX &= ~_BV(SEG_F);
//----Segmento G
#define SEG_G PORTB2
#define SEG_G_ON DISPLAY_PORTX2 |= _BV(SEG_G);
#define SEG_G_OFF DISPLAY_PORTX2 &= ~_BV(SEG_G);
//--Funciones
void init_ports(void);
void show_number(uint8_t x);
uint8_t RisingEdge(uint8_t pin);
//--Variables
uint8_t EstadoActual = 0;
uint8_t EstadoAnterior = 0;
int main(void)
{
init_ports();
uint8_t contador = 0;
while (1)
{
show_number(contador);
if (RisingEdge(SW_0) && contador < 9)
{
contador++;
_delay_ms(DELAY);
}
if (RisingEdge(SW_1) && contador > 0)
{
contador--;
_delay_ms(DELAY);
}
}
}
void init_ports(void)
{
//--Inputs
SWITCH_DDRX &= ~(_BV(SW_0) | _BV(SW_1));
//--Pull Up
SWITCH_PORTX |= _BV(SW_0) | _BV(SW_1);
//--Outputs
DISPLAY_DDRX |= _BV(SEG_A) | _BV(SEG_B) | _BV(SEG_C) | _BV(SEG_D)
| _BV(SEG_E) | _BV(SEG_F);
DISPLAY_DDRX2 |= _BV(SEG_G);
}
Fotografía del prototipo armado solo el área útil (no se permite el uso
de jumpers) (10 puntos)