Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Act Fund 2 Contador de Int Con Barrido

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 10

UNIVERSIDAD AUTÓNOMA DE NUEVO LEÓN

FACULTAD DE INGENIERÍA MECÁNICA Y ELÉCTRICA

Diseño de Sistemas Embebidos


Docente: Dr. Héctor Gilberto Barrón González

Actividad Fundamental 2: Contador de Interrupciones con Barrido


en Displays.

Nombre: Carlos Alberto Vidales Soto Matricula: 1732937

Hora: V1 – V3 Salón: 7215


Brigada: 007 Plan: 401
Contenido
1.- Descripción del Problema .............................................................................................................. 3
2.- Objetivo .......................................................................................................................................... 3
3.- Diagrama de Flujo Propuesto......................................................................................................... 3
4.- Diagrama de la Implementación del Circuito (Si fue requerido) ................................................... 5
5.- Evidencia Grafica (Si existe un circuito) ......................................................................................... 6
6.- Prototipos de funciones principales .............................................................................................. 7
1.- Descripción del Problema

Utilizando dos displays de 4 dígitos de ánodo común se generará un barrido generando


persistencia visual en los displays. Para ello se utilizará un CI 74238 para controlar el ánodo
que enciende cada digito y un CI 7447 para generar el número que se escribirá en cada
digito. Para lograr el funcionamiento adecuado siga las siguientes instrucciones:
1.- Desarrolle el código necesario para enviar un número y su correspondiente señal de
activación en el lugar que le corresponda del display.
2.- Genere el efecto de persistencia visual de forma simultánea en los 8 dígitos del display.
3.- Programe una interrupción externa la cual deberá incrementar en uno el valor de una
variable cada vez que sea ejecutada.
4.- Conecte un microswitch a una terminal con interrupción externa para generar una
interrupción, verifique el nivel lógico al que se genera la interrupción.

2.- Objetivo
 Armar un circuito con 2 display 7 segmentos 4 dígitos junto con los integrados CD74238 y
SN74LS47.
 Mostrar un incremento generado por una interrupción producida por un microswitch para
los números en los displays.

3.- Diagrama de Flujo Propuesto


Diagrama de Flujo de la interrupción externa
4.- Diagrama de la Implementación del Circuito (Si fue requerido)
5.- Evidencia Grafica (Si existe un circuito)
6.- Prototipos de funciones principales
 Void displayNumber(): Es la función encargada de obtener el número que luego se
mostrará.
 Void setDisplay(): Con esta función se muestran los números en cada dígito.
 Void SysInit(void): Carga la configuración del sistema.
 Void SystemClock_Config(): Carga la configuración del reloj.
 Static void MX_GPIO_Init(): Carga e inicializa los pines configurados de la tarjeta.
 void EXT1_IRQHandler(void): Con esta función se trabaja la interrupción externa para los
display.

La configuración de periféricos

 Línea 1. y 2.- Se activa la configuración de reloj de los puertos C y D


 Líneas 4 - 11 - Declaración de los dígitos de los displays en base a su peso.
 Línea 12.- Declaración de la variable contador.
 Línea 13. y 14.- Funciones displayNumber y setDisplay, estas funciones son con las que se
van a
 trabajar los dígitos de los displays
1. #define GPIOD_CLOCK (1<<3)
2. #define GPIOC_CLOCK (1<<2)
3. int D1=0x70;
4. int D2=0x60;
5. int D3=0x50;
6. int D4=0x40;
7. int D5=0x30;
8. int D6=0x20;
9. int D7=0x10;
10. int D8=0x00;
11. int counter;
12. void displayNumber(int numero);
13. void setDisplay(int dig1, int dig2, int dig3, int dig4, int dig5,
14. int
15. dig6, int dig7, int dig8);
16. int numeros[10]={0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9};
Prototipos principales

 Línea 17.- Inicialización del sistema.


 Línea 18.- Inicialización del reloj de la tarjeta.
 Línea 19.- Inicialización de los pines de entrada y salida.
 Línea 21.- Función principal.
 Línea 22.- Reset de los periféricos.
 Línea 24.- Carga la configuración del reloj.
 Línea 25.- Inicializa los periféricos configurados.
17. void SysInit(void);
18. void SystemClock_Config(void);
19. static void MX_GPIO_Init(void);
20.
21. int main(void)
22. {
23. HAL_Init();
24. SystemClock_Config();
25. MX_GPIO_Init();

Loop principal

 Línea 26.- Loop principal


 Línea 28.- Se manda a llamar a la función displayNumber la cual contiene el número que se
 imprime en el display.

26. while (1)


27. {
28. displayNumber(counter);
29. }
30. }
Funcionamiento del barrido

 Línea 31.- Función displayNumber.


 Línea 33.- Declaración de los dígitos para los displays.
 Líneas 34 - 41.- Operaciones módulo para determinar el orden de los dígitos en base a su
peso.
 Línea 42.- Se guardan los valores obtenidos en setDisplay.
 Línea 45.- Función setDisplay.
 Líneas 48 a 63.- Se selecciona el digito de un arreglo BCD para concatenarlo con su
respectivo
 ánodo para que el 7447 luego lo convierta de hexadecimal a binario. Con cada digito se
coloca
 un retardo de 1 ms.

31. void displayNumber(int numero)


32. {
33. int dig1,dig2,dig3,dig4,dig5,dig6,dig7,dig8;
34. dig1=numero%10;
35. dig2=(numero%100)/10;
36. dig3=(numero%1000)/100;
37. dig4=(numero%10000)/1000;
38. dig5=(numero%100000)/10000;
39. dig6=(numero%1000000)/100000;
40. dig7=(numero%10000000)/1000000;
41. dig8=(numero%100000000)/10000000;
42. setDisplay(dig1,dig2,dig3,dig4,dig5,dig6,dig7,dig8);
43. }
44. void setDisplay(int dig1, int dig2, int dig3, int dig4, int dig5,
45. int
46. dig6, int dig7, int dig8)
47. {
48. GPIOD->ODR=numeros[dig1]+D1;
49. HAL_Delay(1);
50. GPIOD->ODR=numeros[dig2]+D2;
51. HAL_Delay(1);
52. GPIOD->ODR=numeros[dig3]+D3;
53. HAL_Delay(1);
54. GPIOD->ODR=numeros[dig4]+D4;
55. HAL_Delay(1);
56. GPIOD->ODR=numeros[dig5]+D5;
57. HAL_Delay(1);
58. GPIOD->ODR=numeros[dig6]+D6;
59. HAL_Delay(1);
60. GPIOD->ODR=numeros[dig7]+D7;
61. HAL_Delay(1);
62. GPIOD->ODR=numeros[dig8]+D8;
63. HAL_Delay(1);
64. }

Subrutina de interrupción

 Línea 1.- Declaración de la variable contador.


 Línea 2.- Función de la interrupción.
 Línea 4.- Ciclo for para control de rebotes.
 Línea 6.- Condicional que incrementa el contador en uno cuando se lee el pin PA1
 Línea 8.- Incremento del contador.
 Línea 10.- Escritura del valor obtenido en PA1.

1. int counter;
2. void EXTI1_IRQHandler(void)
3. {
4. for (int i=0; i<30000;i++);
5.
6. if(HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_1))
7. {
8. counter=counter+1;
9. }
10. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);
11. }

También podría gustarte