Fase 2 : Programación básica con bucles de control.

MICROCONTROLADORES

PROYECTO N° 01


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 ESPECIFICA DE LA SESIÓN

  • Manejo de puertos de forma grupal e independiente para manejo de luces
  • Programación de sonidos mediante sub rutinas.
  • 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.

IX. TAREAS GUIADAS DENTRO DEL LABORATORIO

1. Transcriba el programa mostrado, compile dicho programa, simule en Proteus y compruebe
funcionamiento en Tarjeta Entrenadora. Responda a las preguntas planteadas.




2. Preguntas:

a. ¿Para qué sirve el símbolo “!” antes del comando “input”?

El signo ‘!’ delante de una instrucción sirve para  negamos esta, es decir, al poner "!" a una entrada  estamos negando esa entrada, si este PIN recibe un 0 lógico hará que el PIC lo lea como 1 logico y viceversa.

b. ¿Qué valores acepta el tipo de variable ENTERO?


Un tipo de dato entero en computación es un tipo de dato que puede representar un subconjunto finito de los números enteros. El número mayor que puede representar depende del tamaño del espacio usado por el dato y la posibilidad (o no) de representar números negativos. Los tipos de dato entero disponibles y su tamaño dependen del lenguaje de programación usado así como la arquitectura en cuestión. Por ejemplo, si para almacenar un número entero disponemos de 4 bytes de memoria tememos que:

4 Bytes = 4x8 = 32 bits

Con 32 bits se pueden representar 232=4294967296 valores:
·         Sólo positivos (enteros sin signo): del 0 al 4294967295
·         Positivos y negativos (enteros con signo): del -2147483648 al 2147483647


c. ¿con qué comando introduzco retardos del orden de micro segundos?

DelayMicroseconds()

Transcriba el programa mostrado, compile dicho programa, simule en Proteus y compruebe
funcionamiento en Tarjeta Entrenadora. Responda a las preguntas planteadas




Preguntas:

 ¿Cuál sería el código más eficiente para emitir un sonido “bip” cada vez que se pulse una
tecla cualquiera?

  Usando una subrutina, para llamarla cuando sea necesario.


Realizar lo siguiente:

1. Descripción de los principales BUCLES DE CONTROL: while, if, if-else, for.


Los bucles de control son estructuras condicionales  o estructuras  de programación  que permiten modificar  las escalas  de ejecución  en las instrucciones de un programa , todas las estructuras  de control poseen un solo punto de entrada.

Las estructuras de control se pueden clasificar  en secuenciales, iterativas  y de control avanzado, esta es una de las características por las cuales la programación se basa  en las reglas de  la programación estructurada.

Los  bucles de control son variados pero mencionaremos los principales y los más usados: 


ü  Bucle de control “WHILE”
     Es conocido como el  bucle puede que no pase   , en este bucle  se ejecuta la instrucción sucesivamente si se sigue cumpliendo la condición  
   
                While(condición)

            EJEMPLO

<script type=”text/javascript”>
 var contador = 0;
……while ( contador<10 )
……{
……document.write(contador+”<br />”);
……contador++;
……}
  </script>

  ü  Bucle  de  control “IF”

El bucle  “if”  es utilizado para ejecutar el fragmento de un código  en función de los valores de una variable , se  trata de una estructura de control  que permite  redirigir  la  ejecución de una instrucción según la evaluación de una condición simple , si es falso o verdadero

                              If(tomar decisiones)

EJEMPLO

<script type=”text/javascript”>
…..var valor1, valor2;
…..valor1 = 3;
…..valor2 = 3;
……….if (valor1 == valor2 ) {
……….document.write (“Son iguales”)
……….}
</script>

  ü  Bucle de control “IF – ELSE”

      El bucle  “IF- ELSE “ nos brinda  una instrucción de  ejecución o no ejecución de la instrucción de acuerdo  a los valores  establecidos , si la instrucción  es verdadera se ejecuta pero si no lo es no se ejecuta  el  otro bloque de instrucciones.

IF – ELSE ( IF  TOMAR DECISION AFRIMATIVA
                    ELSE TOMAR OTRA DECISION)


EJEMPLO

<script type=”text/javascript”>

