Sie sind auf Seite 1von 9

Programacion de Microcontroladores

Semestre 2 - 2015 - Tarea 02


Jofre Horacio, Oviedo Jazmin, Vergara Patricio
hjofre11@alumnos.utalca.cl, joviedo14@alumnos.utalca.cl, pvergara13@alumnos.utalca.cl
Resumen
En este informe se presenta el desarrollo de la tarea 02 del modulo Taller de Microcontroladoes, la cual consiste en
investigar y explicar el codigo del programa utilizado en el laboratorio 02, y ademas aplicar lo aprendido en la creacion
de un codigo para controlar la velocidad de 2 motores DC. El laboratorio 02 consiste en un tutorial de microcontrolador
AVR y simulacion en software Proteus de un circuito de control de velocidad de un motor DC.

1.

I NTRODUCCI ON
Para disminuir las posibilidades de danar los componentes al crear un circuito, es utilizado software de simulacion,

como Proteus. El cual permite simular circuitos con microcontroladores a los cuales cargarles el programa deseado y
ejecutarlo comprobando, sin danar componentes reales, el comportamiento deseado.
2.

D ESARROLLO
Considerando la gua Lab. 02:

1) Determinar la funcion de los registros utilizados en el programa que se cargo en la simulacion de este tutorial.
DDRX o Data Direction Register, es el registro que configura el direccionamiento de los pines del puerto X, indicando
si son salida o entrada. El microcontrolador Atmega168 posee los puertos B, C o D, los cuales tienen un numero de
pines asignados de fabrica. Para declarar un pin como salida se le asignara el valor 1, para declarar un pin como
entrada se le asignara el valor 0.
Por ejemplo, DDRD=0b10010010, activa en el puerto D los pines 1, 4 y 7 para escritura y los pines 0, 2, 3, 5 y 6
para lectura.

PORTX, se utiliza para definir el estado de los pines de un puerto, para declara un pin en estado alto se le asignara el
valor 1 y para declararlo en bajo el valor 0. Cuando un pin esta configurado como entrada se utiliza para configurar
la resistencia pull-up del pin, con el valor 1 se habilitara la resistencia y con el valor 0 se deshabilitara. Por ejemplo:
DDRD=0b00001111, declara los pines 0, 1, 2, 3 como entrada y los pines 4, 5, 6 y 7 como salida
PORTD=0b00110011, declara los pines 0, 1, 4, 5 en alto y los pines 2, 3, 6 y 7 en bajo. Ademas declara en los pines
0 y 1 que la resistencia pull-up sera habilitada y en los pines 2 y 3 sera deshabilitada.

TCCR0A o Timer/Counter Control Register, este es un modulo interno del microcontrolador, sirve para hacer de
temporizador o contador el cual es de siempre de forma ascendente. Este es un registro de 8 bits que puede leerse y
escribirse. Este mantiene el control de los bits del Timer/Counter 0A , el cual contiene 8 bits que van desde el 0 al 7.

Figura 1. bits de registro TCCR0A

El modo de operacion del Counter/Timer es definido en los bits WGM00, WGM01 y WGM02. Siendo WGM00 y
WGM01 los bits 0 y 1 de TCCR0A respectivamente y WGM02 el bit 3 de TCCR0B. Los bits 3 y 2 estan reservados
y siempre tendran valor 0.

Figura 2. Bits 0 y 1

Los bits 4 y 5 controlan el funcionamiento del registro OC0B.

Figura 3. TCCR0A en modo No PWM

Figura 4. TCCR0A en modo PWM Rapido

Los bits 6 y 7 controlan el funcionamiento del registro OC0A.

Figura 5. TCCR0A en modo PWM fase correcta

Figura 6. TCCR0A en modo No PWM

Figura 7. TCCR0A en modo PWM Rapido

Figura 8. TCCR0A en modo PWM Fase correcta

TCCR0B o Timer/Counter Control Register, este es un modulo interno del microcontrolador, sirve para hacer de
temporizador o contador el cual es de siempre de forma ascendente. Este es un registro de 8 bits que puede leerse y
escribirse. Este mantiene el control de los bits del Timer/Counter 0B , el cual contiene 8 bits que van desde el 0 al 7.

Figura 9. TCCR0B

Figura 10. TCCR0B

TCNT0 este registro Timer/Counter se configura de manera ascendente o descendiente, dando acceso directo al
contador de 8 bits (0 a 255) del Timer/Counter para las instrucciones de lectura y escritura. Cuando el contador llega
a los 255 y debe seguir, comienza automaticamente en 0. La escritura en el registro TCNT0 borra la coincidencia en

el siguiente ciclo de reloj del Timer. Esta


