36
EJERCICIOS UNIVERSIDAD DE SANTIAGO FACULTAD DE INGENIERIA DEPTO. INGENIERIA ELECTRICA UNIVERSIDAD DE SANTIAGO - FACULTAD DE INGENIERIA - INGENIERIA ELECTRICA CURSO: MICROCOMPUTADORES

EJERCICIOS_MICROCOMPUTADORES

Embed Size (px)

DESCRIPTION

usach microcomp 2015

Citation preview

ARDUINO MEGA 2560

EJERCICIOS

UNIVERSIDAD DE SANTIAGO

FACULTAD DE INGENIERIA

DEPTO. INGENIERIA ELECTRICA

UNIVERSIDAD DE SANTIAGO - FACULTAD DE INGENIERIA - INGENIERIA ELECTRICA

CURSO: MICROCOMPUTADORES

MEMORIA DE PROGRAMA: 32 KBMEMORIA DE DATOS: 2,5KBEEPROM: 1 KBN PINES: 38(ATmega 32U4: 44 PINES)N PINES E/S: 20ENTRADAS ANALOGAS: 6SALIDAS PWM: 7PUERTOS SERIE: 4CLOCK: 16 MHz

CARACTERSTICAS ARDUINO LEONARDO

Corriente DC por pin: 40 miliamperes

2

LA TARJETA ARDUINO LEONARDO

La tarjeta Arduino Leonardo posee un conector de alimentacin, un conector USB, un botn de RESET, un conector de 10 pines, 2 conectores de 8 pines y 2 conectores de 6 pines(uno macho y otro hembra)

Botn de RESET

Conector de

Alimentacin

Conector USB

8 pines hembra

6 pines hembra

8 pines hembra

10 pines hembra

6 pines macho

ICSP header

MOSI, MISO, SCK, RESET, VCC, GND.

CONECTORES DE LA PARTE SUPERIOR

Los pines de los conectores de la parte superior son 18, de los cuales 14 estn numerados de 0 a 13.

Los pines 0 y 1 son usados por Arduino para la comunicacin serie(USB) y estn identificados como RX(pin 0) y TX(pin1).

Los pines 3-5-6-9-10 -11 y 13 pueden actuar como salidas anlogas usando Modulacin por Ancho de Pulso(PWM).

Los pines 4-6-8-9-10 y 12 pueden funcionar como entradas analgicas

El pin SCL es la lnea de reloj para la comunicacin I2C

El pin SDA es la lnea de datos para la comunicacin I2C

El pin AREF es el voltaje de referencia para las entradas analgicas.

El pin GND es la lnea de tierra(GROUND)

CONECTORES DE LA PARTE INFERIOR

Los pines de los conectores de la parte inferior son 14. Seis de ellos corresponden a entradas analgicas A0-A1-A2-A3-A4 y A5. Los otros pines corresponden a las lneas de alimentacin de 3,3V y 5V y tierra GND. Un 0 en la lnea RESET resetea al microcontrolador.

La lnea IOREF corresponde al voltage con el cual operan las lneas de entrada-salida (5Volts).

La lnea VIN es una entrada de voltaje externo, que se puede usar en vez de la alimentacin de USB.

Los pines 4-6-8-9-10-12 pueden funcionar tambin como entradas analgicas.

// Ttulo

definicin de constantes y variables

void setup()

{

}

void loop()

{

}

ESTRUCTURA DEL PROGRAMA

void setup()

{

}

void loop()

{

}

ESTRUCTURA DEL PROGRAMA

La funcin setup se usa generalmente para definir la configuracin de los pines o iniciar bibliotecas.

La funcin loop es una funcin que se repite en forma indefinida

SIMBOLOS ESPECIALES

smbolo // : Ttulo y comentarios (/* */)

smbolo () : Indicar los parmetros de la

funcin o instruccin.

smbolo { } : Marcar bloques de cdigo.

smbolo ; : Indicar el trmino de cada

instruccin.

CONSTANTES Y VARIABLES

Las constantes son datos que no cambian de valor durante

la ejecucin de un programa.

const int LED = 13 ;

Las variables son datos que pueden cambiar de valor durante

la ejecucin de un programa.

int dato = 0

BOOLEANASLONG

CHARUNSIGNED LONG

BYTEFLOAT

INTDOUBLE

UNSIGNED INTSTRING

EJERCICIO 1

