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

aplicar lo aprendido en la creacion

para controlar la velocidad de 2 motores DC. El laboratorio 02 consiste en un tutorial de microcontrolador

investigar y explicar el codigo´

de un codigo´

AVR y simulacion´

del programa utilizado en el laboratorio 02, y ademas´

en software Proteus de un circuito de control de velocidad de un motor DC.

´

1. INTRODUCCI ON

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˜

Para disminuir las posibilidades de danar˜

componentes reales, el comportamiento deseado.

2. DESARROLLO

Considerando la gu´ıa 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´ 0 y 1 que la resistencia pull-up sera´ habilitada y en los pines 2 y 3 sera´ deshabilitada.

declara en los pines

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 del Counter/Timer es definido en los bits WGM00, WGM01

Figura 1. bits de registro TCCR0A

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´

El modo de operacion´

valor 0.

y siempre tendran´ El modo de operacion´ valor 0. Figura 2. Bits 0 y 1 Los

Figura 2.

Bits 0 y 1

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

bits 4 y 5 controlan el funcionamiento del registro OC0B. Figura 3. TCCR0A en modo No

Figura 3. TCCR0A en modo No PWM

del registro OC0B. Figura 3. TCCR0A en modo No PWM Figura 4. TCCR0A en modo 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 5. TCCR0A en modo PWM fase correcta

Figura 5. TCCR0A en modo PWM fase correcta Figura 6. TCCR0A en modo No PWM Figura

Figura 6. TCCR0A en modo No PWM

en modo PWM fase correcta Figura 6. TCCR0A en modo No PWM Figura 7. TCCR0A en

Figura 7. TCCR0A en modo PWM Rapido´

TCCR0A en modo No PWM Figura 7. TCCR0A en modo PWM Rapido´ Figura 8. TCCR0A en

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.

mantiene el control de los bits del Timer/Counter 0B , el cual contiene 8 bits que

Figura 9. TCCR0B

Figura 10. TCCR0B TCNT0 este registro Timer/Counter se configura de manera ascendente o descendiente, dando

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´

cuando el contador esta´ corriendo, lleva consigo un riesgo de

perder una coincidencia entre los registros TCNT0 y OCR0x.

el siguiente ciclo de reloj del Timer. Esta modificacion,´

en 0. La escritura en el registro TCNT0 borra la coincidencia en

´

escritura en el registro TCNT0 borra la coincidencia en ´ Figura 11. TCNT0 OCR0A, Output compare

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.

una Interrupcion´ o para generar una onda por el pin OC0A. 2) Determinar que funcion´ Figura

2) Determinar que funcion´

Figura 12. OCR0A

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 espec´ıficamente.

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 ultimo´ se define un ciclo infinito con la condicion´ de aumentar el contador de 0 a 255 cada 10 milisegundos de 1 en

1.

con la condicion´ de aumentar el contador de 0 a 255 cada 10 milisegundos de 1

Figura 13. Codigo´

Laboratorio 2

4) Basado en el ejemplo presentado en la gu´ıa, simule y realice un codigo´ 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

el cual controle la velocidad de dos

Para realizar este codigo´ se utilizaron los pines del puerto D como salida al igual que en la gu´ıa 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 . a ”para 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.

del pin 2. Donde posteriormente se cambia el valor de . a . a 0 reiniciando

Figura 14. Codigo´

Tarea 02

Figura 15. Circuito Proteus Figura 16. Led Rojo

Figura 15. Circuito Proteus

Figura 15. Circuito Proteus Figura 16. Led Rojo

Figura 16. Led Rojo

Figura 17. Led Verde Figura 18. Led Azul

Figura 17. Led Verde

Figura 17. Led Verde Figura 18. Led Azul

Figura 18. Led Azul

CONCLUSIONES

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 mi- crocontroladores 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.

REFERENCIAS

[1] Guia Lab 02;Marco Rivera [2] Guia Tarea 02;Marco Rivera [3] Datasheet LM7805; [4] Datasheet Atmega168; [5] Datasheet Tip122; [6] Gu´ıa 09 y Gu´ıa 12; Marco Rivera [7] Tutorial AVR desde 0; Felixls; http://dl.dropbox.com/u/24861335/Felixls/tutoriales/TutorialAVRdesde0.pdf