Vous êtes sur la page 1sur 5

.

ARDUINO

RESUMEN: Anexo3

Arduino es una plataforma electrnica basada en 1.2 MATERIALES


hardware y software, este tiene entradas y salidas
administrables, este permite crear prototipos o medios, Computador con software Atmel Studio,
permite crear prototipos basados en hardware y software AXLoader o XLoader.
Adaptador fijo o variable de 5V a 1 A.
PALABRAS CLAVE: 1 placa Arduino (UNO, MEGA o Leonardo)
5 Resistencias de 330 Ohms a W.
Programacin, configuracin, atmel, puertos de entrada,
puertos de salida, arduino. Interrupccion, pulsador. 1 pulsador.
Protoboard (2 regletas).
ABSTRACT: Cables AWG 23 para Protoboard y cables
Jumpers.
Interrupts are signals that allow the controller to the 1 Teclado matricial.
normal flow of skit and run a particular piece of code
immediately, before continuing with what I was doing.
2 CUESTIONARIO
The core Arduino uses interrupts via software to manage
data from the Serial Monitor, to take proper account of Armar un circuito que permita conectar 8 LEDs,
the funcionesdelay () and millis () and for attachInterrupt 1 pulsador, un temporizador LM555 en modo
() function. astable y con frecuencia de 1 Hz, un rel de 5
voltios y un dipswitch de 8posiciones a una
Some libraries like Wire and Servo, use interrupts when tarjeta ARDUINO. Se armar de acuerdo tal
an event happens, so you do not have to be constantly como se especifica en la Ilustracin 1. Podrn
checking to see if the event has happened. This constant ingresar a laboratorio SOLO los alumnos que ya
check is called polling and can cause some complexity in tengan armado el circuito.
our code.

Interrupts are a very effective way to detect pulses of very Realizar operaciones matemticas bsicas
short duration. de dos nmeros de dos dgitos.
Two or more interruptions can occur before the first is Las operaciones a realizar son: suma, resta,
finished. Managing interruptions forces the first break multiplicacin y divisin.
before moving on to the second end. Los nmeros ingresados se debern
presentar en displays de 7 segmentos.
KEY WORDS: Como en cualquier calculadora de bolsillo, se
tendr una tecla que sea el igual y otra tecla
Programming, configuration, Atmel, input ports, que sea el clear data. El botn clear data
output ports, Arduino, interruption, pulse. borrar todo lo guardado anteriormente y
comenzar el proceso de ingreso de nmeros.
1 INTRODUCCIN Se utilizar un teclado matricial de 4x4 y se
realizar el barrido de 4 displays (el motivo de 4
displays es por los posibles resultados de 4
Display 7 segmentos.
dgitos en la operacin de multiplicacin)
El usuario siempre ser obligado a ingresar un
Anexo1 nmero de dos dgitos (08,11, 44, 89, etc.).
Validar resultados de restas negativos para
Es un dispositivo electrnico que permite representar evitar desbordamiento de variables.
caracteres en dispositivos electrnicos, su
funcionamiento es igual al de los leds.
Desarrollar 2 programas:
Existen dos tipos nodo comn y ctodo comn.
Detectar los pulsos del LM555 e incrementar en
una unidad (por cada pulso) una variable x.
Anexo 2 Detectar los pulsos provenientes del pulsador y
disminuir la MICROCONTROLADORES
ITEL2240-70 Perodo 2016/2 Practica N 2

1
.
.

Programacin en C e interrupciones Externas


FACULTAD DE INGENIERA Y CIENCIAS
AGROPECUARIAS Gua para prcticas de
laboratorio Electrnica Analgica misma
variable x. Se presentar el valor de la variable
x en un puerto donde estn conectados los
leds. Finalmente, condicionar que, si el valor de
x es mayor a 255, se ponga en cero el valor de
x. Condicionar que no existan valores
negativos en el registro x en el caso de que el Anexo3
pulsador se lo presione ms veces que el valor
Anexo 4
proveniente del LM555.
/*Diego Peres
Se emular un sistema de deteccin dactilar para abrir *Andres Pozo
una puerta. *
Se presiona el pulsador. *Examen Bimestral
*2016-04-16
Ese instante se lee una clave de 5 bits que ser
*/
representada con las entradas del dipswitch.
Si la clave es correcta, se activar el rel y un /*Debern copiar todo el contenido de este archivo en un
led verde por 2 segundos. nuevo proyecto. El programa est implementado
Si la clave es incorrecta, se activar el buzzer o para un ATMEGA2560. Este programa muestra tres
zumbador y un led rojo por 5 segundos. dgitos ingresados a travs de un teclado matricial
al presionar una cuarta vez, se reinicia el ciclo de
ingreso y mostrar los nuevos dgitos ingresados*/

