Está en la página 1de 12

Universidad Tecnológica de Querétaro

Nombre de la materia:

“Dispositivos digitales programables”

Practica:

“3.1 reloj 24 Horas con exhibidor”

INGENIERÍA EN TECNOLOGÍAS DE LA AUTOMATIZACIÓN.

Presenta:

VILLARREAL SORIA LUIS JARED

Matricula:

2015348150

DOCENTE

Dr. Aguilar Pereyra J. Felipe

Santiago de Querétaro. Qro. Marzo 2019.


1. Planteamiento del problema.

Realizar la exhibición de un reloj, con formato de 24:00:00:00.

1.1 Requerimientos.

El exhibidor debe mostrar la hora en el formato indicado, al llegar a la cuenta


máxima debe reiniciarse y seguir con la cuenta, minimizando el error en su
conteo, con ayuda de interupciones

1.2 Propuesta.
Para dar solución al problema se implementa el exhibidor de 8 dígitos 7
segmentos, el cual utiliza como interfaz de programación el Max7219. El
controlador principal de sistema será la TIVA_TM4C123G.

2. Diagrama de bloques.
En la figura 1 se muestra el diagrama de flujo en el que se observa el flujo de
la información. Comienza con la PC, la cual aloja el IDE Code composer
Version 6.2.0.00048. El compilador envía el programa vía USB y la Tarjeta
envía la información decodificada al Exhibidor.

Figura1.- Diagrama de bloques del sistema.


3. Tabla de descripción de terminales
El datashet del dispositivo Max7219, nos muestra entre otra información de
configuraciones; la tabla de descripción de los pines del integrado. los
requerimientos para poder trabajar el dispositivo se muestran en la tabla 1.

Tabla1. Descripción de pines MAX7219.

Los pines a utilizar de la TIVA_TM4C123G se enlistan en la tabla 2.

Pin Nombre Función

Alimentación positiva,
11 VDD
conectada al encoder.

Referencia de tierra,
conectada a los
2 GND
diferentes dispositivos
utilizados.

Señal de Dato (MOSI)


20 PA3
para exhibidor

Señal de reloj (clk)


58 PB4
para exhibidor.

4 PB7 Señal Load (CS)

Tabla 2. Descripción de pines utilizados de la TIVA_TM4C123G.


4. Diagrama eléctrico.

En la figura 2 se observa el diagrama eléctrico para la conexión del exhibidor con la


TIVA_TM4C123G los pines conectados corresponden a los indicados en las tablas 1 y
2 respectivamente.

Figura 2. Diagrama eléctrico del sistema.


5. Diagramas de flujo.

El diagrama de la figura 3 muestra la secuencia general del proceso las


subrutinas se muestran en los diagramas siguientes.

INICIO

Incluir librerías

Establece el reloj de
sistema a 40 Mhz

Habilita el periférico A

Configurar el pin 3 de puerto A


como salida.

Habilitar el periferico B

Configurar el pin 4 y 7 de
puerto B como salida.

Habilitar el timer 0
Configurar el timer 0 de
manera periodica.
Cargar el timer a una
decima de segundo.
Iniciar el timer 0.

Desplegar información en el exhibidor.

FIN

Figura 3. Diagrama de flujo general.


El diagrama de la figura 4 muestra la lógica para enviar la información al
exhibidor.

INICIO

SI Timer NO

interrupción ==0
Limpiar bandera
del timer

Digit0++

SI NO
Var_Digit0==10

Var_Digit0=0 Enviar valor de


Var_Digit1 ++ var_Digit0 a la posición 0
del display

SI NO
Var_Digit1==6

Var_Digit1 =0 Enviar valor de


var_Digit1 a la posición 1
Var_Digit2++ del display

SI NO
Var_Digitn==n
Var_Digitm=0 Enviar valor de
var_Digitn a la posición n
Var_Digitn++ del display

SI NO
Var_Digitm==m

Enviar valor de
Var_Digitn=0 var_Digitn a la posición
m del display
Var_Digitm++

NO
SI Reloj ==
24:59:59:59

Var_Digt0,1,2,n...7. =0

FIN

Figura 4. Diagrama secuencia de conteo y envió de información.


