Microcontroladores ss13

17
Maestros Online www.maestronline.com Solicita una cotización a través de nuestros correos Maestros Online Microcontroladores Grupo de problemas Servicio de asesorías y solución de ejercicios Envía tus actividades a [email protected]

Transcript of Microcontroladores ss13

Page 1: Microcontroladores ss13

Maestros Online www.maestronline.com

Solicita una cotización a través de nuestros

correos

Maestros Online

Microcontroladores

Grupo de problemas

Servicio de asesorías y solución de ejercicios

Envía tus actividades a [email protected]

Page 2: Microcontroladores ss13

Maestros Online www.maestronline.com Instrucciones:

¡Bienvenido al mundo de los microcontroladores! en esta práctica haremos nuestro primer proyecto en tecnologías embebidas basadas en microcontrolador, en este caso particular con un micro ATMEL ATmega328 de última generación, la tarjeta a utilizar es la Arduino UNO, que cumple los requisitos para el desarrollo de proyectos de tu materia de microcontroladores, primordialmente haciendo lo que te gusta, desarrollando proyectos de procesos mecatrónicos. Te recomendamos, consultes la página http://www.arduino.cc para descargar el Arduino software, de la pestaña Download, la necesitarás para todos los proyectos que vas a desarrollar. Por otro lado, te servirá repasar tu curso previo de C para que se te facilite la programación, que aunque no seas muy experto podrás desarrollar tu conocimiento en algo práctico.

Fig. 1 Tarjeta Arduino UNO

En este tarea desarrollarás la lectura desde tu microcontrolador hasta tu computadora, en otras palabras construirás tu primer módulo de comunicación hacia tu PC. Para lograr lo anterior requeriremos el siguiente material:

Tarjeta Arduino UNO

Un botón o switch, de preferencia momentáneo, en el caso del botón normalmente abierto.

Una resistencia de 10000 ohms ó 10Kohms, a ¼ watt.

Una tablilla de experimentos o protoboard

Alambre del número 22, suficiente para interconectar el circuito (obténganlo de cable de red)

A continuación hay que armar el siguiente circuito:

Page 3: Microcontroladores ss13

Maestros Online www.maestronline.com Cuyo diagrama esquemático es el siguiente:

A continuación se escribirá el siguiente programa en donde se explica cada una de las etapas del algoritmo y evidentemente se validará que funcione y sus características para comunicarse con la computadora y su respectiva lectura en uno de los puertos en donde se conecta el botón a sensar. Utiliza el Arduino software para escribir tu programa. A continuación el código a validar:

/*

Lectura Serial Digital

Lee una entrada digital conectada al pin 2 del Arduino UNO, e imprime el

resultado en el monitor serial.

Este ejemplo es de dominio público.

*/

// El pin 2 tiene conectado el botón o switch. El nombre en el programa

es:

int pushButton = 2;

// La rutina setup se ejecuta cuando presionas reset:

void setup() {

// Inicializa la comunicación serial a 9600 bps*

Serial.begin(9600);

// Declaro el pin 2 como entrada:

pinMode(pushButton,INPUT);

}

Page 4: Microcontroladores ss13

Maestros Online www.maestronline.com // La rutina loop hace el que programa se ejecute indefinidamente:

void loop() {

// Lee el pin:

int buttonState =digitalRead(pushButton);

// Imprime el estado del botón o switch:

Serial.println(buttonState);

delay(1); // haz un retardo para ajustar la estabilidad de lectura

}

Después que hayas probado el anterior programa, cambia el switch o botón a otro pin de entrada, haz los ajustes en el programa para que veas que puedes tener acceso a los puertos del procesador. Reporta tus observaciones y conclusiones.

Instrucciones:

Realiza una investigación bibliográfica en fuentes confiables sobre microcontroladores, por lo menos tres artículos de uso común donde los microcontroladores son empleados y que están sustituyendo a un dispositivo mecánico. Elabora un reporte, tomando como referencia el siguiente concepto.

