laboratorio 1
Post on 20-Jan-2016
110 Views
Preview:
TRANSCRIPT
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
IEE 256 SISTEMAS DIGITALES - LABORATORIO SEMESTRE 2014-1 Ing. Zenón Cucho M. 1
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 Atmega88P, 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”.
1 módulo de E/S
1 Cable ISP de programación para el ATmega88
1 computadora personal
1 Fuente de alimentación
1 Cables de fuente
10 cables de E/S III. 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 puerto 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: o ¿Cuál será el valor lógico de los pines PB0 y PB1, cuando los interruptores están cerrados?
La respuesta es “0” lógico. o ¿Y cuál será el valor lógico de estos pines cuándo el interruptor está abierto, tal como se
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.
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
IEE 256 SISTEMAS DIGITALES - LABORATORIO SEMESTRE 2014-1 Ing. Zenón Cucho M. 2
¿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 puerto C */
Circuito esquemático simplificado:
. ..
ATMEGA88
R1
R2
R3
VDD= 5V
R1=R2=R3=R4=180 Ω.
R4
PD0
PD3
PD2
PD1
PB0
PC0
PB1K1
K2
K0
K0,K1,K2 son interruptores
D1 D2 D3 D4
.
Diagrama de Flujo
¿habilitador
= 1?
SI
Decodificador
Leer estado de
habilitador
Inicio
NO
Valor de
selectores
Configuración de Puertos
Salida: 4 leds
Entrada: 3 interruptores
Activar
salida 0
Activar
salida 1
Activar
salida 2
Activar
salida 3
Apagar LEDs
00
01 10
11
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
IEE 256 SISTEMAS DIGITALES - LABORATORIO SEMESTRE 2014-1 Ing. Zenón Cucho M. 3
Programa
//************************************************************************** // PROYECTO1.c // Descripcion: El programa simula un decodificador de 2x4 // Created: 8/20/2013 12:29:14 PM // Author: Zenón Cucho //************************************************************************* #include <avr/io.h> //**************************************************************************** //*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 */
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
IEE 256 SISTEMAS DIGITALES - LABORATORIO SEMESTRE 2014-1 Ing. Zenón Cucho M. 4
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
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
IEE 256 SISTEMAS DIGITALES - LABORATORIO SEMESTRE 2014-1 Ing. Zenón Cucho M. 5
Circuito esquemático simplificado:
PD0
PD1
PD2
ATMEGA88 R1
R2
R3
VDD= 5V . .
R1=R2=R3=180 Ω.
.
.VDD= 5V
R4=10K
. PB0
D1 D2 D3
K0
Diagrama de Flujo
¿Pulsador
presionado?No
Sí
Sí
No
¿Pulsador
liberado?
Contador
Inicio
Configuración de Puertos
Salida: 3 leds
Entrada: 1 pulsador
salida ß 0
salida ß salida + 1
¿salida =
MAXIMO?
No
Sí
salida ß 0
Mostrar salida en
LEDs
1
1
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
IEE 256 SISTEMAS DIGITALES - LABORATORIO SEMESTRE 2014-1 Ing. Zenón Cucho M. 6
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 <avr/io.h> // librería de E/S #define MAXIMO 7 // 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 ; salida= 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
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
IEE 256 SISTEMAS DIGITALES - LABORATORIO SEMESTRE 2014-1 Ing. Zenón Cucho M. 7
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 _delay_ms( ) 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
Encender LED
Retardo(500ms)
Apagar LED
Retardo(500ms)
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
IEE 256 SISTEMAS DIGITALES - LABORATORIO SEMESTRE 2014-1 Ing. Zenón Cucho M. 8
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 <avr/io.h> #include <util/delay.h> //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.
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
IEE 256 SISTEMAS DIGITALES - LABORATORIO SEMESTRE 2014-1 Ing. Zenón Cucho M. 9
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 <avr/io.h> #include <util/delay.h> #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);
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
IEE 256 SISTEMAS DIGITALES - LABORATORIO SEMESTRE 2014-1 Ing. Zenón Cucho M. 10
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)
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA
IEE 256 SISTEMAS DIGITALES - LABORATORIO SEMESTRE 2014-1 Ing. Zenón Cucho M. 11
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
top related