Encender y apagar un LED conectado al pin 13, en forma intermitente, cada 1 segundo.

INSTRUCCIONES

pinMode( );

digitalWrite( );

delay();

// EJERCICIO 1: ENCENDER Y APAGAR UN LED

const int LED = 13; // Led conectado al pin 13

void setup()

{

pinMode(LED, OUTPUT);//Pin 13 es salida

}

void loop()

{

digitalWrite(LED, HIGH);//Encender LED

delay(1000);//retardo de 1 segundo

digitalWrite(LED, LOW);//Apagar LED

delay(1000); //retardo de 1 segundo

}

EJERCICIO 2

Encender el LED conectado al pin 13, solamente mientras el interruptor conectado al pin 7 est cerrado.

13

INSTRUCCIONES

digitalRead(n pin);

If (condicin){

}

If (condicin){

}

else {

}

14

// EJERCICIO 2 ENCENDER LED MIENTRAS EL BOTON ESTA PRESIONADO

constintLED = 13; // Led conectado al pin 13

constintBOTON = 7; // Botn conectado al pin 7

intestado = 0;// estado variable entera para guardar el valor de la entrada 7

void setup()

{

pinMode(LED, OUTPUT);//Pin 13 es salida

pinMode(BOTON, INPUT);//Pin 7 es entrada

}

void loop()

{

estado = digitalRead(BOTON);

if (estado == HIGH) {

digitalWrite(LED, HIGH);//Encender LED

} else {

digitalWrite(LED, LOW);//Apagar LED

}

}

15

EJERCICIO 3

Encender y apagar el LED conectado al pin13, en forma gradual.

16

PWM : Modulacin por ancho de pulso

Instruccin analogWrite: permite generar un pulso cuyo ciclo de trabajo se especifica en la instruccin y puede variar entre 0 y 100 % (pines 3,5,6,9,10,11 y 13)

analogWrite (pin, valor);

valor: puede tener cualquier valor entre 0 y 255

0 = 0%

255 = 100 %

Los pines 3-5-6-9-10 -11 y 13

17

Instruccin for: permite repetir una secuencia de instrucciones un nmero determinado de veces

for (declaracin; condicin; incremento) {

secuencia de instrucciones

}

for (int i = 0; i < 5; i++) {

}

18

// EJERCICIO 3 ENCENDER Y APAGAR GRADUALMENTEUN LED

constintLED = 13 ; // Led conectado al pin 9

inti = 0; // valor de PWM

void setup()

{

pinMode(LED, OUTPUT); //Pin 13 es salida

}

void loop() {

for (i = 0; i < 255; i++) {

analogWrite(LED, i);

delay(10);

}

for (i = 255; i < 0; i--) {

analogWrite(LED, i);

delay(10);

}

}

19

20

Contabilizar grupos de 100 cajas y activar alarma

21

DIAGRAMA DE FLUJO

22

// EJERCICIO

const int motor = 2; // Define constantes y variables

const int sensor = 4;

const int alarma = 6;

int cuenta ;

int estado ; // estado del sensor

void setup()

{

pinMode(motor,OUTPUT); //Define lneas de E/S

pinMode(sensor, INPUT);

pinMode(alarma, OUTPUT);

}

23

void loop()

{

cuenta = 0;

digitalWrite(motor, HIGH); // pone en marcha motor

while(cuenta < 100)

{

estado = digitalRead(sensor); // Lee sensor

while (estado == LOW) {

estado=digitalRead(sensor); // Ciclo mientras sensor = 0

}

while (estado == HIGH) {

estado=digitalRead(sensor); // Ciclo mientras sensor = 1

}

cuenta = cuenta + 1; // Incrementa cuenta

}

24

digitalWrite(motor, LOW); // detiene motor

digitalWrite(alarma, HIGH); // activa alarma 10 seg

delay(10000);

digitalWrite(alarma, LOW);

} // fin void loop

2.- Disee el circuito decodificador

2.- Disee el circuito decodificador

EEPROM I = 128 KILOBYTES

EEPROM II = 128 KILOBYTES

RAM I = 16 KILOBYTES

RAM II = 16 KILOBYTES

RAM III = 8 KILOBYTES

RAM IV = 8 KILOBYTES

DECODIFICADOR DE DIRECCIONES DE MEMORIA

INSTRUCCIN WHILE

La instruccin WHILE permite repetir un conjunto de instrucciones, escritas dentro de parntesis de llaves, mientras la condicin indicada en la instruccin(entre parntesis redondo) es verdadera.

