Documente Academic
Documente Profesional
Documente Cultură
EQUIPAMIENTO UTILIZADO
SOFTWARE UTILIZADO
DESARROLLO
Enunciado:
Realizar un programa que permita contar cclicamente de 00 a 99 e indique el
conteo a travs de LEDs que indicando cada dgito como un cdigo BCD. El circuito del
contador posee dos pulsadores, P1 que permite ingresar los pulsos a contar y P2 para borrar
la cuenta en cualquier momento. El programa desarrollado tambin deber realizar un barrido
inicial de todos los LEDs cuando se energiza el circuito, permitiendo esto verificar si todos
los LEDs estn en buen estado antes de iniciar el conteo. El barrido mencionado debe
consistir en el encendido secuencial de todos los LEDs, como se indica en la siguiente figura.
En la cual, se muestra tambin los pulsadores con sus correspondientes resistencias de pull-
up conectadas al microcontrolador y el buffer necesario para proveer la corriente utilizada
por los LEDs.
Para resolver este ejercicio, se empez por realizar un diagrama de flujo (figura 1.2)
que indica el funcionamiento del programa. El mismo sirvi de punto de partida para realizar
la programacin del microcontrolador en trminos de definir la cantidad de variables
necesarias y la estructura del programa. El cdigo en lenguaje assembler se encuentra en el
anexo, al final del informe.
Cada funcin del programa se fue probando por separado en el simulador para
comprobar el correcto funcionamiento de las mismas, una vez finalizadas las pruebas con el
simulador se procedi a grabar el programa en el microcontrolador y se arm el circuito que
se muestra a continuacin.
En la figura 1.3 se esquematiza el puerto A del microcontrolador, el cual se utiliza
como salida del contador, conectado a las entradas de dos circuitos integrados ULN2003.
Estos CI son usados para suministrar la corriente necesaria para prender los 8 LEDs, ya que
si se conectan directamente al puerto del microcontrolador la corriente superara el lmite
mximo soportado por el mismo.
Figura 1.2: diagrama de flujo ejercicio 1
Figura 1.3: diagrama de conexin del ejercicio 1
Los resistores de pull-up se calculan con la finalidad de que se asegure que a la entrada
haya un nivel de tensin mnima que sea reconocible como un estado lgico alto ( ). El
diagrama de conexin de este resistor se aprecia en la figura 1.4
(5 3,3)
= =
1
= 1,7
Con que la resistencia de pull-up sea de una valor menor al hallado era suficiente, por lo que se
utiliz un valor de 10.
Experiencia 2: Automatismo para barrera (en lenguaje C).
Enunciado:
Se quiere automatizar un sistema de control de paso con barrera. El mismo consta de los
siguientes elementos:
Una barrera accionada por un motor con freno M.
Dos finales de carrera FS y FB para indicar si la barrera est arriba o abajo,
respectivamente.
Un pulsador P para que el encargado pueda subir y bajar la barrera.
Un semforo de dos colores: VERDE y ROJO.
Disear un sistema que permita accionar la barrera cumpliendo con el siguiente
funcionamiento:
El sentido de giro del motor M (subir o bajar la barrera) se controla a travs de un
cdigo de dos bits segn: 00 Apagado; 01 Subir; 10 Bajar.
La barrera normalmente est arriba. Si al arrancar el sistema de control la barrera no
estuviera arriba, el sistema debe subir la misma.
Cuando el encargado decide bajar la barrera, el mismo pulsa P. La barrera baja y
permanece as hasta que se pulse nuevamente P haciendo que la barrera suba.
Mientras la barrera est arriba, el semforo est en verde. En cualquier otro caso est
en rojo.
Figura 2.3: esquema de conexionado del L293 sealando la conexin para giro en ambos sentidos
CONCLUSIONES
Con la resolucin de los ejercicios se pudo obtener una mayor comprensin del
manejo de los puertos de entrada y salida digitales del microcontrolador ATmega2560.
Un aspecto a destacar fue la practicidad de trabajar sobre la placa Arduino Mega para
realizar la programacin del microcontrolador ya se encuentra montado con los componentes
necesarios para su funcionamiento y se tiene un fcil acceso a los pines del mismo.
Adems, la programacin en lenguaje C result ser ms fcil de realizar puesto que
es un lenguaje de mas alto nivel que el assembler, pero se pierde el control directo sobre los
registros y los espacios de memoria que se utilizan.
ANEXO: Cdigos de los ejercicios
Ejercicio 1.
;
; Lab1Ej1.asm
;
; Created: 29/09/2017 09:07:02 a.m.
; Author : Fabrizio Novello
;
.INCLUDE "m2560def.inc"
;DEFINICIONES
.EQU VAL=10
.EQU VAL_1=0X10
.EQU VAL_2=0XC6
.EQU VAL_3=0XC9 ;VALORES PARA EL DELAY
.EQU VAL_4=0X50 ;VAL_4=0X2C
.EQU VAL_5=0X5E ;VAL_5=0X4E
.EQU VAL_6=0XEF ;VAL_6=0XDF VALORES PARA EL DELAY2
.EQU SWITCH_BORRA=0
.EQU SWITCH_SUMA=1
.DEF SUMADOR=R18 ;DEFINO EL REGISTRO QUE ALMACENA LA SUMA
.DEF TEMP=R16 ;REGISTRO TEMPORAL
.DEF BORRAR=R17 ;REGISTRO PARA BORRAR
.DEF TEMP1=R23
.DEF TEMP2=R24
.DEF SAL=R25
.DEF CONT1=R19
.DEF CONT2=R20
.DEF CONT3=R21
.ORG 0x0000
//Configurar puertos
//El puerto A tiene todos los bits como salida
//El puerto C tiene los bits 0 y 1 como entrada, dems como salida
LDI TEMP,0XFF
OUT DDRA,TEMP
CLR TEMP
OUT PORTA,TEMP
LDI TEMP,0XFC
OUT DDRC,TEMP
;------------------------------------------------------------------------
/////////////////////////PROGRAMA PRINCIPAL//////////////////////////////
CLR BORRAR
CLR TEMP1
CLR TEMP2
CALL BARRE
//Con SBIS prueba si el pulsador para borrar est activado o
//si el pulsador para realizar la suma est activado
BUCLE: SBIS PINC,SWITCH_BORRA
CALL BORRA
SBIS PINC,SWITCH_SUMA
CALL SUMA
RJMP BUCLE
;------------------------------------------------------------------------
////////////////////////SUBRUTINAS///////////////////////////////////////
;BORRAR
/*
* Ej 2.c
*
* Created: 07/10/2017 06:57:47 p.m.
* Author : Fabrizio Novello
*/
//definiciones
#define m0 PA0 //bit 0 motor
#define m1 PA1 //bit 1 motor
#define fca PA2 //final de carrera alto
#define fcb PA3 //final de carrera bajo
#define puls PA4 //pulsador para activar la barrera
#define sv PA5 //semaforo verde
#define sr PA6 //semaforo rojo
#define F_CPU 16000000UL
//macros de usuario:
#include <avr/io.h>
#include <util/delay.h>
//El sentido de giro del motor M (subir o bajar la barrera) se controla a travs de
//un cdigo de dos bits segn:
//00 Apagado; 01 Subir; 10 Bajar.
int main(void)
{
DDRA=0b11100011; //configura puerto A 4 entradas y 2 salidas (MSB no se
//usa, se deja como salida)
while(is_high(PINA,fca))
{
sbi(PORTA,sr);
sbi(PORTA,m0);
}
}
if(is_low(PINA,fcb)&&is_low(PINA,puls)) //testea si la barrera est
//baja y se activa el pulsador
{
while(is_high(PINA,fca)) //sube la barrera hasta que se active
//el final de carrera
sbi(PORTA,m0);
}
}