var nombre;
nombre = prompt(“Hola, ¿Quién eres, Ana o Isa?”,””);
…… if ( nombre == “Ana” ) {       // Aquí podemos usar OR ( || ), para reducir código.  [ Ana o Isa ]
…… alert(“Eres Ana”);
…… }
…… else
…… …… {
…… …… …… if ( nombre == “Isa” ) {
…… …… …… alert (“Eres Isa”);
…… …… }
…… …… …… else { alert (“No eres ni Ana ni Isa”);
…… …… …… }
…… …… }
</script>

  ü  Bucle de control “FOR”

     El bucle de control “for” es denominado como  una herramienta de control bucles  es una estructura de control el cual analiza un valor inicial respecto de  la condición y actualiza  resultados

   Este bucle de control  permite ejecutar  un conjunto de sentencias cierto numero  de veces  

EJEMPLO
<script type=”text/javascript”>
var contador = 0;
for ( contador; contador<10; contador++ )
{
document.write(” Este es el número ” + contador + “<br />”);
}
</script>


2. Elaborar un programa que encienda un led a la vez cada vez que se presione un pulsador y al
llegar al sexto pulso, que emita 3 bips y el programa se detenga allí hasta que se reinicie dicho
programa presionando RESET. Muestre la simulación de dicho programa.

#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=0b1000000;                  // Declaramos variable "salida" como entera y valor UNO
int pulsos =0;                         // Declaramos variable "pulsos" como entera y valor CERO

 void main ()                           // FUNCION PRINCIPAL del programa, indispensable
{
      output_c(0b00000000);                   // Sacamos por el puerto C el valor de salida (00000000)
                                       
      while (pulsos<6)                          // Bucle de REPETICION mientras pulsos sea menor a 6
      {
         
               IF (!input(PIN_A5))              // SI detectamos 0 voltios en PIN A5 (presionando pulsador)
               {
               salida = salida >> 1;            // Recorremos el contenido de "salida" una posición a la derecha
               output_c(salida);                // Sacamos por el puerto C el valor de salida
               delay_ms(500);                   // "Congela el tiempo" durante 500 ms para evitar falsos disparos
               pulsos= pulsos+1;                 // Aumentamos en uno la variable pulsos
               }        
      }
       FOR (int i=0;i<=2;++i)                   //Se repetirá 3 veces el sonido BIP
       {
               FOR (int BIP=0;BIP<=20;++BIP)             // Se repetirá 20 veces los comandos siguientes entre llaves
               {
               output_high(PIN_E1);              // Pone a "1" el pin E1 (envía 5 voltios)
               delay_ms(1);                      // "Congela el tiempo" durante 1ms
               output_low(PIN_E1);              // Pone a "0" el pin E1
               delay_ms(1);                     // "Congela el tiempo" durante 1ms
               }
         delay_ms(1000);                      //delay de 1 segundo para espacio entre cada BIP
       }

}




3. Vídeo mostrando las tareas realizadas en laboratorio:

Link del video:

           TAREAS DE LABORATORIO



4. Video mostrando en SIMULACION el programa solicitado.

Link del video:




 OBSERVACIONES Y CONCLUSIONES




OBSERVACIONES:

  •  Observamos que al colocar el signo ‘!’ delante de una instrucción negamos esta, es decir, al poner !INPUT(PIN_A5) estamos negando la entrada por el PIN A5, si este PIN recibe un 0 lógico hará que el PIC lo lea como 1 logico.
  • El buzzer piezoeléctrico de la placa entrenadora solo detecta señal analógica, esto es, señales que tengan frecuencias, según esta el pitido será más o menos agudo.
  • Observamos que la sentencia WHILE nos permite entrar en un bucle si el argumento de la esa sentencia es verdadero, y con la sentencia FOR logramos repetir un bucle de acuerdo a las veces que le indiquemos. - Podemos asignar a variables valores decimales o binarias según nos convenga, para usarlas como salidas.
  • El programa CCS Compiler se integra perfectamente con  PROTEUS para el proceso de depuración.
  • Permite insertar partes de código de otras paginas web, o archivos como word, pdf, etc. directamente sin que se modifique dicho código en el programa CCS compiler.


 CONCLUSIONES
  •  Aprendimos a manejar el puerto C de nuestro PIC 16F877A usándolo como salida para encender LEDs, utilizando ciertos PINES de los puertos A C D y E como entradas a través de pulsadores.
  • Utilizamos las sentencias FOR y WHILE para repetir acciones verificando anteriormente que se cumpla una condición y la sentencia IF para verificar que una condición sea verdadera y realizar alguna acción.
  •  Usar variables tipo entero (int) para realizar nuestro código en CCS Compiler, estas variables usan 32 bits de memoria y pueden tomar valores desde -2,147,483,648 hasta 2,147,483,647.
  • Vimos que las  subrutinas forman parte del algoritmo principal, las cuales permiten resolver una tarea específica. 







Comentarios

Entradas populares