Upload
adolfo-linzmayer-traslavina
View
213
Download
0
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