La aplicación de los microcontroladores, por tener gran cantidad de dispositivos de entrada y salida, permite controlar y monitorear el funcionamiento de diferentes dispositivos que se usan hoy en día.

Instrucciones:

El evitar falsos disparos cuando oprimimos un botón momentáneo es un reto interesante si consideramos el efecto que puede tener el no tenerlo, para mejorar o bien en el peor caso disminuir este efecto hagamos un circuito que evita los rebotes, el material necesario es el siguiente:

Una tarjeta Arduino UNO

Una tablilla de experimentos o protoboard

Una resistencia de 10K ohms a ¼ watt

Un botón momentáneo, normalmente abierto

Alambre del número 22, la cantidad necesaria

El circuito a ensamblar es el siguiente:

Su esquemático es:

Page 5: Microcontroladores ss13

Maestros Online www.maestronline.com

El programa a desarrollar hace una inversión de niveles de voltaje, para lo cual se tiene el siguiente código a validar en el circuito anterior.

/*

Rebote

Cada vez el pin de entrada va de abajo a arriba, la salida es conmutada

al valor contrario de bajo a alto o alto a bajo. Hay un mínimo retardo

entre cambios para rebotar el circuito.

* Nota: En la mayoría de los Arduinos, un led esta conectado en el pin

13, por lo que no necesitas component extra.

Creado por David A. Mellis y es de dominio public.

*/

// constantes

const int buttonPin = 2; // número de pin en donde va el botón

const int ledPin = 13; // número de pin en donde va el led

// variables

int ledState = HIGH; // estado actual del pin

int buttonState; // lectura actual del pin

int lastButtonState = LOW; // lectura previa del pin

// Las siguientes variables son grandes por el tiempo en que se utiliza

que son milisegundos, se usan números en formato int.

long lastDebounceTime = 0; // la última vez que el tiempo se switcheo

long debounceDelay = 50; // el tiempo de rebote; incrementa la seguridad

en el sensado del botón

void setup() {

pinMode(buttonPin, INPUT);

Page 6: Microcontroladores ss13

Maestros Online www.maestronline.com pinMode(ledPin, OUTPUT);

}

void loop() {

// lee el estado del botón en una variable:

int reading = digitalRead(buttonPin);

// verifica el estado del botón y si has esperado tiempo desde la última

vez para ignorer ruido.

// Si el switch ha cambiado:

if (reading != lastButtonState) {

// resetea el temporizador del rebote

lastDebounceTime = millis();

}

if ((millis() - lastDebounceTime) > debounceDelay) {

// Hace el comparative de tiempos y actualize el estado

buttonState = reading;

}

// ajusta el led con el estado actual:

digitalWrite(ledPin, buttonState);

// salva la lectura. La próxima vez en el loop será lastButtonState:

lastButtonState = reading;

}

Después que hayas probado el anterior programa, reporta tus observaciones y conclusiones.

Instrucciones:

Utilizando un microcontrolador y un cable procedente de las bujías como señal, realiza un medidor de revoluciones contando los pulsos de la bujía en contraparte del reloj de microcontrolador de 12 MHz. Contabiliza los ciclos de máquina del micro y cuenta los pulsos de la bujía para determinar las revoluciones del motor.

Especifica cómo lo realizarías y qué tipo de conversión programarías para determinar las revoluciones.

Elabora un reporte con los resultados obtenidos.

Instrucciones:

En esta tarea desarrollaras tu futura “caja de música” con un generador de tonos, el cual tiene una función integrada en el proyecto, en lo particular este proyecto te generará futuras ideas para procesamiento de voz y otras cosas interesantes. Por lo pronto requerimos el siguiente material para empezar:

Una tarjeta Arduino ONE

Una bocina de 8 ohms pequeña

Una resistencia de 100 ohms a ½ watt

Cable de red, para interconectar la bocina

En este proyecto se requiere conectar tu tarjeta Arduino de la siguiente manera:

Page 7: Microcontroladores ss13

Maestros Online www.maestronline.com

Cuyo esquemático es el siguiente:

