Vista previa del material en texto
MICROCONTROLADOR ATmega328P Ejemplos Temporizador 0 ATmega328P – Temporizador 0 Configuración de los Temporizadores ➢ La interrupción es la forma más usada para reaccionar a eventos del temporizador. ➢ En la configuración de cualquier temporizador se debe seleccionar la fuente del reloj y habilitar las interrupciones correspondientes a los eventos que se quieran detectar (si se van a usar interrupciones). ATmega328P – Temporizador 0 Ejemplo 1: Generación de una Señal Periódica. Escriba un programa que genere una señal de 5 kHz, considerando que un ATMega328P estará operando a 1 MHz. Utilice desbordamientos atendidos por interrupción (con salida en PD0). ATmega328P – Temporizador 0 f = 5 kHz → T = 200 s Ciclo de trabajo del 50% → TALTO = 100 s TBAJO = 100 s Oscilador de 1 MHz, sin preescalador → T = 1 s # eventos = TALTO/T = (100 s)/(1 s) = 100 El temporizador debe contar 100 eventos para conmutar la salida. ATmega328P – Temporizador 0 Para que el temporizador 0 (8 bits) desborde transcurridos 100 ciclos de reloj: valor inicial del temporizador = 28 – 100 = 256 - 100 = 156 = 0x9C En la sección de configuración del programa se debe: • Establecer el valor inicial del temporizador • Configurar para que tenga una fuente de reloj • Habilitar su interrupción por desbordamiento • En el lazo infinito el MCU permanece ocioso Transcurridos 100 ciclos de reloj, el temporizador interrumpe a la CPU, en su ISR conmuta la salida y recarga su valor para que los desbordamientos ocurran con el mismo periodo. ATmega328P – Temporizador 0 #include <avr/io.h> #include <avr/interrupt.h> ISR(TIMER0_OVF_vect ) { TCNT0 = 156; // Valor de recarga PIND = 0x01 ; // Conmuta la salida } int main ( ) { DDRD = 0xFF; // Salida en PD0 PORTD =0x00 ; // Inicia en 0 ATmega328P – Temporizador 0 // Configuración del temporizador 0 TCNT0 = 156; TCCR0A = 0x00 ; TCCR0B = 0x01 ; // Reloj sin pre escala TIMSK0 = 0x01 ; //Interrupción por desbordamiento sei ( ) ; // Habilitador global de interrupciones while ( 1 ) asm( ”NOP” ) ; // Ocioso en el lazo infinito } ATmega328P – Temporizador 0 Ejemplo 2: Generación de una Señal Periódica Escriba un programa que genere una señal de 5 kHz, considerando que un ATMega328P estará operando a 1 MHz. Utilice respuesta automática ante coincidencias por comparación y modo CTC (la salida será en OC0A, que está en PD6). x=6 ATmega328P – Temporizadores Debido a que el temporizador inicia en 0, en el registro de comparación OCR0A = 99. En la sección de configuración del programa se debe: • Seleccionar el modo CTC (WGM0[2:0]= “010”) • Configurar la conmutación automática de OC0A (COM0A[1:0] = “01”). OC0A está en PD6. En el lazo infinito el MCU permanece ocioso. El reinicio del temporizador y la generación de la salida se realizan por hardware y, por lo tanto, no se requiere el uso de interrupciones. ATmega328P – Temporizadores #include <avr/io.h> int main ( ) { DDRD = 0xFF; // Salida en OC0A (PD6) PORTD =0x00 ; // Configuración del temporizador 0 OCR0A = 99 ; // Valor para la comparación TCCR0A = 0x42 ; // Respuesta automática y modo CTC TCCR0B = 0x01 ; // Reloj sin pre escala while ( 1 ) asm( ”NOP” ) ; // Ocioso en el lazo infinito } BIBLIOGRAFÍA ATmega328P 8-bit AVR Microcontroller with 32K Bytes In-System Programmable Flash, DATASHEET. Capítulo 5. El microcontrolador ATMega328P de Microchip. Felipe Santiago Espinosa.