Logo Studenta

Microcontrolador AtpMega328p - Ejemplos Temporizador 0

¡Este material tiene más páginas!

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.