El código hace uso de un archivo extra que hay que obtener de la página de Arduino (http://www.arduino.cc), dicho archivo se llama pitches.h, dicho archivo contiene todos los posibles valores para las notas musicales. A continuación el código a probar:

/*

Melodía

Toca una melodía, creado por Tom Igoe y el código es de dominio publico.

*/

Page 8: Microcontroladores ss13

Maestros Online www.maestronline.com

// inclusión del archivo pitches.h, el cual viene mas abajo

#include "pitches.h"

// notas en la melodia:

int melody[] = {

NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};

// duración de notas: 4 = nota cuarta, 8 = octava, etc.:

int noteDurations[] = {

4, 8, 8, 4,4,4,4,4 };

void setup() {

// itera sobre las notas de la melodía:

for (int thisNote = 0; thisNote < 8; thisNote++) {

// para calcular la duración de la nota, toma un segundo

// dividida por el tipo de nota.

//e.g. nota cuarta n = 1000 / 4, octava = 1000/8, etc.

int noteDuration = 1000/noteDurations[thisNote];

tone(8, melody[thisNote],noteDuration);

// para distinguir las notas, ajuste el mínimo tiempo entre ellas.

// la duración de la nota + 30% para que trabaje bien:

int pauseBetweenNotes = noteDuration *1.30;

delay(pauseBetweenNotes);

// pare la ejecución de la nota:

noTone(8);

}

}

void loop() {

// no necesita repetir la melodía.

}

A continuación te damos las constantes de las notas musicales que vienen en el archivo pitches.h: Notas musicales

Después que hayas probado el anterior programa, reporta tus observaciones y conclusiones.

Instrucciones:

Tomando como referencia los conceptos vistos en el tema, así como el libro de texto y otras fuentes confiables de consulta, realiza el siguiente ejercicio.

Siguiendo las instrucciones del ejercicio al final del tema y el diagrama de distribución de la memoria del microcontrolador 8051, efectúa los siguientes cambios:

Page 9: Microcontroladores ss13

Maestros Online www.maestronline.com Modifica las siguientes memorias de direcciones del microcontrolador, cambiar a 1 los bits, 57H, 56H, 55H, 54H, 53H el quinto bit del byte 25H, el cuarto bit del byte 23H, el sexto bit del byte 24H, el segundo bit de byte 23, el primer bit del byte 2AH.

Escríbelos en forma secuencial con la instrucción indicada para su realización.

Instrucciones:

Para el desarrollo de la tarea haremos uso de una instrucción muy conocida y de mucha importancia en el ámbito de la programación, de allí que el desarrollo de algoritmos mas complejos hagan uso de estrategias de “ Si ….. entonces …. y sino ……”, pudiendo llegar a ser comparaciones con evaluación simple o compleja de variables o bien con varias opciones de salida. Para lograr esto necesitamos el siguiente material:

Una tarjeta Arduino ONE

Un potenciómetro de 10k ohms, sin switch

Una resistencia de 220 ohms a ¼ watt

Un led

Una tablilla de experimentación

Cable de red, para interconectar la bocina

Ensamble el siguiente circuito:

Page 10: Microcontroladores ss13

Maestros Online www.maestronline.com

Su respectivo diagrama electrónico:

Page 11: Microcontroladores ss13

Maestros Online www.maestronline.com

El programa es muy sencillo, el cual únicamente leerá una señal continua y la comparará a un valor de umbral para activar que ya llego a un determinado voltaje, el código es el siguiente:

/*

Condicionales - If

Evalúa un cierto nivel de voltaje y si lo supera enciende el led.

creado por Tom Igoe y es de dominio publico.

*/

const int analogPin = A0; // pin en donde va el sensor

const int ledPin = 13; // pin en donde va el led

const int threshold = 400; // umbral establecido

void setup() {

// inicializa led como salida:

pinMode(ledPin, OUTPUT);

// inicializa la salida serial:

Serial.begin(9600);

}

void loop() {

// lee el potenciometro:

int analogValue = analogRead(analogPin);

// Si supera el umbral, enciende el led:

if (analogValue > threshold) {

digitalWrite(ledPin, HIGH);

Page 12: Microcontroladores ss13

Maestros Online www.maestronline.com }

else {

digitalWrite(ledPin,LOW);

}

// pone en pantalla el resultado de lectura:

Serial.println(analogValue);

delay(1); // retardo para estabilidad del convertidor análogo-digital

}

Después que hayas probado el anterior programa, reporta tus observaciones y conclusiones.

Instrucciones:

De acuerdo a lo expuesto referente a programación de microcontroladores y tomando como referencia conceptos de fuentes confiables, da respuesta a la siguiente pregunta detonante:

¿Cuál es la serie de instrucciones para habilitar las interrupciones del temporizador 1 y habilitar la interrupción externa en lenguaje ensamblador?

En un reporte escribe las instrucciones, indica el análisis y explica cómo están estructurados.

Instrucciones:

Esta tarea es básica para el desarrollo de proyectos mas avanzados, como lo es la conversión análoga-digital y viceversa, dado que en el caso de digital análogo digital se usan técnicas como la Modulación de Ancho de Pulso (PWM) para que se genere un pulso con ancho variable de acuerdo a un valor numérico digital; para este caso utilizaremos una entrada analógica basada en un potenciómetro que ajusta la luminosidad de un led, controlada por el potenciómetro. Tome en cuenta lo siguiente que una señal analógica la convierte a digital y después una digital a analógica. A continuación el material necesario para el desarrollo del proyecto:

Una tarjeta Arduino UNO

Un potenciómetro de 10K ohms, sin switch.

Un led

Una resistencia de 220 ohms a ¼ watt

Cable del número 22, necesario para completar tarea

Prepare el siguiente circuito para la prueba de controlador de destello:

Page 13: Microcontroladores ss13

Maestros Online www.maestronline.com

Su correspondiente esquemático a desarrollar es el siguiente:

Conecte uno de los pines de las orillas a 5 volts y el otro a tierra (0 volts), el central va a la entra analógica 0. Conecte al pin digital 9 una resistencia de 220 ohms y en serie el led con la polaridad correcta, el cátodo del led va a tierra.

Enseguida escriba el siguiente programa en el Arduino Software para que lo valide en el circuito y verifique su funcionamiento, en los comentarios del programa se explica la funcionalidad del programa:

/*

Entrada análoga, salida análoga, salida serial

Lee una entrada análoga, mapea el resultado en un rango de 0 a 255 y usa

el resultado para ajustar la modulación de ancho de pulso (PWM) de un pin

de salida. También, presenta los resultados en el monitor serial del

Page 14: Microcontroladores ss13

Maestros Online www.maestronline.com Arduino Software.

Código creado por Tom Igoe y es de dominio publico.

*/

// Constantes para nombrar pines

const int analogInPin = A0; // Entrada análoga

const int analogOutPin = 9; // Salida análoga

int sensorValue = 0; // valor leido del potenciometro

int outputValue = 0; // valor de la salida PWM

voidsetup() {

// inicializa la salida serial a 9600:

Serial.begin(9600);

}

voidloop() {

// lee el valor análogo:

sensorValue = analogRead(analogInPin);

// mapea el valor leído al PWM:

outputValue = map(sensorValue, 0, 1023, 0, 255);

// cambia el valor de la salida:

analogWrite(analogOutPin, outputValue);

// Imprime los resultados en el monitor:

Serial.print("sensor = " );

Serial.print(sensorValue);

Serial.print("\t salida = ");

Serial.println(outputValue);

// Espera 2 milisegundos antes del siguiente ciclo

// para dar oportunidad de restablecer el convertidor A/D

// después de la lectura previa:

delay(2);

}

Después que hayas probado el anterior programa, reporta tus observaciones y conclusiones.

Instrucciones:

Investiga sobre periféricos internos en Biblioteca Digital o en alguna otra fuente confiable de información y realiza el siguiente ejercicio.

Escriba un programa para crear una onda cuadrada en P1.0 con frecuencia de 1 khz y una onda cuadrada en P2.0 con frecuencia de 10 khz, describe las acciones realizadas por el programa paso por paso.

Instrucciones:

En el desarrollo de esta tarea tendrás la oportunidad de generar señales de voltaje analógicas en un dispositivo netamente digital, cabe aclarar que el microcontrolador ATMEL incluido en la tarjeta Arduino NO tiene convertidor Digital-Analógico, por tanto hay que generarlo mediante un sistema de modulación de ancho de pulso, conocido como PWM, en tu tarea descubrirás como hacerlo; los materiales necesarios para el proyecto son:

Page 15: Microcontroladores ss13

Maestros Online www.maestronline.com

Una tarjeta Arduino UNO

Un led

Una resistencia de 220 ohms a ¼ watt

Cable del número 22, necesario para completar tarea

Ensamble el siguiente circuito:

y su respectivo esquemático es:

Page 16: Microcontroladores ss13

Maestros Online www.maestronline.com

El programa para la generación de pulsos es el siguiente, vea el uso FOR´s para generar las secuencias de pulsos para el led, el código es el siguiente a validar en la tarea:

/*

Barrido

Este ejemplo muestra como usar las salidas analógicas con analogWrite().

Creado por Tom Igoe y es de Dominio Público.

*/

int ledPin = 9; // led conectado al pin 9

void setup() {

// nada sucede en el setup

}

void loop() {

// barre del valor min a max en incrementos de 5 en 5:

for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {

// ajusta el valor, de 0 a 255 en rango:

analogWrite(ledPin, fadeValue);

// espera de 30 milisegundos para el efecto de traqueo.

delay(30);

}

Page 17: Microcontroladores ss13

Maestros Online www.maestronline.com

// barre del valor max a min en incrementos de 5 en 5:

for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {

// ajusta el valor, de 0 a 255 en rango:

analogWrite(ledPin, fadeValue);

// espera de 30 milisegundos para el efecto de traqueo.

delay(30);

}

}

Después que hayas probado el anterior programa, reporta tus observaciones y conclusiones.

Instrucciones:

Investiga sobre puertos de comunicación y controladores en Biblioteca Digital o en alguna otra fuente confiable de información y realiza el siguiente ejercicio.

Realiza un programa para activar todos los temporizadores y los contadores y al terminar, detenga los temporizadores.

Escribe el programa indicando paso por paso lo que realiza cada instrucción y sugiere una aplicación para este tipo de programa.

El objetivo de este proyecto es que demuestres que eres capaz de desarrollar proyectos de control de procesos mecatrónicos, utilizando herramientas de alto desempeño para programación de alto rendimiento. El uso de tarjetas de microcontroladores embebidos o incrustados en sistemas de aplicación en la industria metal-mecánica, alimenticia, ambiental, y prácticamente cualquier tipo, que involucre que deba de existir un control, se hace indispensable; además de que podrás aplicar tus conocimientos previos en el proyecto que a continuación te proponemos.

Se requiere un diseño de alto desempeño para arrancar un motor tipo derivado o “shunt” de corriente continua, para lo cual se requiere disminuir el voltaje al arranque del motor, para lo cual dicho arrancador debe ser controlado por PWM, el cual cada segundo va aumentando su valor del voltaje aplicado a la armadura del motor, por tanto después de 10 segundos se alcanza la tensión plena en el motor. Para la construcción del prototipo se tiene un motor de bajo voltaje, pero se puede hacer con un motor de alto voltaje al conectar un relevador a la salida digital del Arduino. Para el arranque y paro del motor se usan botones diferentes conectados al Arduino.

Construya su prototipo a escala con sensores y motores, ya sean eléctricos o neumáticos, todo controlado con su tarjeta Arduino ONE, pero no limitado al uso de una sola.

Desarrolle su software correspondiente y explíquelo dentro del código y un diagrama de flujo basado en Máquinas de Estado Finito o Redes de Petri; reporta tus observaciones y conclusiones.