Ejemplo:

while(analogRead(sensorPin) > 100)

{

digitalWrite(ledPin, HIGH);

delay(100);

digitalWrite(ledPin, LOW);

delay(100);

}

INSTRUCCIN DO WHILE

La instruccin do while es similar a la instruccin while, excepto que el bloque de cdigo es ejecutado antes de que se examine si la condicin es verdadera.

Ejemplo:

do

{

digitalWrite(ledPin, HIGH);

delay(100);

digitalWrite(ledPin, LOW);

delay(100);

}

while(analogRead(sensorPin) > 100)

INSTRUCCIN SWITCH CASE

La instruccin switch compara el valor de la variable indicada en la instruccin con el valor de las instrucciones case y salta a aquella cuyo valor coincide.

Ejemplo:

switch (var)

{

case 1:

//hacer algo cuando sea igual a 1

break;

case 2:

//hacer algo cuando sea igual a 2

break;

default:

// si nada coincide, ejecuta el "default" // el "default" es opcional

}

INSTRUCCIN BREAK

La instruccin break permite salir del lazo y continuar con la ejecucin de la instruccin siguiente. Se usa tambin para separar las diferentes secciones de la instruccin switch case.

INSTRUCCIN ARRAY (ARREGLO)

Un arreglo(array) es simplemente un conjunto de datos. La posicin de los datos dentro del arreglo es identificada mediante un ndice.

La declaracin de un array debe indicar el nombre del arreglo, el tipo de datos y la cantidad.

Por ejemplo, la instruccin

int dato[3];

Esta instruccin crea 3 variables separadas del tipo int, identificadas como dato[0], dato[1] y dato[2]. El compilador reserva un bloque de memoria RAM donde se almacenan los valores de estos datos. El primer dato del arreglo se identifica con el ndice igual a 0.

INSTRUCCIN ARRAY (ARREGLO)

De este modo, el programa se puede escribir como:

int dato[3];

dato[0] = 8;

dato[0] = 20;

dato[0] = 2;

Otra forma de escribir el programa es la siguiente:

int dato[] = {8, 20, 2];

Los datos deben escribirse dentro de parntesis de llave y separados con una coma.

1. Disee un programa que permita contabilizar el nmero de cajas que se producen en una

empresa (Figura 1). Para estos efectos, se dispone de un microcontrolador Arduino Leonardo y de

un sistema sensor formado por un diodo emisor de luz infraroja y un foto transistor tal como se

indica en la Figura 2

Cada vez que una caja obstruye el paso del haz de luz, el fototransistor presenta una alta resistencia

entre colector y emisor y por lo tanto, la salida es 1. Por otro lado, cuando no se obstruye el paso

del haz de luz, el foto transistor presenta una baja resistencia entre colector y emisor y por lo tanto,

la salida es 0. Es decir, cada vez que pasa una caja frente al haz de luz, se genera un pulso

Al inicio, el microcontrolador Arduino Leonardo debe poner en marcha el motor que mueve la

correa transportadora. Para ello debe enviar un 1 al driver que controla el motor. Luego, debe

incrementar la cuenta de las cajas solamente cuando ocurre el flanco de bajada del pulso.

Cada vez que se cuente 100 cajas, el motor debe detenerse (con un 0 se detiene) y activarse la

alarma durante 10 segundos( con un 1 se activa y con un 0 se apaga). Luego, el sistema debe poner

en marcha nuevamente el motor y reiniciar la cuenta desde 0.

Dibuje el diagrama de flujo en forma ordenada y escriba su programa en el lenguaje processing de

Arduino.

2.-Disee el circuito decodificador de direcciones de un microcomputador, de modo que las

memorias que se indican a continuacin, ocupen los rangos de direccin que se sealan.

Use un decodificador 74LS 138. Determine cual es la capacidad de cada una de ellas.

EEPROM I: 00000H -1FFFFH

EEPROM II: 60000H -7FFFFH

RAM I: 80000H -83FFFH

RAM II: 90000H -93FFFH

RAM III: 9A000H 9BFFFH

RAM IV: 9C000H -9DFFFH

EEPROM I: 000000H -1FFFFFH

RAM I: C00000H -C1FFFFH

RAM II: CA0000H -CBFFFFH

RAM III: D10000H -D1FFFFH

RAM IV: DA0000H -DAFFFFH