6. Código.
1. // Universidad Tecnológica de Querétaro, UTEQ
7. //Ingeniería en Tecnologías de Automatización
8. //Alumno: Villarreal Soria Luis Jared
9. //2015348150
10. //Docente: J. Felipe Aguilar Pereyra.
11.
12. //Inclusión de librerías
13. #include <stdint.h>
14. #include <stdbool.h>
15. #include "inc/tm4c123gh6pm.h"
16. #include "inc/hw_memmap.h"
17. #include "inc/hw_types.h"
18. #include "driverlib/sysctl.h"
19. #include "driverlib/interrupt.h"
20. #include "driverlib/gpio.h"
21. #include "driverlib/timer.h"
22. #include "Max7219_2.h"
23.
24. int main(void) // Inicia funcion principal.
25. {
26. uint32_t ui32Period; // Variable para asignacion de temporizacion.
27.
28. //Inicializar variables de tiempo en 0
29.
30. SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL
_OSC_MAIN); // Establece el reloj de systema en 40 MHZ
31.
32.
33.
34.
35. SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); // Habilita perifericos
del puerto A
36. GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_3); // LOAD
37.
38. SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);//Hailita el perifericos
del puerto B
39. GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_4|GPIO_PIN_7); //
CLK MOSI
40.
41. GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3,0x08); //LOAD ON
42. DisplayInit();
43.
44. SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);// Habilita el Timer0
45. TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC); // Configura el Timer
0 de manera periodica.
46.
47. ui32Period = (SysCtlClockGet() / 60); // Guarda el valor del reloj.
48. TimerLoadSet(TIMER0_BASE, TIMER_A, ui32Period -1); //Carga el valor de
la variable ui32Period
49.
50. IntEnable(INT_TIMER0A); //Configuracion del timer.
51. TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
52. IntMasterEnable();
53.
54. TimerEnable(TIMER0_BASE, TIMER_A);
55. // Termina configuracion del timer
56. while(1) // inicia ciclo while 1
57. {
58. } // Termina while
59. } // Termina funcion principal.
60.
61. void Timer0IntHandler(void)// Llamada a interrupcion por timer
62. {
63.
64. TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT); // Clear the
timer interrupt
65.
66.
67. uiDigit0++; // Variable para control de tiempo digito 0
68.
69.
70. // Inicia secuencia para envio de informacion.
71. if(uiDigit0==10){ // Condiciones para digitos 0 y 1 display
72. uiDigit0=0;
73. SpiSend(OP_DIGIT0,uiDigit0);
74. uiDigit1++;
75. }else SpiSend(OP_DIGIT0, uiDigit0);
76.
77. if(uiDigit1==6){
78. uiDigit1=0;
79. SpiSend(OP_DIGIT1, uiDigit1);
80. uiDigit2++;
81. }else SpiSend(OP_DIGIT1, uiDigit1);// Terminan condiciones para digitos
0 y 1 display
82.
83. if(uiDigit2==10){ // Condiciones para digitos 2 y 3 display
84. uiDigit2=0;
85. SpiSend(OP_DIGIT2, uiDigit2);
86. uiDigit3++;
87. }else SpiSend(OP_DIGIT2, uiDigit2);
88.
89. if(uiDigit3==6){
90. uiDigit3=0;
91. SpiSend(OP_DIGIT3, uiDigit3);
92. uiDigit4++;
93. }else SpiSend(OP_DIGIT3, uiDigit3); // Terminan condiciones para digitos
2 y 3 display
94.
95. if(uiDigit4==10){ // Condiciones para digitos 4 y 5 display
96. uiDigit4=0;
97. SpiSend(OP_DIGIT4, uiDigit4);
98. uiDigit5++;
99. }else SpiSend(OP_DIGIT4, uiDigit4);
100.
101. if(uiDigit5==6){
102. uiDigit5=0;
103. SpiSend(OP_DIGIT5, uiDigit5);
104. uiDigit6++;
105. }else SpiSend(OP_DIGIT5, uiDigit5); // Terminan condiciones para
digitos 4 y 5 display
106.
107. if(uiDigit6==10){ // Condiciones para digitos 6 y 7 display
108. uiDigit6=0;
109. SpiSend(OP_DIGIT6, uiDigit6);
110. uiDigit7++;
111. }else SpiSend(OP_DIGIT6, uiDigit6); // Terminan condiciones para
digitos 6 y 7 display
112.
113. if(uiDigit7==2 && uiDigit6==3 && uiDigit5==5 && uiDigit4==9 &&
uiDigit3==5 && uiDigit2==9 && uiDigit1==5 && uiDigit0==9) { //
Condiciones para reinicio de tiempo
114.
115. uiDigit0=0;///////////Reseteo de variables de tiempo////////
116. uiDigit1=0;
117. uiDigit2=0;
118. uiDigit3=0;
119. uiDigit4=0;
120. uiDigit5=0;
121. uiDigit6=0;
122. uiDigit7=0;///////////Reseteo de variables de tiempo////////
123.
124. }else SpiSend(OP_DIGIT7, uiDigit7); // Terminan condiciones para
digitos 6 y 7 display
125. } // Termina interrupcion de timer
8. Pruebas

En la figura 5 se muestra el resultado de una de las pruebas realizadas a nuestro


sistema de reloj comparándolo con un cronometro para establecer el error de
nuestro sistema, haciendo la resta de tiempo nos entrega que tenemos un error
de 236 milisegundos, este error no será completamente valido sino una
aproximación, debido a que para una prueba real habría que sintonizar las
señales de inicio de ambos cronómetros, en este caso también se tiene tambien
un error debido a la precisión con que se inicia el cronometro de comparación .

Figura 5. Diagrama secuencia de conteo y envió de información.


En la figura 6 y 7 se muestra la siguiente prueba realizada se configuró el reloj
desarrollado, arrancándolo a las 12:00:00:00 se comparó con el reloj del celular
al día siguiente.

Figura 6. Sincronización con reloj del teléfono celular.

Figura 7. Capturas tomadas después de 13 horas y 33 minutos.


8. Bibliografía

INSTRUMENTS, T. (2013). Getting Started with the Tiva™ TM4C123G LaunchPad Workshop
(Vol. 1.22). Technical Training.

También podría gustarte