sábado, 19 de octubre de 2019

LABORATORIO NRO. 9

MICROCONTROLADORES

Laboratorio Nº 9

Programación básica 

con bucle de control

1. CAPACIDAD TERMINAL:
● Utilizar al microcontrolador en aplicaciones de control electrónico.
● Desarrollar y ejecutar programas en un microcontrolador PIC
● Programar y configurar interfaces básicas del microcontrolador.


2. COMPETENCIA ESPECÍFICA DE LA SESIÓN:

● Manejo de puertos de forma grupal e independiente para manejo de luces
● Programación de sonidos mediante subrutinas.
● Creación de Subrutinas mediante funciones.
● Declaración de variables enteras.

3. CONTENIDOS A TRATAR: 
En este laboratorio se desarrollará:
● Control de puertos como entradas y/o salidas
● Generación de salida pulsante
● Bucles de control


4. RESULTADOS:
● Diseñan y optimizan sistemas y procesos para cumplir con las condiciones establecidas y gestionando adecuadamente los recursos materiales y humanos.

5. MATERIALES Y EQUIPO:
● Programa CCS Compiler:
CCS C Compiler / PIC C Compiler es un compilador C muy optimizado, completo, bastante sencillo y fácil de manejar. Es un amplio conjunto de herramientas donde se encuentran todas esas utilidades necesarias para la optimización del código y para gestionar todos los aspectos del desarrollo de software.

Esta herramienta contiene:

•  Operadores estándar del lenguaje de programación C.
•  Una amplia biblioteca repleta de funciones específicas para registros de PIC.
•  Incluye más de 307 funciones integradas, simplifican el proceso de acceso al hardware, obteniendo siempre una producción eficiente y un código en lenguaje de programación C muy optimizado.Destacando: 
    •  Temporizadores y módulos PWM.
    •  Convertidores A / D.
    •  Controladores LCD.
    •  Memoria externa bus.
    •  Datos on-chip EEPROM.
    •  Manejo inteligente de interrupciones, entre otras muchas.

● Entrenador de PICS:
Uno de los microcontroladores más conocidos y populares pertenecen a Microchip, debido a su bajo costo, herramientas e información abundante en Internet, actualización continua de su entorno de programación MPLAB, herramientas de software de terceros para programación en C o Basic, fácil programación y robustez. La tarjeta de desarrollo HFK-010U a sido diseñada para trabajar con los microcontroladores PIC de diferentes tamaños, desde 8 pines para las series PIC10F y PIC18F, hasta PICs de las series PIC18F de 40 pines, cuenta con programador en circuito mediante puerto USB, lo que facilitará y ahorrará tiempo al usuario cuando realice su proyecto, este programador es compatible con PICKIT2 de Microchip, también pudiendo usarse el programador desde MPLAB. 



BUCLE DE CONTROL:

Es un sistema en el que se repite un proceso las veces que se le programe o infinitas veces, eso ya dependerá de la forma en la que se quiera programar o utilizar, un ejemplo fácil se puede ver en los semáforos ya que repite el mismo proceso indefinidamente.


 

Los códigos más usados en lo que respecta a bucles de control son los siguientes:

IF:

Se usa para tomar decisiones, este evaluá básicamente una operación lógica, es decir una expresión que de como resultado True o False, y ejecuta la pieza de código siguiente siempre y cuando el resultado sea verdadero. Es decir, significa, Si se cumple la expresión condicional se ejecuta el bloque de sentencias seguidas.




ELSE IF:

Es una combinación de "if" y "else"; del mismo modo que "else", extiende una sentencia if para ejecutar una sentencia diferente en caso que la expresión "if" original se evalúe como FALSE. Sin embargo, a diferencia de "else", esa expresión alternativa sólo se ejecutará si la expresión condicional del "else if" se evalúa como TRUE.


WHILE:

Una sentencia que se ejecuta mientras la condición se evalúa como verdadera. Para ejecutar múltiples sentencias dentro de un bucle, utiliza una sentencia block ({ ... }) para agrupar esas sentencias.



FOR:

La sentencia for (réplica del lenguaje C) es una sentencia que implementa un bucle, es decir, que es capaz de repetir un grupo de sentencias un número determinado de veces.



6. TAREA GUIADA DENTRO DEL LABORATORIO:

1. Transcriba el programa mostrado, compile dicho programa, simule en Proteus y compruebe funcionamiento en Tarjeta Entrenadora.

#include <16f877a.h>             // Incluimos archivo con PIC a utilizar
#use delay (clock=20M)           // Indicamos al compilador que trabajaremos a 20Mhz
#fuses HS, NOPROTECT, NOWDT      // Configuración básica de los fusibles

int salida=1;                    // Declaramos variable "salida" como entera y valor UNO
int variable=0;

