PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
LABORATORIO LABORATORIO 1
Familiarización con las herramientas de desarrollo y Manejo de puertos E/S I.
OBJETIVO Aprender a desarrollar programas elementales con el microcontrolador Atmega8 8P, utilizando instrucciones básicas. Aprender a manejar el entorno de desarrollo Atmel Studio y el entorno VMLAB para editar, compilar y simular un programa Aprender a utilizar la herramienta de programación AvrPUCP para grabar y ejecutar un programa en el microcontrolador Atmega88.
II.
MATERIALES Y EQUIPOS 1 módulo de entrenamiento “AvrPUCP -Mega88”. -Mega88”. 1 módulo de E/S 1 Cable ISP de programación para el ATmega88
III.
1 computadora personal 1 Fuente de alimentación 1 Cables de fuente 10 cables de E/S
HERRAMIENTAS DE DESARROLLO Atmel Studio 6.0 VMLAB v3.15 AVRPUCP 0.98
IV.
PROCEDIMIENTO A continuación se presenta el desarrollo de 3 programas, los cuáles debe editarlo con las siguientes herramientas para utilizar con el microcontrolador ATmega88: Atmel Studio 6.0 o superior: Para editar y compilar el programa VMLAB: Para simular la ejecución del programa AvrPUCP: Para programar (grabar el código m áquina) el microcontrolador Atmega88.
4.1 Primer Proyecto. El primer ejemplo consiste en implementar un decodificador de 2x4, con un habilitador de entrada. Objetivos específicos Aprender a leer a leer un dato mediante el registro PINB del puert o B. Aprender a activar la resistencia interna pull up del microcontrolador Aprender a usar las funciones lógicas para enmascarar bits. Conexiones Los leds están conectados a los pines PD0, PD1, PD2, PD3, para indicar las salidas del decodificador. Los interruptores K1 y K2 están conectados a PB0 y PB1, para indicar las entradas del decodificador. El habilitador K0 está conectado a PC0. Procedimiento Se dibuja el circuito esquemático Se dibuja el diagrama de flujo En el circuito: ¿Cuál será el valor lógico lógico de los pines PB0 y PB1, cuando los los interruptores están cerrados? o La respuesta es “0” lógico. “0” lógico. ¿Y cuál será el valor lógico de estos pines cuándo el interruptor está abierto, tal como se o muestra en el circuito? Es indeterminado. Por tanto, para nuestro ejemplo debemos activar las resistencias “pull up” que tiene cada pin de E/S del microcontrolador. En este caso la resistencia pull up que corresponde al pin PB0, PB1 y PC0. I EE 256
SISTEMA S DI GIT AL ES
-
LAB ORATORIO
SEM ESTRE ESTRE 2014-1 2014-1
Ing. Zenón Cucho M.
1
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
¿Cómo se logra activar estas resistencias pull up? Se configura el pin como entrada y luego se escribe un “1” lógico en la posición del bit asociado al registro PORT: DDRB = 0x00; /* Configuracion como entrada del puerto B y C */ DDRC = 0x00; PORTB = 0x03; /* Resistencias pull up activas en el pin 0 y 1 del puerto B */ PORTC = 0x01; /* Para activar la resistencia pull up del pin 0 del p uerto C */
Circuito esquemático simplificado:
. .
.
VDD= 5V
D1
D2
. D3
D4
R1 PD0
ATMEGA88 R2 PD1 PB0
R3
PB1
K1 K2
PD2
PC0 R4 K0
PD3
R1=R2=R3=R4=180 Ω.
K0,K1,K2 son interruptores
Diagrama de Flujo Decodificador Inicio
Configuración de Puertos Salida: 4 leds Entrada: 3 interruptores
Leer estado de habilitador
SI
01
Activar salida 0
I EE 256
11 10
Activar salida 1
SISTEMA S DI GIT AL ES
NO
Apagar LEDs
Valor de selectores
00
¿habilitador = 1?
Activar salida 2
-
LAB ORATORIO
Activar salida 3
SEM ESTRE 2014-1
Ing. Zenón Cucho M.
2
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
Programa //************************************************************************** // PROYECTO1.c // Descripcion: El programa simula un decodificador de 2x4 // Created: 8/20/2013 12:29:14 PM // Author: Zenón Cucho //************************************************************************* #include
//**************************************************************************** //*Definicion de la funcion: configuracion de puertos *********************** //**************************************************************************** void Configuracion_puertos(void) { DDRB = 0x00; /* Configuracion como entrada del puerto B y C */ DDRC = 0x00; PORTB = 0x03; /* Resistencias pull up activas en el pin 0 y 1 del puerto B */ PORTC = 0x01; /* Para activar la resistencia pull up del pin 0 del puerto C */ DDRD = 0xff; /* Configuración como salida el puerto D */ PORTD = 0x00; /* Inicialmente las salidas muestran 0 */ } //**************************************************************************** // Programa Principal ******************************************************** //**************************************************************************** int main(void) { int hab,sel; /* variables globales hab= habilitador y sel= selectores */ Configuracion_puertos(); while(1) { hab = PINC & 0x01; /* lectura del habilitador conectado a PC0 ***** si hab=0, los leds están apagados */ if(hab) { sel = PINB & 0X03; /* lectura de los selectores en PB0, PB1 */ switch(sel) { case 0: PORTD = 0x01; /* Salida 0 activa */ break; case 1: PORTD = 0x02; /* Salida 1 activa */ break; case 2: PORTD = 0x04; /* Salida 2 activa */ break; case 3:
}
PORTD = 0x08; /* Salida 3 activa */ break; } /* Fin de switch */ } else PORTD = 0x00; /*Decodificador deshabilitado: salidas desactivadas */ /*Fin de while */
}
I EE 256
SISTEMA S DI GIT AL ES
-
LAB ORATORIO
SEM ESTRE 2014-1
Ing. Zenón Cucho M.
3
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
Simulación en VMLAB Utilizar el siguiente archivo *prj K0 PC0 VSS LATCHED ; K0 es el interruptor que representa al habilitador K1 PB0 VSS LATCHED ; K1 y K2 son las entrdas selectoras del decodificador K2 PB1 VSS LATCHED ; Se define el hardware de la salida (4 leds) del circuito D1 VDD N1 R1 N1 N2 180 X1 ND2 PD0 PD0 N2 D2 VDD N3 R2 N3 N4 180 X2 ND2 PD1 PD1 N4 D3 VDD N5 R3 N5 N6 180 X3 ND2 PD2 PD2 N6 D4 VDD N7 R4 N7 N8 180 X4 ND2 PD3 PD3 N8
Resultado Las salidas del decodificador se observa en los leds, para cada valor de la entrada PB0 y PB1. Si el habilitador conectado al bit 0, del puerto C tiene un “0” no se observa ningún led prendido.
4.2 Segundo proyecto. El segundo proyecto consiste en implementar un contador de 3 bits. La cuenta se incrementa luego de presionar y soltar un pulsador. Objetivos específicos • Aprender a configurar los puertos como entrada y salida • Aprender a manejar un pulsador • Aprender a usar las funciones lógicas para enmascarar bits. Procedimiento - Los leds de salida del contador están conectados a PD0, PD1, PD2. - El pulsador de entrada (K0) está conectado a PB0. - Edite el programa en Atmel Studio 6.0 y compruebe la simulación con el entorno VMLAB - Implemente el programa en el Módulo AvrPUCP y demuestre su funcionamiento
I EE 256
SISTEMA S DI GIT AL ES
-
LAB ORATORIO
SEM ESTRE 2014-1
Ing. Zenón Cucho M.
4
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
Circuito esquemático simplificado:
. .
.
VDD= 5V
D1
.
VDD= 5V
D2
D3
R1
ATMEGA88 PD0
K0
R2
.
PD1 PB0
R3 PD2
R4=10K
R1=R2=R3=180 Ω.
Diagrama de Flujo Contador Inicio
Configuración de Puertos Salida: 3 leds Entrada: 1 pulsador
salida ß salida + 1
salida ß 0
¿salida = MAXIMO?
No
1 Sí
¿Pulsador presionado?
salida ß 0 No
Sí Mostrar salida en LEDs ¿Pulsador liberado?
No 1
Sí
I EE 256
SISTEMA S DI GIT AL ES
-
LAB ORATORIO
SEM ESTRE 2014-1
Ing. Zenón Cucho M.
5
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
Programa //***************************************************************************** * PROYECTO2.c * Descripcion: Se implementa un contador de 3 bits, cuenta de 0 a 7 y se repite. * La cuenta se incrementa al presionar y soltar un pulsador * Created: 8/20/2013 2:10:09 PM * Author: Zenón Cucho //***************************************************************************** #include #define MAXIMO 7
// librería de E/S // define una constante
//***************************************************************************** // Definicion de la funcion: configuracion de puertos ************************ // **************************************************************************** void Configuracion_puertos(void) { DDRB = 0x00; // Se define el puerto B como entrada DDRD = 0x07; // Se define 3 pines del puerto D como salida PORTD = 0x00; // Inicialmente los leds están apagados } // ***************************************************************************** // Programa Principal ********************************************************** // ***************************************************************************** int main(void) { int p0, salida=0; // variables p0= pulsador ; sa lida= leds Configuracion_puertos(); while(1) { do{ // espera que se presione el pulsador (PB0) p0 = PINB & 0x01; }while (p0 == 0); do{ // espera que se libere el pulsador (PB0) p0 = PINB & 0x01; }while (p0 == 1); salida++; // actualiza el valor de la cuenta if (salida == MAXIMO) { salida = 0; // para reiniciar
}
} PORTD = salida; // muestra el valor actual en los leds } // fin de while // fin del programa
Simulación en VMLAB Utilizar el siguiente archivo *prj D1 VDD N1 ; Led 1 está conectado a PD0 R1 N1 N2 180 ; X1 ND2 PD0 PD0 N2 D2 VDD N3 ; Led 2 está conectado a PD1 R2 N3 N4 180 X2 ND2 PD1 PD1 N4 D3 VDD N5 ; Led 3 está conectado a PD2 R3 N5 N6 180 X3 ND2 PD2 PD2 N6 ; El circuito de entrada está definido por: K0 VDD PB0 ; Pulsador K0 está conectado a PB0 R4 PB0 VSS 10K I EE 256
SISTEMA S DI GIT AL ES
-
LAB ORATORIO
SEM ESTRE 2014-1
Ing. Zenón Cucho M.
6
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
Resultado Se observa, cuando PORTD=0b00000011, los leds D1 y D2 están encendidos. El pulsador K0 está conectado al bit b0, del puerto B (ver el registro PINB).
4.3 Tercer proyecto. El tercer proyecto consiste en implementar un programa que prenda y apague un diodo led por un tiempo establecido. En el ejemplo el diodo led está encendido por 500 ms y está apagado por 1000 ms. El diodo led está conectado al puerto PB3. Objetivos específicos: • Aprender a utilizar funciones incluidas en la Biblioteca de Atmel Studio 6.0 • Aprender a utilizar la función _d el ay _m s ( ) para generar una demora de tiempo (pausa) durante la ejecución de un programa. Sintaxis de la función _delay_ms( ) _delay_ms(ms) Parámetro de entrada: ms, indica el tiempo en milisegundos Parámetro de salida: ninguno Procedimiento - Edite el programa en Atmel Studio 6.0 y compruebe la simulación con el entorno VMLAB - Implemente el programa en el Módulo AvrPUCP y demuestre su funcionamiento Diagrama de Flujo Encendido / Apagado Inicio
Configuración de puertos Salida: 1 LED Entrada: ninguna
I EE 256
SISTEMA S DI GIT AL ES
-
Encender LED
Apagar LED
Retardo(500ms)
Retardo(500ms)
LAB ORATORIO
SEM ESTRE 2014-1
Ing. Zenón Cucho M.
7
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
Programa /* * PROYECTO3.c * Descripcion: El programa prende un diodo led por 500 ms y lo apaga por 1000 seg. * Created: 8/21/2013 5:12:51 PM * Author: Zenón Cucho */ #include #include
//Se agrega esta Biblioteca para utilizar la funcion delay(ms)
int main(void) { DDRB=0X08; // pin 3 del puerto B como salida while(1) { PORTB=0X08; // PB3 <---"1" ;Inicialmente el led está encendido _delay_ms(500); // tiempo de encendido 500 ms PORTB=0X00; // PB3<--"0" ; el diodo led se apaga _delay_ms(1000); // tiempo de apagado 1000 ms } }
Simulación en VMLAB Utilizar el siguiente archivo *prj D1 VDD N1 ; Led 1 está conectado a PB3 R1 N1 N2 180 ; X1 ND2 PB3 PB3 N2
Resultado Se observa el tiempo de la simulación, debe considerarse que el tiempo del simulador comparado con el tiempo real demora más tiempo.
I EE 256
SISTEMA S DI GIT AL ES
-
LAB ORATORIO
SEM ESTRE 2014-1
Ing. Zenón Cucho M.
8
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
4.4 Cuarto proyecto. Se tiene 8 diodos conectados al puerto D del microcontrolador ATmega88, el proyecto consiste en implementar un programa que muestra el desplazamiento de un led encendido de derecha a izquierda y viceversa de forma circular. Inicialmente el led conectado a PD0 está encendido y los otros están apagados.Considere un retardo de 300 ms, por cada cambio en los leds. Dato Inicial: Se desplaza cada 300 ms
. .
. .
. .
. .
. .
. .
. .
. .
.
Al llegar a prenderse, el último led, se repite de izquierda a derecha
Programa /* * Ejemplo Cuarto_proyecto.c * Created: 3/14/2014 4:58:23 PM * Author: Zenón Cucho //Fuente: Joe Pardue programming for microcontrollers */ #include #include #define F_CPU=10000000UL int main(void) { int n; DDRD = 0XFF; // Configuración del puerto D como salida while(1) // Loop { for (n=1;n<=128;n=2*n) { PORTD = n; _delay_ms(300); } for (n=128;n>1;n=n/2) { PORTD = n; _delay_ms(300); } } }
I EE 256
SISTEMA S DI GIT AL ES
-
LAB ORATORIO
SEM ESTRE 2014-1
Ing. Zenón Cucho M.
9
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
Simulación en VMLAB Utilizar el siguiente archivo *prj D1 VDD N1 R1 N1 N2 180 X1 ND2 PD0 PD0 N2 D2 VDD N3 R2 N3 N4 180 X2 ND2 PD1 PD1 N4 D3 VDD N5 R3 N5 N6 180 X3 ND2 PD2 PD2 N6 D4 VDD N7 R4 N7 N8 180 X4 ND2 PD3 PD3 N8 ; D5 VDD N9 R5 N9 N10 180 X5 ND2 PD4 PD4 N10 D6 VDD N11 R6 N11 N12 180 X6 ND2 PD5 PD5 N12 D7 VDD N13 R7 N13 N14 180 X7 ND2 PD6 PD6 N14 D8 VDD N15 R8 N15 N16 180 X8 ND2 PD7 PD7 N16
Problemas Propuestos: Nota: Comprobar el funcionamiento usando el entorno VMLAB: 1) Un pulsador (K1) y 4 diodos leds (D1, D2, D3, D4) están conectados al microcontrolador ATmega88 en los pines PC5, PD2, PD3, PD4 y PD5 respectivamente. Inicialmente D1 está prendido y los otros 3 leds están apagados. Escribir un programa que cumpla con la condición siguiente: Al presionar y soltar el pulsador conectado al pin PC5 se prenden los diodos apagados y se apaga el led que estaba prendido. Hacer: a) Diagrama esquemático b) Diagrama de flujo c) Programa 2) Se tiene conectado al microcontrolador ATmega88, 2 pulsadores y 4 diodos leds. Al presionar y soltar el pulsador 1 se debe mostrar ascendentemente los números impares de 1 a 15 y al presionar y soltar el pulsador 2 se debe mostrar la cuenta de los números pares de 0 a 14. La cuenta se modifica luego de presionar y soltar el pulsador correspondiente y comienza desde el valor inicial 0 ó 1. Si llega a su valor máximo se reinicia la cuenta. Ejemplo: Al usar el pulsador 1 y el pulsador 2, consecutivamente, se muestra: 1 3 5 7 9 11 0 2 4 6 Hacer: a) Diagrama esquemático b) Diagrama de flujo c) Programa (Comprobar su funcionamiento)
I EE 256
SISTEMA S DI GIT AL ES
-
LAB ORATORIO
SEM ESTRE 2014-1
Ing. Zenón Cucho M.
10
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
3) En el anterior programa, la cuenta de los números impares se modifica cada 500 ms y la cuenta de los números pares cada 800 ms. Los pulsadores 1 y 2 se utilizan solo para comenzar la cuenta. Implemente el programa. Use la función _delay_ms(ms) 4) Se tienen conectados al microcontrolador ATmega88 cuatro leds y un pulsador, se pide mostrar una cuenta binaria ascendente en los leds con las siguientes características: Es una cuenta ascendente de 5 a 12 El valor inicial de la cuenta es cinco. La cantidad de pulsos requeridos para permitir incrementar la cuenta se incrementa en uno cada vez. Es decir, si inicialmente la cuenta está en 5, al presionar una vez el pulsador la cuenta se incrementa a 6, luego, para incrementar la cuenta a 7 se requerirán dos pulsos, luego, para mostrar el 8 se requerirán tres pulsos, y así sucesivamente hasta llegar a 12, luego termina. Conexiones: Leds: Diodos leds conectados a: PB3, PB2, PB1, PB0 (LSB) Pulsador: conectado al pin PC5 5) Desarrollar un programa para el microcontrolador ATmega88 que implemente un contador ascendente de 4 bits y con razón constante. El contador será gobernado por un pulsador KA para controlar la cuenta ascendente. La razón a la cual aumentará el valor de cuenta se obtiene de 3 interruptores K0, K1 y K2. El valor de cuenta deberá ser mostrado en 4 leds. Considerar que los posibles valores para la cuenta son los números del 0 al 15 y que esta cuenta es circular (después del 15 sigue el 0 y antes del 0 viene el 15) Considerar también como primer valor de cuenta el número 8. Para las conexiones considerar: Pulsador: conectado a PC2 y los interruptores a PD0 (LSB), PD1, PD2 y PD3 Leds conectados a PB3, PB2, PB1 y PB0 (LSB) 6) Modificar el problema anterior, agregando un pulsador conectado a PC5 para disminuir la cuenta, cuya razón es la misma determinado por los 3 interruptores. 7) Para las siguientes conexiones: Entradas: - Interruptores SW1, SW2, SW3 y SW4 conectados a PC0, PC1, PC2 y PC3 respectivamente. - Pulsador P1 conectado a PC4. Salidas: - Diodos leds D4, D3, D2, D1 conectados a PD5, PD4, PD3 y PD2 (LSB) respectivamente para ver el número. Implementar un programa que cumpla los siguientes requerimientos: Los interruptores permiten definir un número de 4 bits (SW4 bit más significativo, SW1 bit menos significativo, interruptor cerrado “0”, abierto “1”). Cuando el pulsador está presionado, se muestra en los LED’s, en binario, la cantidad de 1’s en el número (led prendido = 1). Cuando el pulsador no está presionado, se muestra el número seleccionado con los interruptores. Ejemplo: Si SW2 y SW4 están abiertos, y SW1y SW3 están cerrados, el número es 1010. Si se pulsa el pulsador, debe aparecer: D4 apagado, D3 apagado, D2 encendido, D1 apagado. Eso representa al número 0010 que es 2 en decimal, y es la cantidad de 1’s en el número. Si se suelta el pulsador, se prenderían los LEDs D4, D2 y se apagarían D3 y D0.
Material de trabajo para el laboratorio 1: Elaborado por: Ing. Zenón Cucho Mendoza Revisado por: Ing. Freri Orihuela Quivaqui. Semestre: 2014.1
San Miguel, marzo de 2014 I EE 256
SISTEMA S DI GIT AL ES
-
LAB ORATORIO
SEM ESTRE 2014-1
Ing. Zenón Cucho M.
11