Está en la página 1de 4

UTB Fac.

de Ingeniería

UNIVERSIDAD TECNOLÓGICA DE BOLÍVAR

Facultad de ingeniería

Taller #3

Presentado por:
Daniel Hernando Pájaro T00042043

Luis Guillermo Mulford T00040959

Clase:
Microcontroladores

Docente:
Oscar Acevedo Patiño

Cartagena, Bol. D.T. y C. - Colombia

Marzo de 2018

Ing. Mecatrónica 1 Microcontroladores


UTB Fac. de Ingeniería

Objetivo

Incorporar lo aprendido teóricamente en clase sobre los timers/contadores del


ATMega328p y ponerlo de forma práctica en un circuito, utilizando interrupciones en
el microcontrolador, para crear un temporizador.

Enunciado

Modificar el programa “p05” para que realice lo siguiente:

 Agregar un segundo display, de forma que pueda visualizar números de 2 cifras.


 Agregue un pulsador (START), que cuando se oprima, el microcontrolador
muestre en los displays los números desde el 59 hasta el 00, con decremento de
1 por cada segundo (1 minuto).
 No puede utilizar las funciones de delay para el retardo de un segundo. Debe
utilizar un timer del microcontrolador para generar este retardo.

Ing. Mecatrónica 2 Microcontroladores


UTB Fac. de Ingeniería

Código C

1. #define F_CPU 16000000UL


2. #include <avr/io.h>
3. #include <avr/interrupt.h>
4.
5. int numero_mostrado = 0;
6.
7. int main(void) {
8.
9. // set up
10. DDRB = 0 B00001111; //port B as output
11. DDRC = 0 B00001111; //port C as output
12. DDRD &= ~(1 << PD2); // PD2 as input (for INT0)
13. PORTD |= (1 << PD2); // pull-up resistor // timer1 configuration
14.
15. TCCR1A = 0 B00000000; //Normal mode
16. TCCR1C = 0;
17. TIMSK1 = 0 B00000111; //all interrupts enabled
18.
19. OCR1A = 15625; // 1s
20. OCR1B = 0; //
21. TCNT1 = 0; // initialize counter
22.
23. EIMSK = 0 B00000001; //enable INT 0
24. EICRA = 0 B00000010; //falling edge generates an interrupt
25.
26. sei(); //enable interrupts
27.
28. while (1) {
29. PORTB = numero_mostrado / 10; //primer digito
30. PORTC = numero_mostrado % 10; //segundo digito
31. }
32. return 0;
33. }
34.
35. // interrupt routine for TMR1 compare A
36. ISR(TIMER1_COMPA_vect) {
37. numero_mostrado = numero_mostrado - 1;
38. TCNT1 = 0; // Reset counter
39. if (numero_mostrado == 0) {
40. TCCR1B = 0 B00000000; //Si el conteo terminó, detener timer
41. };
42. }
43. // interrupt routine for TMR1 compare B
44. ISR(TIMER1_COMPB_vect) {;
45. }
46. // interrupt routine for TMR1 overflow (timer resets)
47. ISR(TIMER1_OVF_vect) {;
48. }
49. // INT0 subroutine
50. ISR(INT0_vect) {
51. numero_mostrado = 59;
52. TCCR1B = 0 B00000101; // Reloj interno/1024
53. }

Ing. Mecatrónica 3 Microcontroladores


UTB Fac. de Ingeniería

Montaje

Fig. 1 Montaje del circuito

Video de funcionamiento: https://goo.gl/ZXVkH8

Ing. Mecatrónica 4 Microcontroladores

También podría gustarte