void main ()                     // FUNCION PRINCIPAL del programa, indispensable
{
   output_c(0b00000000);         // Sacamos por el puerto C el valor de salida (00000000)
                                 // Este comando se realiza por única vez
   while (true)                  // Bucle de REPETICION infinita por valer "true"
   {
      IF (!input(PIN_A5))        // SI detectamos 0 voltios en PIN A5 (presionando pulsador)
      {
         output_c(salida);       // Sacamos por el puerto C el valor de salida (00000001)
         delay_ms(500);          // "Congela el tiempo" durante 500 ms para evitar falsos disparos
      }
     
      IF (!input(PIN_D0))        // SI detectamos 0 voltios en PIN D0 (presionando pulsador)
      {
         output_high(PIN_C5);    // Pone a "1" el pin C5 (envía 5 voltios)
         output_bit(PIN_C4, 1);  // Pone a "1" el pin C4 (envía 5 voltios)
         output_toggle (PIN_C1); // Invierte el valor del PIN C1 (si estaba en 0, pasa a 1 y viceversa)
         delay_ms(500);          // "Congela el tiempo" durante 500 ms para evitar falsas pulsaciones
      }
     
      IF (!input(PIN_D1))        // SI detectamos 0 voltios en PIN A5 (presionando pulsador)
      {
         salida = salida << 1;   // Recorremos el contenido de "salida" una posición a la izquierda
         output_c(salida);       // Sacamos por el puerto C el valor de salida (00000001)
         variable = 1;           // asignamos el valor "1" a variable
         delay_ms(500);          // "Congela el tiempo" durante 500 ms para evitar falsas pulsaciones
      }
     
      IF (!input(PIN_E2) && (variable == 1))   // SI detectamos 0 voltios en PIN E2 variable vale 1....
      {
         output_bit(PIN_C5,0);    // Pone a "0" el pin C0 (envía cero voltios o GND)
         variable = 0;            // asignamos el valor "0" a variable
         delay_ms(500);          // "Congela el tiempo" durante 500 ms para evitar falsas pulsaciones
      }
     
   }
   }


7. TAREA A SER EVALUADA:

Realice las modificaciones que se sugieren al programa, experimente y responda las preguntas planteadas

1. Se tiene un sistema con 3 pulsadores (A5, D0, D1) de entrada y 8 leds de salida (Puerto C): Programar para que se comporte de la siguiente manera:

a. Al iniciar el programa todos los leds deben permanecer apagados.
b. Al presionar A5, debe encender C0, al volver a presionar, debe encender C1 y así sucesivamente.
c. Al presionar D0, los deben encender sucesivamente pero en sentido inverso. d. La entrada D1 debe funcionar como un habilitador, es decir, por defecto el sistema está habilitado y funcionará como lo antes mencionado. Si presiono D1, el sistema quedará “congelado” y nada funcionará. Si vuelvo a presionar D1, el sistema nuevamente queda habilitado.


2.Describa el funcionamiento del programa previamente diseñado, demuestre funcionamiento mediante simulación y en tarjeta entrenadora. Grabe en video para evidencia.

 Código modificado:





8. EVIDENCIA DE TRABAJO EN LABORATORIO:


Link del video: https://youtu.be/RIg2k-xQkqs
9. OBSERVACIONES:

  • El entrenador en Proteus solo presentaba cuatro pulsadores disponibles, por lo cual se realizó ciertas adaptaciones en el código (sólo el PIN_A5 por PIN_E0). 
  • En cuanto al programa Proteus, se podía cambiar el nombre de los pulsadores, mas después de compilar el código y seleccionado en el PIC entrenador, no se daba el funcionamiento programado. Por tal motivo se hizo las adaptaciones correspondientes de los mismos en el código.
  • En el programa es necesario añadirle la función de delay_ms, ya que ayuda a mantener el tiempo para evitar falsos pulsos de los botones/pulsadores. Se le puede configurar un "retardo" de medio segundo (500 ms) o un segundo (1000) para que no se tenga un error de lectura en del estado de cada pulsador.
10. CONCLUSIONES:
  • Con las funciones de la librería fuses :HS ("High Speed"),NOPROTECT y NOWDT ("No watch dog") declarábamos lo que habilitaríamos en el programa; en caso del primero es en base a la velocidad del cristal de 20 MHz que poseemos en el módulo, segundo decidimos no proteger nuestro programa de tal manera que se podría dar lectura de ello por medio de otro dispositivo de donde no provino la programación y por último, no perro guardián ya que no requerimos de una retro-alimentación de lo que sucede en el PIC. 
  • La declaración hecha en décima línea: output_c(0b00000000), indica que el modo de programación será en binario => 0b y los siguientes 8 dígitos hacen referencia a los bits. Además da paso al valor de salida que se grabará en el PIC.
  • Se pueden movilizar datos por medio de la función "salida = salida << 1" o "salida = salida >> 1", los símbolos indican el sentido de dirección y el número que le sigue es la cantidad de recorrido.
  • Respecto a lograr la inhabilitación de las entradas, se tuvo que declarar una variable "int habilitador=1" siendo su valor inicial de 1, se emplea la condición IF citando en la la condición "habilitador = ! habilitador" que el valor de la variable habilitador será negado (conmutación de estado), interpretando de una manera similar a la función "toggle".

No hay comentarios:

Publicar un comentario