Microcontroladores ss13

Click here to load reader

  • date post

    16-Jan-2017
  • Category

    Education

  • view

    187
  • download

    2

Embed Size (px)

Transcript of Microcontroladores ss13

  • Maestros Online www.maestronline.com

    Solicita una cotizacin a travs de nuestros

    correos

    Maestros Online

    Microcontroladores

    Grupo de problemas

    Servicio de asesoras y solucin de ejercicios

    Enva tus actividades a [email protected]

  • Maestros Online www.maestronline.com Instrucciones:

    Bienvenido al mundo de los microcontroladores! en esta prctica haremos nuestro primer proyecto en tecnologas embebidas basadas en microcontrolador, en este caso particular con un micro ATMEL ATmega328 de ltima generacin, 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 mecatrnicos. Te recomendamos, consultes la pgina http://www.arduino.cc para descargar el Arduino software, de la pestaa Download, la necesitars 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 programacin, que aunque no seas muy experto podrs desarrollar tu conocimiento en algo prctico.

    Fig. 1 Tarjeta Arduino UNO

    En este tarea desarrollars la lectura desde tu microcontrolador hasta tu computadora, en otras palabras construirs tu primer mdulo de comunicacin hacia tu PC. Para lograr lo anterior requeriremos el siguiente material:

    Tarjeta Arduino UNO

    Un botn o switch, de preferencia momentneo, en el caso del botn normalmente abierto.

    Una resistencia de 10000 ohms 10Kohms, a watt.

    Una tablilla de experimentos o protoboard

    Alambre del nmero 22, suficiente para interconectar el circuito (obtnganlo de cable de red)

    A continuacin hay que armar el siguiente circuito:

    javascript:;

  • Maestros Online www.maestronline.com Cuyo diagrama esquemtico es el siguiente:

    A continuacin se escribir el siguiente programa en donde se explica cada una de las etapas del algoritmo y evidentemente se validar que funcione y sus caractersticas para comunicarse con la computadora y su respectiva lectura en uno de los puertos en donde se conecta el botn a sensar. Utiliza el Arduino software para escribir tu programa. A continuacin el cdigo 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 pblico.

    */

    // El pin 2 tiene conectado el botn o switch. El nombre en el programa

    es:

    int pushButton = 2;

    // La rutina setup se ejecuta cuando presionas reset:

    void setup() {

    // Inicializa la comunicacin serial a 9600 bps*

    Serial.begin(9600);

    // Declaro el pin 2 como entrada:

    pinMode(pushButton,INPUT);

    }

  • 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 botn o switch:

    Serial.println(buttonState);

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

    }

    Despus que hayas probado el anterior programa, cambia el switch o botn 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 investigacin bibliogrfica en fuentes confiables sobre microcontroladores, por lo menos tres artculos de uso comn donde los microcontroladores son empleados y que estn sustituyendo a un dispositivo mecnico. Elabora un reporte, tomando como referencia el siguiente concepto.

    La aplicacin 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 da.

    Instrucciones:

    El evitar falsos disparos cuando oprimimos un botn momentneo 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 botn momentneo, normalmente abierto

    Alambre del nmero 22, la cantidad necesaria

    El circuito a ensamblar es el siguiente:

    Su esquemtico es:

  • Maestros Online www.maestronline.com

    El programa a desarrollar hace una inversin de niveles de voltaje, para lo cual se tiene el siguiente cdigo 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 mnimo retardo

    entre cambios para rebotar el circuito.

    * Nota: En la mayora 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; // nmero de pin en donde va el botn

    const int ledPin = 13; // nmero 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 nmeros 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 botn

    void setup() {

    pinMode(buttonPin, INPUT);

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

    }

    void loop() {

    // lee el estado del botn en una variable:

    int reading = digitalRead(buttonPin);

    // verifica el estado del botn 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 prxima vez en el loop ser lastButtonState:

    lastButtonState = reading;

    }

    Despus que hayas probado el anterior programa, reporta tus observaciones y conclusiones.

    Instrucciones:

    Utilizando un microcontrolador y un cable procedente de las bujas como seal, realiza un medidor de revoluciones contando los pulsos de la buja en contraparte del reloj de microcontrolador de 12 MHz. Contabiliza los ciclos de mquina del micro y cuenta los pulsos de la buja para determinar las revoluciones del motor.

    Especifica cmo lo realizaras y qu tipo de conversin programaras para determinar las revoluciones.

    Elabora un reporte con los resultados obtenidos.

    Instrucciones:

    En esta tarea desarrollaras tu futura caja de msica con un generador de tonos, el cual tiene una funcin 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 pequea

    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:

  • Maestros Online www.maestronline.com

    Cuyo esquemtico es el siguiente:

    El cdigo hace uso de un archivo extra que hay que obtener de la pgina de Arduino (http://www.arduino.cc), dicho archivo se llama pitches.h, dicho archivo contiene todos los posibles valores para las notas musicales. A continuacin el cdigo a probar:

    /*

    Meloda

    Toca una meloda, creado por Tom Igoe y el cdigo es de dominio publico.

    */

    javascript:;

  • Maestros Online www.maestronline.com

    // inclusin 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};

    // duracin 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 meloda:

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

    // para calcular la duracin 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 mnimo tiempo entre ellas.

    // la duracin de la nota + 30% para que trabaje bien:

    int pauseBetweenNotes = noteDuration *1.30;

    delay(pauseBetweenNotes);

    // pare la ejecucin de la nota:

    noTone(8);

    }

    }

    void loop() {

    // no necesita repetir la meloda.

    }

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

    Despus 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 distribucin de la memoria del microcontrolador 8051, efecta los siguientes cambios:

    javascript:;

  • 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.

    Escrbelos en forma secuencial con la instruccin indicada para su realizacin.

    Instrucciones:

    Para el desarrollo de la tarea haremos uso de una instruccin muy conocida y de mucha importancia en el mbito de la programacin, de all que el desarrollo de algoritmos mas complejos hagan uso de estrategias de Si .. entonces . y sino , pudiendo llegar a ser comparaciones con evaluacin simple o compleja de variables o bien con varias opciones de salida. Para lograr esto necesitamos el siguiente material:

    Una tarjeta Arduino ONE

    Un potencimetro de 10k ohms, sin switch

    Una resistencia de 220 ohms a watt

    Un led

    Una tablilla de experimentacin

    Cable de red, para interconectar la bocina

    Ensamble el siguiente circuito:

  • Maestros Online www.maestronline.com

    Su respectivo diagrama electrnico:

  • Maestros Online www.maestronline.com

    El programa es muy sencillo, el cual nicamente leer una seal continua y la comparar a un valor de umbral para activar que ya llego a un determinado voltaje, el cdigo es el siguiente:

    /*

    Condicionales - If

    Evala 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);

  • 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 anlogo-digital

    }

    Despus que hayas probado el anterior programa, reporta tus observaciones y conclusiones.

    Instrucciones:

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

    Cul es la serie de instrucciones para habilitar las interrupciones del temporizador 1 y habilitar la interrupcin externa en lenguaje ensamblador?

    En un reporte escribe las instrucciones, indica el anlisis y explica cmo estn estructurados.

    Instrucciones:

    Esta tarea es bsica para el desarrollo de proyectos mas avanzados, como lo es la conversin anloga-digital y viceversa, dado que en el caso de digital anlogo digital se usan tcnicas como la Modulacin de Ancho de Pulso (PWM) para que se genere un pulso con ancho variable de acuerdo a un valor numrico digital; para este caso utilizaremos una entrada analgica basada en un potencimetro que ajusta la luminosidad de un led, controlada por el potencimetro. Tome en cuenta lo siguiente que una seal analgica la convierte a digital y despus una digital a analgica. A continuacin el material necesario para el desarrollo del proyecto:

    Una tarjeta Arduino UNO

    Un potencimetro de 10K ohms, sin switch.

    Un led

    Una resistencia de 220 ohms a watt

    Cable del nmero 22, necesario para completar tarea

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

  • Maestros Online www.maestronline.com

    Su correspondiente esquemtico 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 analgica 0. Conecte al pin digital 9 una resistencia de 220 ohms y en serie el led con la polaridad correcta, el ctodo 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 anloga, salida anloga, salida serial

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

    el resultado para ajustar la modulacin de ancho de pulso (PWM) de un pin

    de salida. Tambin, presenta los resultados en el monitor serial del

  • Maestros Online www.maestronline.com Arduino Software.

    Cdigo creado por Tom Igoe y es de dominio publico.

    */

    // Constantes para nombrar pines

    const int analogInPin = A0; // Entrada anloga

    const int analogOutPin = 9; // Salida anloga

    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 anlogo:

    sensorValue = analogRead(analogInPin);

    // mapea el valor ledo 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

    // despus de la lectura previa:

    delay(2);

    }

    Despus que hayas probado el anterior programa, reporta tus observaciones y conclusiones.

    Instrucciones:

    Investiga sobre perifricos internos en Biblioteca Digital o en alguna otra fuente confiable de informacin 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 tendrs la oportunidad de generar seales de voltaje analgicas en un dispositivo netamente digital, cabe aclarar que el microcontrolador ATMEL incluido en la tarjeta Arduino NO tiene convertidor Digital-Analgico, por tanto hay que generarlo mediante un sistema de modulacin de ancho de pulso, conocido como PWM, en tu tarea descubrirs como hacerlo; los materiales necesarios para el proyecto son:

  • Maestros Online www.maestronline.com

    Una tarjeta Arduino UNO

    Un led

    Una resistencia de 220 ohms a watt

    Cable del nmero 22, necesario para completar tarea

    Ensamble el siguiente circuito:

    y su respectivo esquemtico es:

  • Maestros Online www.maestronline.com

    El programa para la generacin de pulsos es el siguiente, vea el uso FORs para generar las secuencias de pulsos para el led, el cdigo es el siguiente a validar en la tarea:

    /*

    Barrido

    Este ejemplo muestra como usar las salidas analgicas con analogWrite().

    Creado por Tom Igoe y es de Dominio Pblico.

    */

    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

  • 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);

    }

    }

    Despus que hayas probado el anterior programa, reporta tus observaciones y conclusiones.

    Instrucciones:

    Investiga sobre puertos de comunicacin y controladores en Biblioteca Digital o en alguna otra fuente confiable de informacin 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 instruccin y sugiere una aplicacin para este tipo de programa.

    El objetivo de este proyecto es que demuestres que eres capaz de desarrollar proyectos de control de procesos mecatrnicos, utilizando herramientas de alto desempeo para programacin de alto rendimiento. El uso de tarjetas de microcontroladores embebidos o incrustados en sistemas de aplicacin en la industria metal-mecnica, alimenticia, ambiental, y prcticamente cualquier tipo, que involucre que deba de existir un control, se hace indispensable; adems de que podrs aplicar tus conocimientos previos en el proyecto que a continuacin te proponemos.

    Se requiere un diseo de alto desempeo 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 despus de 10 segundos se alcanza la tensin plena en el motor. Para la construccin 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 elctricos o neumticos, todo controlado con su tarjeta Arduino ONE, pero no limitado al uso de una sola.

    Desarrolle su software correspondiente y explquelo dentro del cdigo y un diagrama de flujo basado en Mquinas de Estado Finito o Redes de Petri; reporta tus observaciones y conclusiones.