Beruflich Dokumente
Kultur Dokumente
Calificación
Laboratorio Nº 4
TEMPORIZADORES
MICROPROCESADORES I
OBJETIVOS
MARCO TEORICO
En este caso se verá el uso del timer1 AVR como contador, temporizador y en modo
comparador, el uso del timer1 AVR en modo PWM se verá en otro apartado, en lo
que sigue se comentará para el caso del ATmega88 por lo que es muy importante
que se tenga a mano la hoja de datos del atmega88, para el caso de utilizar algún
otro microcontrolador AVR el procedimiento será muy similar a lo aquí comentado,
la programación se realizará con atmel studio.
MATERIALES Y EQUIPOS
Fuente de poder
Multímetro
Caja de cables
Breadboard
ATMEGA 328P
Capacitores 22 nF y 100 nF
Cristal Oscilador 16 MHz
Resistencia 330 ohm y 10 K
Convertidor USB-serial
Cable USB hembra
TECNICA O PROCEDIMIENTO
Parte 1
Con 1 Hz
#include <avr/io.h>
#include <avr/interrupt.h> //LIBRERIA NECESARIA PARA TRABAJAR CON
INTERRRUPCIONES
int main(void)
{
int contador;
DDRC=0x0ff; //Puerto C todo salidas
DDRD=0b11011111; //Todo salidas excepto PD5/T1
PORTC=1;
TCCR0B |=(1<<CS00);
TCCR0B &=~(1<<CS01);
TCCR0B |=(1<<CS02); //configurando pre-escalador como contador de eventos
internos
//con pre-escalamiento igual a (CLKio/1024)
TCCR1B &=~(1<<CS10);
TCCR1B |=(1<<CS11);
TCCR1B |=(1<<CS12); //configurando pre-escalador por flanco de bajada en
T1/PD5
TCNT1H=0x0ff;
TCNT1L=0x0fe; //maxval=(65536-4)=65532=0xfffc ->4 pulsos para
desbordamiento
contador=0;
while(1)
{
}
}
Con 100 Hz
#include <avr/io.h>
#include <avr/interrupt.h> //LIBRERIA NECESARIA PARA TRABAJAR CON INTERRRUPCIONES
int main(void)
{
int contador,a,b,c;
a=0;
b=1;
DDRC=0x0ff; //Puerto C todo salidas
DDRD=0b11011111; //Todo salidas excepto PD5/T1
PORTC=1;
DDRB=1;
TCCR0B |=(1<<CS00);
TCCR0B &=~(1<<CS01);
TCCR0B |=(1<<CS02); //configurando pre-escalador como contador de eventos internos
//con pre-escalamiento igual a (CLKio/1024)
TCCR1B &=~(1<<CS10);
TCCR1B |=(1<<CS11);
TCCR1B |=(1<<CS12); //configurando pre-escalador por flanco de bajada en T1/PD5
TCNT1H=0x0ff;
TCNT1L=0x09c; //maxval=(65536-4)=65532=0xfffc ->4 pulsos para desbordamiento
contador=0;
while(1)
{
}
}
CUESTIONARIO
.
Explique la utilidad de los temporizadores.
El registro puede ser pre-cargado para iniciar su conteo a partir de un valor determinado.
Un registro puede ser cargado con un valor entre 0 y MAXVAL ( OCRn – Output Compare
Register ) y es comparado con el valor del Timer en cada ciclo de reloj, una coincidencia
produce un Evento El evento se indica con la bandera OCFn ( Output Compare Flag ).
Con el Temporizador 1es posible capturar eventos externos, un cambio en la terminal ICP
1 provocara que el timer sea leído y almacenado en el registro iCRn ( Input Capture
Register). Indicando el evento en la bandera ICFn ( Input Capture Flag), pueden ser útiles
para medir el ancho de pulsos externos.
CONCLUSIONES
Los temporizadores son muy importantes, nos ayudan a capturar eventos externos
y son útiles para medir el ancho de pulsos.
BIBLIOGRAFIA
Con 1 Hz
#include <avr/io.h>
#include <avr/interrupt.h> //LIBRERIA NECESARIA PARA TRABAJAR CON
INTERRRUPCIONES
int main(void)
{
int contador;
DDRC=0x0ff; //Puerto C todo salidas
DDRD=0b11011111; //Todo salidas excepto PD5/T1
PORTC=1;
TCCR0B |=(1<<CS00);
TCCR0B &=~(1<<CS01);
TCCR0B |=(1<<CS02); //configurando pre-escalador como contador de eventos
internos
//con pre-escalamiento igual a (CLKio/1024)
TCCR1B &=~(1<<CS10);
TCCR1B |=(1<<CS11);
TCCR1B |=(1<<CS12); //configurando pre-escalador por flanco de bajada en
T1/PD5
TCNT1H=0x0ff;
TCNT1L=0x0fe; //maxval=(65536-4)=65532=0xfffc ->4 pulsos para
desbordamiento
contador=0;
while(1)
{
}
}
Con 100 Hz
#include <avr/io.h>
#include <avr/interrupt.h> //LIBRERIA NECESARIA PARA TRABAJAR CON INTERRRUPCIONES
int main(void)
{
int contador,a,b,c;
a=0;
b=1;
DDRC=0x0ff; //Puerto C todo salidas
DDRD=0b11011111; //Todo salidas excepto PD5/T1
PORTC=1;
DDRB=1;
TCCR0B |=(1<<CS00);
TCCR0B &=~(1<<CS01);
TCCR0B |=(1<<CS02); //configurando pre-escalador como contador de eventos internos
//con pre-escalamiento igual a (CLKio/1024)
TCCR1B &=~(1<<CS10);
TCCR1B |=(1<<CS11);
TCCR1B |=(1<<CS12); //configurando pre-escalador por flanco de bajada en T1/PD5
TCNT1H=0x0ff;
TCNT1L=0x09c; //maxval=(65536-4)=65532=0xfffc ->4 pulsos para desbordamiento
contador=0;
while(1)
{
}
}