PROGRAMACION BASICA CON BUCLES DE CONTROL

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

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

III. CONTENIDOS A TRATAR
Control de puertos como entradas y/o salidas
Generación de salida pulsante
Bucles de control

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

V. MATERIALES Y EQUIPO
CCS Compiler instalado.
Entrenador de PICS
Pantalla LCD
PIC16F877A
Motor DC
Guía de Laboratorio. El trabajo se desarrolla de manera GRUPAL.
PC con Software de simulación.

VI. FUNDAMENTO TEÓRICO
Estructuras y Bucles de control.
Si quieres profundizar, ingresa a la página www.coursera.org , logearse y buscar el curso “¡A Programar! Una introducción a la programación”, inscribirse en el mismo.



VII. TAREAS GUIADAS 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 Di (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 C5 (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
      }
      
   }
   }


VIII. TAREAS A SER EVALUADAS:


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 un video para evidencia.
IX. PRINCIPALES BUCLES DE CONTROL

-WHILE


Es un bucle o sentencia repetitiva con una condición al principio. Se ejecuta una sentencia mientras sea cierta una condición. La sentencia puede que no se ejecute ni una sola vez.

-IF

Los condicionales if, son una estructura de control condicional, que nos permiten tomar cierta decisión al interior de nuestro algoritmo, es decir, nos permiten determinar que acciones tomar dada condición, por ejemplo determinar si un numero cualquiera es mayor que 10 y de acuerdo a esto mostrar un mensaje.

-IF-ELSE

Es en principio similar a la del condicional if, pero adicionando una nueva "estructura" que es el else, el cual indica la acción o conjunto de acciones a llevar a cabo, en caso de que la condición del if no se cumpla. 

-FOR


Los ciclos for son lo que se conoce como estructuras de control de flujo cíclicas o simplemente estructuras cíclicas, estos ciclos, como su nombre lo sugiere, nos permiten ejecutar una o varias líneas de código de forma iterativa, conociendo un valor especifico inicial y otro valor final, además nos permiten determinar el tamaño del paso entre cada "giro" o iteración del ciclo.


CURSO VIRTUAL 



X. OBSERVACIONES


-Al momento de realizar cualquier pulsacion constante esta presentaba un retardo de medio segundo en ser procesada debido al delay de 500 ms que se introdujo en el código.

-Al realizar el segundo problema se observo que al momento de mandar una señal a la entrada A5 esta mandaba una salida inmediata para el segundo bit sin siquiera tomar en cuenta al primero.

-Para poder realizar la programación de ambos ejercicios se usaron tanto bucles de repetición (while/for) como condicionales en el caso de if/ if-else los cuales por sus distintas funciones pudieron satisfacer las condiciones de los ejercicios.


XI. CONCLUSIONES


-El establecer un delay de medio segundo en la programación nos pudo ayudar a evitar problemas de falsos disparos por parte de los pulsadores.

-Al momento de usar las condicionales if y if-else fue determinante analizar bien la situación para saber cual iba ser el más conveniente usar.

-Para haber podido realizar el código del segundo ejercicio fue importante identificar primero todas las condiciones establecidas para después de esto comenzar a programar de la manera más adecuada posible.



Comentarios

Publicar un comentario