Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Matricula ____1884198_____Hora ___N1__ Salón __7215_ Tiempo: Inicio ______ Final ______
INSTRUCCIONES:
a) Lea cuidadosamente este examen y resuelva los problemas propuestos en las hojas anexas, encierre los resultados en un
rectángulo, no despegue las hojas. Favor de dejar su celular apagado y dentro de su mochila.
b) Es un examen individual a libro cerrado, no está permitido el uso de notas, apuntes, calculadoras.
c) No se arriesgue, será considerado como copia, ver el examen de su compañero o el uso de notas.
d) Confirme los resultados obtenidos, de un ingeniero esperan que proporcione resultados correctos y soluciones concretas.
e) Concéntrese en su examen, tiene 2 horas 30 minutos para resolverlo.
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, considerando un
digito apagado entre horas, minutos y segundos.
3.- Genere un contador de interrupciones.
4.- Utilizando el ADC, ajuste el rango de la conversión de 0-4095 a 0-60 para segundos y minutos, y de 0-
4095 a 0-24 para las horas. Al tener el contador de interrupciones el valor de 1 se asignará la lectura
correspondiente a los segundos, el valor de 2 asignara el valor del ADC a los minutos y por último al ser el
contador de interrupciones el valor de 3 se asignara el valor correspondiente del ADC a las horas.
REVISIÓN No.: 7
VIGENTE A PARTIR DE: 01 de Agosto del 2016
2.- Algoritmo
REVISIÓN No.: 7
VIGENTE A PARTIR DE: 01 de Agosto del 2016
Diagrama de flujo de la interrupción
REVISIÓN No.: 7
VIGENTE A PARTIR DE: 01 de Agosto del 2016
3.- Diagrama Eléctrico
REVISIÓN No.: 7
VIGENTE A PARTIR DE: 01 de Agosto del 2016
5.- Escriba y explique el código utilizado para los siguientes apartados
Escritura de un número y generación del barrido en los displays (describir displayNumber y setDisplay)
Línea 1. Indica el nombre del subprograma que se encarga de mostrar en los dos displays los números
decimales.
Línea 3. Declara las variables que se almacenarán el número correspondiente para cada dígito.
Línea 5. Se asignan a dig8 las unidades gracias al obtener el residuo que se obtiene del valor (value) dado como
argumento de la función. Este valor será nuestro número pseudo aleatorio.
Línea 6. Con una parecida, este módulo resultante se dividirá entre 10 para almacenar decenas en dig7.
Línea 7. En este punto el patrón nuevamente se repite, sin embargo, subiendo a bits de mayor peso. Se dividirá
entre 100 para almacenar centenas en dig6.
Línea 8. Se dividirá entre 1000 para almacenar Millares en dig5.
Línea 9. Se dividirá entre 10000 para almacenar Decenas de millar en dig4.
Línea 10. Se dividirá entre 100000 para almacenar Centenas de millar en dig3.
Línea 11. Se dividirá entre 1000000 para almacenar Millones en dig2.
Línea 12. Se dividirá entre 10000000 para almacenar Decenas de Millón en dig1.
Línea 14. Se invoca la función que asignará en los registros a cada uno de los dígitos de forma ordenada en los
displays. Para esto, es necesario pasar como argumentos cada dígito antes asignado a esta función.
Línea 18. Se concatena el dígito 1 con el ánodo correspondiente, es decir, las unidades con en su
correspondiente
posición (D8), que es al final del display.
Línea 19. Delay de 1 milisegundos.
Línea 20. Se concatenan las decenas D7.
Línea 21. Delay de 1 milisegundos.
Línea 22. Se concatenan las centenas D6.
Línea 23. Delay de 1 milisegundos.
Línea 24. Se concatenan los millares D5.
Línea 25. Delay de 1 milisegundos.
Línea 26. Se concatenan las decenas de millar D4.
Línea 27. Delay de 1 milisegundos.
Línea 28. Se concatenan las centenas de millar D3.
Línea 29. Delay de 1 milisegundos.
Línea 30. Se concatena el número que ocupa la posición en los millones a D2.
Línea 31. Delay de 1 milisegundos.
Línea 32. Se concatena el número que ocupa la posición en las decenas de millón a D1.
Línea 33. Delay de 1 milisegundos.
1. void displayNumber(int valor)
2. {
3. int dig1, dig2, dig3, dig4, dig5, dig6, dig7, dig8;
4.
5. dig8 = valor % 10;
6. dig7 = (valor %100) /10;
7. dig6 = (valor %1000) /100;
8. dig5 = (valor %10000) /1000;
9. dig4 = (valor %100000) /10000;
10. dig3 = (valor %1000000) /100000;
11. dig2 = (valor %10000000) /1000000;
12. dig1 = (valor %100000000) /10000000;
13.
REVISIÓN No.: 7
VIGENTE A PARTIR DE: 01 de Agosto del 2016
14. setDisplay(dig1,dig2,dig3,dig4,dig5,dig6,dig7,dig8);
15. }
16. void setDisplay(int dig1,int dig2,int dig3,int dig4,int dig5,int dig6,int
dig7,int dig8)
17. {
18. GPIOC -> ODR = D8 + numbers[dig8];
19. HAL_Delay(1);
20. GPIOC -> ODR = D7 + numbers[dig7];
21. HAL_Delay(1);
22. GPIOC -> ODR = D6 + numbers[dig6];
23. HAL_Delay(1);
24. GPIOC -> ODR = D5 + numbers[dig5];
25. HAL_Delay(1);
26. GPIOC -> ODR = D4 + numbers[dig4];
27. HAL_Delay(1);
28. GPIOC -> ODR = D3 + numbers[dig3];
29. HAL_Delay(1);
30. GPIOC -> ODR = D2 + numbers[dig2];
31. HAL_Delay(1);
32. GPIOC -> ODR = D1 + numbers[dig1];
33. HAL_Delay(1);
}
Proceso de interrupción y la subrutina de servicio de interrupción (Subrutina de servicio de interrupcion)
Línea 1. Indica el subprograma de interrupción externa antes mencionada.
Línea 3. Ciclo for de amortiguamiento.
Línea 6. Condicional que indica si el botón azul en PA13 es presionado.
Línea 8. Clock_selector actúa como contador para seleccionar el reloj donde se modificará el valor de la hora.
Línea 10. Si es mayor a 10, reiniciará su valor a 0. Este estado es neutral, ya que en esta opción se lleva a cabo
la acción de reloj.
Línea 13. Si lo anterior no se cumple, con Clock_selector navegaremos entre los relojes.
1. void EXTI15_10_IRQHandler(void)
{
3. for (int i = 0; i<3000;i++)
{
}
6. if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_13))
{
8. if(Clock_selector >= 3)
{
10. Clock_selector = 0;
}
13. else{
Clock_selector = Clock_selector + 1;
}
}
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
7. switch(Clock_selector)
{
9. case 1:
10. sTime.Seconds = ADCValue * 0.0146484375;
11. HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
12. break;
13. case 2:
14. sTime.Minutes = ADCValue * 0.0146484375;
15. HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
16. break;
17. case 3:
18. sTime.Hours = ADCValue * 0.005859375;
19. HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
20. break;
21. default:
22. break;
23. }
24. Tiempo = sTime.Hours*(1000000)+sTime.Minutes*(1000)+sTime.Seconds;
25. displayNumber(Tiempo);
}
}
REVISIÓN No.: 7
VIGENTE A PARTIR DE: 01 de Agosto del 2016
Explique el apartado While
Linea 1. Es el inicio del ciclo while
Linea 3. Devuelve el valor numérico correspondiente a la hora para la fecha especificada según la hora
universal
Linea 4. Finalmente, mandamos a la variable Tiempo a la función displayNumber() para que se muestre en los
displays.
1. while (1)
2. {
3. Tiempo = GetTime();
4. displayNumber(Tiempo);
5. }
Explique la o las llamadas a función presentes en el loop de control principal
Línea 1. Es la función propia realizada para esta actividad. Muestra los 8 dígitos de un número en los displays
mediante el barrido.
Línea 2. Se encarga de configurar qué digito y en qué posición se mostrará en el barrido un número en los
displays.
Línea 3. Convierte el valor ADC a número decimal.
REVISIÓN No.: 7
VIGENTE A PARTIR DE: 01 de Agosto del 2016