Академический Документы
Профессиональный Документы
Культура Документы
LABORATORIO 1
III.
IV. PROCEDIMIENTO A continuacin se presenta el desarrollo de 3 programas, los cules 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 ejecucin del programa AvrPUCP: Para programar (grabar el cdigo mquina) el microcontrolador Atmega88. 4.1 Primer Proyecto. El primer ejemplo consiste en implementar un decodificador de 2x4, con un habilitador de entrada. Objetivos especficos 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 lgicas para enmascarar bits. Conexiones Los leds estn conectados a los pines PD0, PD1, PD2, PD3, para indicar las salidas del decodificador. Los interruptores K1 y K2 estn conectados a PB0 y PB1, para indicar las entradas del decodificador. El habilitador K0 est conectado a PC0. Procedimiento Se dibuja el circuito esquemtico Se dibuja el diagrama de flujo En el circuito: o Cul ser el valor lgico de los pines PB0 y PB1, cuando los interruptores estn cerrados? La respuesta es 0 lgico. o Y cul ser el valor lgico de estos pines cundo 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.
IEE 256 SISTEMAS DIGITALES - LABORATORIO SEMESTRE 2014-1 Ing. Zenn Cucho M. 1
Cmo se logra activar estas resistencias pull up? Se configura el pin como entrada y luego se escribe un 1 lgico en la posicin 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 */
VDD= 5V
. .
D1
.
D2
.
D3 D4
R1 PD0
ATMEGA88
R2 PD1 PB0 K1 K2 K0 PB1 PC0 R4 PD3 PD2 R3
R1=R2=R3=R4=180 .
Diagrama de Flujo
Decodificador
Inicio
SI
habilitador = 1?
NO
00 01
Valor de selectores
10
Apagar LEDs
11
Activar salida 0
Activar salida 1
Activar salida 2
Activar salida 3
IEE 256
SEMESTRE 2014-1
Programa
//************************************************************************** // PROYECTO1.c // Descripcion: El programa simula un decodificador de 2x4 // Created: 8/20/2013 12:29:14 PM // Author: Zenn 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; /* Configuracin 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 estn 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 */
} }
IEE 256
SEMESTRE 2014-1
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 ningn 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 especficos Aprender a configurar los puertos como entrada y salida Aprender a manejar un pulsador Aprender a usar las funciones lgicas para enmascarar bits. Procedimiento - Los leds de salida del contador estn 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 simulacin con el entorno VMLAB - Implemente el programa en el Mdulo AvrPUCP y demuestre su funcionamiento
IEE 256
SEMESTRE 2014-1
. .
D1 D2
.
D3
VDD= 5V
ATMEGA88
PD0
R1
K0 R2
.
R4=10K
Diagrama de Flujo
Contador
Inicio
salida salida + 1
salida 0 1
salida = MAXIMO?
No
S Pulsador presionado?
salida 0 No
No 1
IEE 256
SEMESTRE 2014-1
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: Zenn Cucho //***************************************************************************** #include <avr/io.h> #define MAXIMO 7 // librera 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 estn 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
Resultado Se observa, cuando PORTD=0b00000011, los leds D1 y D2 estn 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 especficos: Aprender a utilizar funciones incluidas en la Biblioteca de Atmel Studio 6.0 Aprender a utilizar la funcin _delay_ms( ) para generar una demora de tiempo (pausa) durante la ejecucin de un programa. Sintaxis de la funcin _delay_ms( ) _delay_ms(ms) Parmetro de entrada: ms, indica el tiempo en milisegundos Parmetro de salida: ninguno Procedimiento - Edite el programa en Atmel Studio 6.0 y compruebe la simulacin con el entorno VMLAB - Implemente el programa en el Mdulo AvrPUCP y demuestre su funcionamiento Diagrama de Flujo
Encendido / Apagado
Inicio
Encender LED
Apagar LED
Retardo(500ms)
Retardo(500ms)
IEE 256
SEMESTRE 2014-1
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: Zenn Cucho */ #include <avr/io.h> #include <util/delay.h>
int main(void) { DDRB=0X08; // pin 3 del while(1) { PORTB=0X08; _delay_ms(500); PORTB=0X00; _delay_ms(1000); } }
// // // //
PB3 <---"1" ;Inicialmente el led est encendido tiempo de encendido 500 ms PB3<--"0" ; el diodo led se apaga tiempo de apagado 1000 ms
Resultado Se observa el tiempo de la simulacin, debe considerarse que el tiempo del simulador comparado con el tiempo real demora ms tiempo.
IEE 256
SEMESTRE 2014-1
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 estn apagados.Considere un retardo de 300 ms, por cada cambio en los leds. Dato Inicial: Se desplaza cada 300 ms
.
.
. . .
. .
. .
. .
. .
. .
. .
Programa
/* * Ejemplo Cuarto_proyecto.c * Created: 3/14/2014 4:58:23 PM * Author: Zenn 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; // Configuracin 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); } } }
IEE 256
SEMESTRE 2014-1
Problemas Propuestos: Nota: Comprobar el funcionamiento usando el entorno VMLAB: 1) Un pulsador (K1) y 4 diodos leds (D1, D2, D3, D4) estn conectados al microcontrolador ATmega88 en los pines PC5, PD2, PD3, PD4 y PD5 respectivamente. Inicialmente D1 est prendido y los otros 3 leds estn apagados. Escribir un programa que cumpla con la condicin 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 esquemtico 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 nmeros impares de 1 a 15 y al presionar y soltar el pulsador 2 se debe mostrar la cuenta de los nmeros 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 mximo 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 esquemtico b) Diagrama de flujo c) Programa (Comprobar su funcionamiento)
IEE 256
SEMESTRE 2014-1
10
3) En el anterior programa, la cuenta de los nmeros impares se modifica cada 500 ms y la cuenta de los nmeros pares cada 800 ms. Los pulsadores 1 y 2 se utilizan solo para comenzar la cuenta. Implemente el programa. Use la funcin _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 caractersticas: 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 requerirn dos pulsos, luego, para mostrar el 8 se requerirn 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 razn constante. El contador ser gobernado por un pulsador KA para controlar la cuenta ascendente. La razn 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 nmeros del 0 al 15 y que esta cuenta es circular (despus del 15 sigue el 0 y antes del 0 viene el 15) Considerar tambin como primer valor de cuenta el nmero 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 razn 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 nmero. Implementar un programa que cumpla los siguientes requerimientos: Los interruptores permiten definir un nmero de 4 bits (SW4 bit ms significativo, SW1 bit menos significativo, interruptor cerrado 0, abierto 1). Cuando el pulsador est presionado, se muestra en los LEDs, en binario, la cantidad de 1s en el nmero (led prendido = 1). Cuando el pulsador no est presionado, se muestra el nmero seleccionado con los interruptores. Ejemplo: Si SW2 y SW4 estn abiertos, y SW1y SW3 estn cerrados, el nmero es 1010. Si se pulsa el pulsador, debe aparecer: D4 apagado, D3 apagado, D2 encendido, D1 apagado. Eso representa al nmero 0010 que es 2 en decimal, y es la cantidad de 1s en el nmero. Si se suelta el pulsador, se prenderan los LEDs D4, D2 y se apagaran D3 y D0.
Material de trabajo para el laboratorio 1: Elaborado por: Ing. Zenn Cucho Mendoza Revisado por: Ing. Freri Orihuela Quivaqui. Semestre: 2014.1