modificacion, cuando el contador esta corriendo, lleva consigo un riesgo de
perder una coincidencia entre los registros TCNT0 y OCR0x.

Figura 11. TCNT0

OCR0A, Output compare register, registro de 8 bits que es continuamente comparado con TCNT0, en otras palabras,
se puede definir OCR0A como un registro de tope. Se puede usar una coincidencia para disparar una Interrupcion o
para generar una onda por el pin OC0A.

Figura 12. OCR0A

2) Determinar que funcion cumplen los bits activados de cada registro usado.

DDRD = 0b11111111; Configura inicialmente todos los pines del puerto D como salidas.
PORTD = 0b00000000; Configura nicialmente todos los pines del puerto D en estado bajo.
TCCROA = 0b10100011; Configura PWM en modo rapido, limpia el registro OC0A, inicia el modo comparacion,
define OC0A y OC0B en valor 0.
TCCROB = 0b00000011; Reloj/64 desde pre-escalar
TCNT0 = 0; Inicializa Timer/Counter en 0 para que al comenzar a ejecutarse el programa en el microcontrolador no
este generando ningun pulso.
OCR0A = 0; Se inicia en 0 para que al ejecutar el programa el microcontrolador no es generando ningun pulso.

3) Explique en detalle como funciona el programa compilado, y que realiza especficamente.

Este programa tiene por objetivo controlar la velocidad de un motor DC, para lograrlo utiliza una senal PWM y
un contador de 256 valores, donde cada 10 milisegundos aumenta 1 valor hasta llegar a 256. Este programa esta
escrito en el lenguaje C, por lo que es necesario cargar las ibrerias a utilizar. Al comenzar el programa principal, se
configuraran los pines a utilizar, en este caso los pines del puerto D, se configuraran como salidas en estado bajo,
despues se seleccionara la senal de salida a utilizar, PWM, se reseteara el contador y el comparador en valor 0. Por
u ltimo se define un ciclo infinito con la condicion de aumentar el contador de 0 a 255 cada 10 milisegundos de 1 en
1.

Figura 13. Codigo Laboratorio 2

4) Basado en el ejemplo presentado en la gua, simule y realice un codigo el cual controle la velocidad de dos
motores girando en sentido contrario (al mismo tiempo), de la siguiente manera:
1) 100 % velocidad Led Azul Encendido
2) 50 % velocidad Led Verde Encendido
3) 0 % velocidad Led Rojo Encendido
Para realizar este codigo se utilizaron los pines del puerto D como salida al igual que en la gua de Laboratorio 02.
Para lograr que los 2 motores DC giraran en sentido contrario, un motor se alimnento por el polo negativo. Para la
alimentacion de los leds se utilizo los pines 0, 1, y 2 del puerto D, donde a cada led se le asigno una resistencia para
evitar danos. Para realizar lo pedido, se utilizo el valor de la variable .apara determinar la velocidad de los motores,
con el valor 0 se cambia el estado del pin 0 de bajo a alto durante 1000 milisegundos encendiendo el led rojo durante
ese tiempo, con el valor 127 se cambia el estado del pin 1 y con el valor 255 el estado del pin 2. Donde posteriormente
se cambia el valor de .a.a 0 reiniciando el ciclo.

Figura 14. Codigo Tarea 02

Figura 15. Circuito Proteus

Figura 16. Led Rojo

Figura 17. Led Verde

Figura 18. Led Azul

C ONCLUSIONES
El software Proteus es una poderosa herramienta que permite crear y simular circuitos, disminuyendo los errores
de sus usuarios, estudiantes e ingenieros, al implementar el circuito. Asimismo AVRStudio permite programar microcontroladores AVR en lenguaje C y Assembler. La compilacion de ese codigo sirve para simular o cargarlo a un
microcontrolador real, para cargarlo a un microcontrolador es necesario un programador como el AVR-ISP500, el cual
es un programador USB para microcontroladores AVR. Por lo que el programa de esta tarea puede ser cargado en un
microcontrolador Atmega168, el cual junto con los componentes en una protoboard y una fuente de alimentacion de
5V, ejecuta el mismo funcionamiento que la simulacion en Proteus.
R EFERENCIAS
[1] Guia Lab 02;Marco Rivera
[2] Guia Tarea 02;Marco Rivera
[3] Datasheet LM7805;
[4] Datasheet Atmega168;
[5] Datasheet Tip122;
[6] Gua 09 y Gua 12; Marco Rivera
[7] Tutorial AVR desde 0; Felixls; http://dl.dropbox.com/u/24861335/Felixls/tutoriales/TutorialAVRdesde0.pdf

Das könnte Ihnen auch gefallen