Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Matricula 1732937 Hora V1 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 asignará el valor del adc a los minutos y por último al ser el
contador de interrupciones el valor de 3 se asignará el valor correspondiente del adc a las horas.
Describir:
Como el arranque parte siempre de cero, el registro de aproximaciones sucesivas comienza poniendo a 1
el bit de más peso (MSB), quedando el resto a cero, o sea, forma el valor 100 (para este ejemplo se
utilizarán sólo tres bits), que corresponde a la mitad de la máxima excursión de la tensión de entrad. Este
valor es transformado a señal analógica, que a su vez se introduce en el comparador.
Si esta señal es mayor que Vi, el comparador bascula dando lugar a una señal que hace que el registro
varíe su contenido, sustituyendo el 1 del bit de más peso por un 0 y colocando en el bit de peso
inmediatamente inferior un 1, quedando inalterado el resto de los bits (010).
Por el contrario, si la señal fuese menor que Vi, el registro no modifica el bit de más peso inmediatamente
inferior a 1, dejado a 0 el resto de los bits (110).
Tanto en un caso como en otro, se efectúa una nueva conversión D/A y luego se modifica el registro con
el mismo criterio. El proceso se repite hasta alcanzar el bit de menos peso (LSB).
REVISIÓN No.: 7
VIGENTE A PARTIR DE: 01 de Agosto del 2016
Ilustre gráficamente de la mejor forma posible el fenómeno de persistencia de la visión.
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
5K
VCC
5.0V
330Ω
POTENTIOMETER
R1
S1
Key = A
REVISIÓN No.: 7
VIGENTE A PARTIR DE: 01 de Agosto del 2016
4.- 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)
REVISIÓN No.: 7
VIGENTE A PARTIR DE: 01 de Agosto del 2016
1. void displayNumber(int numero)
2. {
3. int dig1,dig2,dig3,dig4,dig5,dig6,dig7,dig8;
4. dig1=numero%10;//Decenas de millones
5. dig2=(numero%100)/10;//Millones
6. dig3=(numero%1000)/100;//Centenas de miles
7. dig4=(numero%10000)/1000;//Decenas de miles
8. dig5=(numero%100000)/10000;//Miles
9. dig6=(numero%1000000)/100000;//Centenas
10. dig7=(numero%10000000)/1000000;//Decenas
11. dig8=(numero%100000000)/10000000;//Unidades
12. setDisplay(dig1,dig2,dig3,dig4,dig5,dig6,dig7,dig8);
13. }
14.
15. void setDisplay(int dig1, int dig2, int dig3, int dig4, int dig5, int dig6, int
16. dig7, int dig8)
17. {
18. GPIOD->ODR=numeros[dig1]+D1;
19. HAL_Delay(1);
20. GPIOD->ODR=numeros[dig2]+D2;
21. HAL_Delay(1);
22. //GPIOD->ODR=numeros[dig3]+D3;
23. //HAL_Delay(1);
24. GPIOD->ODR=numeros[dig4]+D4;
25. HAL_Delay(1);
26. GPIOD->ODR=numeros[dig5]+D5;
27. HAL_Delay(1);
28. //GPIOD->ODR=numeros[dig6]+D6;
29. //HAL_Delay(1);
30. GPIOD->ODR=numeros[dig7]+D7;
31. HAL_Delay(1);
32. GPIOD->ODR=numeros[dig8]+D8;
33. HAL_Delay(1);
34. }
REVISIÓN No.: 7
VIGENTE A PARTIR DE: 01 de Agosto del 2016
35. void EXTI1_IRQHandler(void)
36. {
37. for(int i=0; i<30000; i++);
38. if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1))
39. {
40. counter=counter+1;
41. if(counter > 3)
42. {
43. counter = 1;
44. }
45. }
46. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);
47. }
REVISIÓN No.: 7
VIGENTE A PARTIR DE: 01 de Agosto del 2016
Explique la o las llamadas a función presentes en el loop de control principal
REVISIÓN No.: 7
VIGENTE A PARTIR DE: 01 de Agosto del 2016