3 CONCLUSIONES #define F_CPU 8000000UL


#include <avr/io.h>
Como se puede constatar la bandera cumple un #include <avr/interrupt.h>
papel importante dentro del programa ya que es el #include <util/delay.h>
que permite conocer que numero y que digito
estamos presionando y asi poder procesarlo. unsigned char tecla,bandera=0,digitos[6]={0,0,0,0,0,0},
flanco=0;
unsigned char numeros_display[16]=
{63,6,91,79,102,109,125,7,127,103,119,124,57,
94,121,113};
4 ANEXOS unsigned int
primer_numero=0,segundo_numero=0,respuesta=0;
unsigned int
digito1=0,digito2=0,digito3=0,digito4=0,parcial=0,negativ
o=0;
//Son los valores entre 0 y 9 para conectar el display. El orden
para conectar el display en el puerto F es del tipo: PF0-a,PF1-
b... PF6-g PF7-dp
Anexo 1 //teclado
unsigned char teclado4x4(void)
{
unsigned char columna, fila,valor=0,aux[4][4]= {
{1,2,3,10},
{4,5,6,11},
{7,8,9,12},
{14,0,15,13}};
PORTK=0b11111111;

for (columna=4;columna<=7;columna++)
{
PORTK=PORTK&~(1<<columna);

for (fila=0;fila<=3;fila++)
Anexo2
{
if ((PINK&(1<<fila))==0)

2
.
.

valor=aux[fila][(columna-4)]; digitos[0]=numero;
while
((PINK&(1<<fila))==0) PORTD=0X01;
_delay_ms(25);
PORTF=numeros_display[digitos[0]];
} _delay_ms(5);
} }
PORTK=PORTK|(1<<columna); }
} //PRIMER NUMERO DIGITO2
PORTK=0b00001111; if(bandera==2)
//solo dejamos las pull-up {
nuevamente para //Verificaciones de
return valor; ingreso solo numero
//detectar cuando se presiona una
nueva tecla. if(numeros_display[numero]==119 ||
} numeros_display[numero]==124 ||
//inicio numeros_display[numero]==57 ||
ISR(PCINT2_vect) numeros_display[numero]==94 ||
{ numeros_display[numero]==121)
flanco++; {
if (flanco==1) bandera = 0;
{
tecla=teclado4x4(); //retorna a la variable digitos[0]=digitos[1]=digitos[2]=digitos[3]=digitos[4]=0;
global tecla el valor numrico de la tecla presionada.
bandera++; PORTD=0b00001111;
//me dir las veces que se ha presionado una tecla
} PORTF=0b11111111;
if(flanco==2) //validar
interrupcin por flanco, no por estado. _delay_ms(800);
flanco=0;
} PORTF=0b00000000;
void display(unsigned int numero)
{ }
//boton reset else
{
if(numeros_display[numero]==113&&bandera>0)
{ digitos[1]=numero;
bandera = 0;
PORTD=0X01;
digitos[0]=digitos[1]=digitos[2]=digitos[3]=digitos[4]=0;
PORTD=0b00001111; PORTF=numeros_display[digitos[1]];
PORTF=0b11111111; _delay_ms(5);
_delay_ms(800);
PORTF=0b00000000; PORTD=0X02;
}
//PRIMER NUMERO DIGITO1 PORTF=numeros_display[digitos[0]];
if(bandera==1) _delay_ms(5);
{ PORTF=0;
//Verificaciones de }
ingreso solo numero }
//OPERACION(+,-,*,/)
if(numeros_display[numero]==119 || if(bandera==3)
numeros_display[numero]==124 || {
numeros_display[numero]==57 ||
numeros_display[numero]==94 ||
numeros_display[numero]==121) digitos[2]=numero;
{
bandera = 0; PORTF=numeros_display[digitos[2]];

digitos[0]=digitos[1]=digitos[2]=digitos[3]=digitos[4]=0; PORTD=0b00000000;
_delay_ms(1);
PORTD=0b00001111; numero=0;
}
PORTF=0b11111111; //SEGUNDO NUMERO DIGITO1
if(bandera==4)
_delay_ms(800); {
//Verificaciones de
PORTF=0b00000000; ingreso solo numero
}
else if(numeros_display[numero]==119 ||
{ numeros_display[numero]==124 ||

3
.
.

numeros_display[numero]==57 || if(bandera==6)
numeros_display[numero]==94 || {
numeros_display[numero]==121) digitos[5]=numero;
{
bandera = 0; if(numeros_display[digitos[5]]==121)
{
digitos[0]=digitos[1]=digitos[2]=digitos[3]=digitos[4]=0;
switch(numeros_display[digitos[2]])
PORTD=0b00001111; {

PORTF=0b11111111; //SUMA

_delay_ms(800); case 119:


{
PORTF=0b00000000;
} respuesta=primer_numero+segundo_numero;
else
{ negativo=0;
}
digitos[3]=numero;
break;
PORTD=0X01;
//RESTA
PORTF=numeros_display[digitos[3]];
_delay_ms(5); case 124:
} {
}
//SEGUNDO NUMERO DIGITO2 //Resta positiva
if(bandera==5)
{ if (primer_numero>=segundo_numero)
//Verificaciones de
ingreso solo numero {

if(numeros_display[numero]==119 || respuesta=primer_numero-
numeros_display[numero]==124 || segundo_numero;
numeros_display[numero]==57 ||
numeros_display[numero]==94 || negativo=0;
numeros_display[numero]==121)
{ }
bandera = 0;
//Resta negativa
digitos[0]=digitos[1]=digitos[2]=digitos[3]=digitos[4]=0;
else
PORTD=0b00001111;
{
PORTF=0b11111111;
respuesta=segundo_numero-
_delay_ms(800); primer_numero;

PORTF=0b00000000; negativo=1;
}
else }
{ }

digitos[4]=numero; break;

PORTD=0X01; //MULTIPLICACION

PORTF=numeros_display[digitos[4]]; case 57:


_delay_ms(5); {

PORTD=0X02; respuesta=primer_numero*segundo_numero;

PORTF=numeros_display[digitos[3]]; negativo=0;
_delay_ms(5); }
}
} break;
//Obtener el numero
//DIVISION
primer_numero=(digitos[0]*10)+digitos[1];
case 94:
segundo_numero=(digitos[3]*10)+digitos[4];

4
.
.

//DIVISION PARA CERO }


if }
(segundo_numero<=0) //Repetir bucle
{ if(bandera==7)
{
respuesta=9999; bandera = 0;

negativo=0; digitos[0]=digitos[1]=digitos[2]=digitos[3]=digitos[4]=0;
} PORTD=0b00001111;
else PORTF=0b11111111;
{ _delay_ms(800);
PORTF=0b00000000;
respuesta=primer_numero/segundo_numero; }
}
negativo=0;
} int main(void)
} {
} DDRK=0b11110000; //PK0-PK3 como entradas. PK4-
if (respuesta>0); PK7 como salida
{ PORTK=0b00001111; //resistencias pull-up en la LSB
del puerto K
digito1=respuesta/1000; PCICR=0b00000100; //1 lgico en este bit habilita el
vector de interrupcin PCI2. Este vector corresponde a los
parcial=respuesta%1000; pines PCINT23:16.
PCMSK2=0b00001111; //Se habilita las interrupciones
digito2=parcial/100; PCINT16-PCINT19
DDRA=0b11111111; //Puerto A es todo
parcial=parcial%100; salida
DDRF=0b11111111; //Puerto F como salida.
digito3=parcial/10; DDRD=255;
PORTD=0;
digito4=parcial%10; sei();
while (1)
{
PORTD=0b00001000; display(tecla);
if }
(negativo==1) }
{ 5 REFERENCIAS
PORTD=0b00001000;
[1] Carro Fernndez, G. Introduccin a Arduino (I):
PORTF=0b00001000; electrnica para todos.

_delay_ms(5); [2] Microcontroladores, P. I. C. (1999). Diseo


} Prctico de aplicaciones. Segunda Parte: EL
else PIC16F87X.
{
[3] Artero, . T. (2013). Arduino: curso prctico
PORTF=numeros_display[digito1]; de formacin. RC Libros.

_delay_ms(5);
}

PORTD=0b00000100;

PORTF=numeros_display[digito2];
_delay_ms(5);

PORTD=0b00000010;

PORTF=numeros_display[digito3];
_delay_ms(5);

PORTD=0b00000001;

PORTF=numeros_display[digito4];
_delay_ms(5);

Vous aimerez peut-être aussi