Programaci on o´ n de Microcontroladores Semestre 2 - 2015 - Tarea 02 Jofre Horacio, Oviedo Jazmin, Vergara Patricio
[email protected],
[email protected],
[email protected],
[email protected],
[email protected] [email protected] Resumen
En este informe se presenta el desarrollo de la tarea 02 del m m´odulo o´ dulo Taller de Microcontroladoes, la cual consiste en investigar y explicar el c´ codigo o´ digo del programa utilizado en el laboratorio 02, y adem´ ademas a´ s aplicar lo aprendido en la creacion de un c´ codigo o´ digo para controlar la velocidad de 2 motores DC. El laboratorio 02 consiste en un tutorial de microcontrolador AVR y simulaci´on on en software Proteus de un circuito de control de velocidad de un motor DC.
1.
´ I NTRODUCCI ON ´ Para disminuir las posibilidades de da nar n˜ ar los componentes al crear un circuito, es utilizado software de simulaci on,
como Proteus. El cual permite simular circuitos con microcontroladores a los cuales cargarles el programa deseado y ejecutarlo comprobando, sin da˜nar nar componentes reales, el comportamiento deseado. 2.
D ESARROLLO Considerando la gu´ gu´ıa ıa Lab. 02:
´ de este tutorial. 1) Determinar la funci´ funcion o´ n de los registros utilizados en el programa que se carg o´ en la simulacion 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 f´abrica. abrica. Para declarar un pin como salida se le asignar´a 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 asignar´a el valor 1 y para declararlo en bajo el valor 0. Cuando un pin est´a configurado como entrada se utiliza para configurar la resistencia pull-up del pin, con el valor 1 se habilitar´a la resistencia y con el valor 0 se deshabilitar´a. 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. Adem´as declara en los pines 0 y 1 que la resistencia pull-up ser a´ habilitada y en los pines 2 y 3 ser a´ deshabilitada.
´ TCCR0A TCCR0A o Timer Timer/Co /Count unter er Contro Controll Regis Register ter,, este este es un modulo interno del microcontr microcontrolado olador, r, sirve para hacer 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 operaci´on 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 tendr´an 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 R´apido
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 R´apido
Figura 8. TCCR0A en modo PWM Fase correcta
TCCR0B o Timer/Counter Control Register, este es un m´odulo 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 autom´aticamente en 0. La escritura en el registro TCNT0 borra la coincidencia en ´ el siguiente ciclo de reloj del Timer. Esta modificaci´on, cuando el contador est´a 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, ´ o se puede definir OCR0A como un registro de tope. Se puede usar una coincidencia para disparar una Interrupci on para generar una onda por el pin OC0A.
Figura 12. OCR0A
2) Determinar que funci´on 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 r a´ pido, limpia el registro OC0A, inicia el modo comparaci on, 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 est´e generando ning´un pulso. OCR0A = 0; Se inicia en 0 para que al ejecutar el programa el microcontrolador no es generando ning u´ n 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 se n˜ al PWM y un contador de 256 valores, donde cada 10 milisegundos aumenta 1 valor hasta llegar a 256. Este programa est´a escrito en el lenguaje C, por lo que es necesario cargar las ibrerias a utilizar. Al comenzar el programa principal, se configurar´an los pines a utilizar, en este caso los pines del puerto D, se configurar a´ n como salidas en estado bajo, despues se seleccionar a´ la se n˜ al de salida a utilizar, PWM, se resetear a´ el contador y el comparador en valor 0. Por u´ ltimo se define un ciclo infinito con la condici o´ n de aumentar el contador de 0 a 255 cada 10 milisegundos de 1 en 1.
Figura 13. C´odigo Laboratorio 2
´ 4) Basado en el ejemplo presentado en la gu ´ıa, simule y realice un c odigo 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 c´odigo 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 girar´an en sentido contrario, un motor se alimnent´o por el polo negativo. Para la alimentaci´on de los leds se utiliz´o los pines 0, 1, y 2 del puerto D, donde a cada led se le asign´o una resistencia para evitar da˜nos. 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.
Figura 14. C´odigo 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 compilaci´o n de ese c´odigo 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 alimentaci o´ n de 5V, ejecuta el mismo funcionamiento que la simulaci´on 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; ıa 09 y Gu´ ıa 12; Marco Rivera [6] Gu´
[7] Tutorial AVR desde 0; Felixls; http://dl.dropbox.com/u/24861335/Felixls/tutoriales/TutorialAVRdesde0.pdf