miércoles, 20 de marzo de 2019

LABORATORIO N°3

MICROCONTROLADORES

LABORATORIO 03

Programación con Display de 7 Segmentos


  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
    • Conocer el Display de 7 segmentos y su funcionamiento. 
    • Conocer las técnicas de multiplexación.
    • Programar HMI para juego de encestar.
    3. Materiales y Equipos
    CCS Compiler instalado


                                          
    Entrenador de PICS



    Pantalla LCD


                                                          
    PIC16F877A


    Resultado de imagen para PIC16F877A
                                          
    4. Fundamento Teórico

    4.1 TIPOS DE VARIABLES

    • NÚMEROS ENTEROS (INT)
      • Las variables de tipo entero o int son aquellas que almacenan un número (ya sea positivo o negativo) no decimal. Debido a que cuando creamos una variable reservamos memoria para ella, cada tipo de variable reservará más o menos memoria para representar el dato que almacenarán. Dicho esto, en el caso de variables de tipo int sólo podemos almacenar números que estén dentro del rango -2^31 y 2^31 - 1. Si intentamos almacenar un número que esté fuera de ese rango nos dará un error de compilación o de ejecución.

    • NÚMEROS ENTEROS GRANDES (LONG)
      • Las variables de tipo entero grandes o long son aquellas que almacenan un número (ya sea positivo o negativo) no decimal. Las variables de tipo long almacenan números que están dentro del rango -2^63 y 2^63 - 1. Si intentamos almacenar un número que esté fuera de ese rango nos dará un error de compilación o de ejecución. Para representar que un número es de tipo long, añadimos una L al final del número
    • NÚMEROS DECIMALES (DOUBLE Y FLOAT)
      • Si en lugar de números enteros queremos almacenar números decimales, tenemos dos tipos:
        • FLOAT: Las variables de tipo float o flotante son aquellos números en precisión simple de 32 bytes en el estándar IEEE 754. Para indicar que un número es de tipo flotante ponemos un punto para separar la parte entera del número de la parte decimal.
        • DOUBLE: Las variables de tipo double o doble son aquellos números en precisión doble de 64 bytes en el estándar IEEE 754. Para indicar que un número es de tipo flotante ponemos un punto para separar la parte entera del número de la parte decimal.
      • Si por algún motivo necesitamos especificar si un número es flotante o doble basta con añadir una letra f o d al final del número tal y como vemos en el siguiente código:
        • double x = 3.2d;
        • float y = 4.8f;
      • Añadir que en caso de querer representar números grandes es mejor usar double en lugar de float ya que a la hora de operar con ellos puede producirse errores de aproximación y llevarnos a confusiones innecesarias. Su valor por defecto si no lo inicializamos es 0.0d para double y 0.0f para float. Existen dos tipos básicos más para representar números: short y byte. Estos tipos sólo almacenan números de tipo entero similar a como sucede con las variables de tipo int. No obstante, los rangos de valores que pueden almacenar son mucho más pequeños (byte: -128, 127 short: -32768, 32767) y sólo se suelen usar cuando la reserva de memoria tiene que estar muy controlada para el perfecto funcionamiento de un programa. 
    • SÍMBOLOS O CARACTERES (CHAR)
      • Ya hemos hablado de los números, pero ¿qué sucede con las letras o símbolos? Podríamos usar variables de tipo int para almacenarlas, pero al hacer eso en lugar de guardar el símbolo como tal, se almacenaría su correspondiente valor en formato decimal en ASCII y tendríamos que manualmente interpretar dicho número para pasarlo a su correspondiente símbolo si quisiéramos por ejemplo imprimirlo por consola. Para evitar esto, tenemos las variables de tipo char :
        • char a = 'a';
        • char b = 'b';
      • En este caso hemos creado dos variables de tipo char; una para el símbolo "a" y otra para el símbolo "b". Notar que para referirnos a un símbolo como tal, tenemos que rodearlo con comillas simples '‘. Su valor por defecto si no lo inicializamos es '\u0000'.

    • CADENAS DE TEXTO (STRING)
      • Hemos solucionado el problema de almacenar en memoria símbolos individuales. Supongamos que queremos trabajar con secuencias de símbolos o cadenas de texto. Con lo visto hasta ahora tendríamos que crear tantas variables de tipo char como letras tenga la cadena. Un ejemplo rápido, si quisiéramos representar el Quijote con variables char tendríamos un total aproximadamente de 2059005 letras en él contando las letras repetidas. Resulta inviable crear tantas variables de tipo char, ¿verdad? Sin ir tan lejos, para la palabra "perro" tendríamos que crear 5 variables. Para solucionar esto, Java nos facilita el trabajo al definir una clase llamada String la cual representa la secuencia o el vector de símbolos que componen una palabra, una frase, un párrafo, etc. Siguiendo el código del ejemplo:
        • String perro = "perro";
        • String gato = "gato";
      • Perro y gato son variables de tipo String las cuales almacenan las cadenas "perro" y "gato" respectivamente. El trabajar así con los símbolos facilita mucho el manejo de cadenas. Su valor por defecto si no lo inicializamos es null . El valor null es el usado en Java para indicar que un Objeto no está inicializado y por tanto no se puede usar.
    • CONSTANTES (FINAL)
      • Supongamos que tenemos un tipo de dato el cual nunca y por ningún motivo cambiará su valor. Por ejemplo, el número PI (3.14159265358979323846…). Para indicar que una variable tomará siempre el mismo valor y no se podrá modificar, es decir, es constante usamos la palabra reservada final escribiéndola antes del tipo de la variable:
        • final double NUMERO_PI = Math.PI; // 3.14
        • final int CERO = 0;
      • Si intentamos modificar el valor de una constante nos dará error de compilación. Nota: Por cuestiones de buena práctica, se suelen escribir las variables en minúscula y las constantes en mayúsculas. Si el nombre de la variable es compuesto, es decir, tiene más de una palabra, la primera letra de las siguientes palabras se escribe en mayúsculas. En el caso de las constantes, se escribe un guion bajo (_) entre palabra y palabra. Por ejemplo, NUMERO_PI para la constante y numero-cuentas para la variable.
    • ARRAYS O VECTORES
      • Los arrays o vectores son listas donde cada elemento es una variable de un tipo específico con su valor correspondiente. Los arrays no pueden almacenar tipos de variables distintos (realmente eso no es cierto, pero con lo explicado hasta la fecha hay que asumir que sí de modo que lo correcto sería decir "no deberían almacenar tipos de variables distintos"). Existen tres maneras a lo sumo de definir un array:
        • String[] paises = {"España", "Italia", "Portugal"};
        • String[] animales = new String[] {"perro", "vaca", "gato", "mono"};
        • String[] objetos = new String[3];

           5.Desarrollo de tareas indicadas en el laboratorio
    • Se tiene un sistema con 2 pulsadores (D0, D1) de entrada y 3 displays de salida, además de un zumbador en el pin E1. Programe según lo siguiente:
      • Se tiene la siguiente programación para lo indicado

      • Al empezar el programa, se debe mostrar el número 500

      • Al presionar D0, el número mostrado se debe incrementar en 5 unidades, además debe sonar un pitido.

      • Al presionar D1, el número mostrado debe disminuir 5 unidades pero de 1 en 1 cada segundo.

      • Si el número llega a ser mayor a 600, debe sonar 3 pitidos
        • Cabe destacar que en la programación creada se introdujo que si nuestro dato era mayor a 600 entonces se debe emitir 3 pitidos por parte del buzzer, pero que en esta oportunidad será representado por el parpadeo de un LED.
          6. EVIDENCIA DE TRABAJO




          7. OBSERVACIONES Y RECOMENDACIONES


              OBSERVACIONES

    • Se observó, que al realizar la respectiva simulación en el programa PROTEUS se tuvo que modificar el valor de el delay declarado al inicio de nuestra programación, esto se hizo con fines de poder tener una mejor apreciación de lo que se quiere mostrar.
    • Se observó, que en la programación brindada por el docente ya estaba inscrito la función referente a la funcionalidad de un buzzer para emitir así pitidos según como se continúe o introduzca nuevas condiciones a la programación, cabe mencionar que el buzzer en la placa entrenadora se encontraba debajo de la pantalla LCD 2 x 16. 
    • Se observó, que debido al error que se obtenía al simular la placa entrenadora en nuestro software PROTEUS se optó por adecuar otro componente que nos puede hacer una representación similar por lo cual se eligió un LED.
    • Se observó, que para lograr que al accionar nuestro pulsador con entrada D1 consiga descender 5 unidades pero de 1 en 1 cada segundo era necesario declarar una nueva variable que se utilizaría dentro de la función FOR.
    • Se observó que al nosotros haber declarado como valor a superar 600 al presionar el pulsador D1 una vez que el valor ya es superado el descuento siempre va a empezar desde 600, se recalca que esto sucede solo si se pasa el valor establecido.
            RECOMENDACIONES
    • Se recomienda que para evitar tener el error más conocido en el software CCS C Compiler al crear una nueva carpeta copiemos la librería del pic a usar en nuestro caso es el PIC 16F877A.
    • Para cuando se requiera ejecutar diferentes acciones como en el caso de nuestro pulsador que tenía que reducir 5 unidades pero de 1 en 1 cada segundo se recomienda usar la función FOR.
    • Se recomienda que para poder tener nuestro dato a mostrar según la programación de forma estática o permanente en el software PROTEUS, separar cada uno de los display y seguir la misma lógica de conexión solo que en este caso será para cada uno que se utilice.
          8. BIBLIOGRAFÍA

    • Marin, Francisco (2007) Diseño basado en microcontroladores.  Málaga: Universidad de Málaga. (004.16/M26D)
    • Pereira, Fabio (2007) Microcontroladores PIC. Sao Paulo:s.n. (005.13/P43)
    • José María Angulo Usátegui [y otros]. (2007) Electrónica digital y microprogramable .Madrid: Thomson. (621.381/A37/I)

           9. INTEGRANTE 

               Condori Ortíz, Daniel Agustín C5 - A










    martes, 12 de marzo de 2019

    LABORATORIO N°2

    MICROCONTROLADORES

    LABORATORIO 02

    Programación Básica con Bucles 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. Materiales y Equipos
      CCS Compiler instalado


                                            
      Entrenador de PICS



      Pantalla LCD


                                                            
      PIC16F877A


      Resultado de imagen para PIC16F877A
                                            
      4. Fundamento Teórico

      4.1 BUCLE DE CONTROL WHILE
        • El bucle while o bucle mientras es un ciclo repetitivo basado en los resultados de una expresión lógica; se encuentra en la mayoría de los lenguajes de programación estructurados. El propósito es repetir un bloque de código mientras una condición se mantenga verdadera.
        • La condición ha de ser una sentencia que devuelva un valor booleano, y esta puede ser el valor booleano sí, verdadero (true) si la condición se cumple, o falso si esta no se cumple (false). También puede contener el nombre de una variable booleana, y el valor de la expresión dependerá de su contenido. Se debe tener en cuenta que además de las variables también puede haber llamadas a funciones que devuelvan un valor.
          • Sentencias comparativas: La forma más obvia tal vez, y la más usada sin duda, son las sentencias comparativas, que usan los operando igual, diferente, menor o igual, mayor o igual, menor y mayor. En el caso del lenguaje C, se utilizan los siguientes símbolos para representar las comparaciones anteriores: ==, !=, <=, >=, <, >.
          • Particularidades de lenguajes: En algunos lenguajes, se pueden utilizar variables no booleanas en la comparación. Por ejemplo, si la variable vale 0 será como si la condición no se cumpliera, y siempre que sea diferente de 0, se considerará que la condición se cumple.


           4.2 BUCLE DE CONTROL FOR
      • El bucle for es una estructura de control en programación en la que se puede indicar de antemano el número mínimo de iteraciones. Está disponible en casi todos los lenguajes de programación imperativos.
      ELEMENTOS DEL BUCLE "FOR"
        • Variable de Control: Prácticamente un mandato impuesto por el uso habitual es utilizar la letra i Iterador como variable de control, o bien sus sucesoras en caso de bucles anidados. El uso de esta letra críptica quizás a primera vista es sin embargo una excelente forma de aportar agilidad de lectura al código por su uso tan extensivo. Como raras veces los bucles anidados superan las tres dimensiones (por una sencilla cuestión de explosión exponencial), las letras i, j y k suelen ser las únicas relacionadas con este uso. En C se define en el primer parámetro de la instrucción junto con la inicialización (opcional).
        • Inicialización de la Variable de Control:En pseudolenguaje se pide explicitarlo (es la sección := Valor Inicial), sin embargo, otros lenguajes más permisivos como C no lo requieren de forma obligatoria. De todos modos, la práctica de utilizar variables de control que no se inicializan en el bucle no es recomendada para la legibilidad del código. En C se define en el primer parámetro del bucle junto con la variable de control.
        • Condición de Control: En pseudolenguaje se ve representado por el valor final que puede tomar la variable de control (la sección Valor Final). En C es el segundo parámetro y puede ser cualquier condición (ni siquiera es obligación que esté la variable de control, aunque una vez más, esto no se considera una buena práctica).
        • Incremento: En pseudolenguaje se toma por defecto el valor 1, aunque puede explicitarse por medio de la sentencia PASO = Valor Paso cualquier número entero (léase bien entero, o sea que técnicamente podemos decrementar). En C es el último parámetro.
        • Cuerpo: Es lo que se hará en cada iteración, pueden ser una o más instrucciones. En pseudolenguaje pesa la restricción de no poder alterar el valor de la variable de control; esto no es requerido en C, pero no se considera una buena práctica.

          4.3 BUCLE DE CONTROL IF - IF ELSE
        • Esta se usa cuando se necesita decidir cual de los caminos disponibles va a ser tomado basados en cierta condición. Si esta condición evaluada es verdadera, la sentencia que sigue a esta condición es ejecutada, de lo contrario y de la condición ser falsa entra en la sentencia else y esta será ejecutada.
      5. Desarrollo de tareas indicadas en el laboratorio

      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:
        • Al iniciar el programa todos los leds deben permanecer apagados.



        • Al presionar A5, debe encender C0, al volver a presionar, debe encender C1 y así sucesivamente.



        • Al presionar D0, los deben encender sucesivamente pero en sentido inverso.


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

        6. EVIDENCIA DE TRABAJO



       7. OBSERVACIONES Y CONCLUSIONES

                 OBSERVACIONES
        • De acuerdo al número de instrucciones que el microcontrolador maneja se le denomina de arquitectura RISC (reducido) o CISC (complejo).
        • Se observó que al momento de transferir la información desde el software PIC C COMPILER a el PICKIT2 se realiza mediante archivo .HEX.
        • Para evitar tener error como respuesta en la compilación del código introducido en el software PIC C COMPILER debemos agregar a la nueva carpeta que hemos creado el archivo ".h" acompañado del código del microcontrolador que utilizaremos.
        • Al comprobar que la compilación de información en el software PICKIT2 no se obtuvo lo esperado, en este caso era el parpadeo del led en la ubicación C3,se debió a que debimos primeramente habilitar las filas y columnas del ordenado conjunto de led's con la ayuda del dip switch presente al costado del mismo.
        • Se observó, que cuando asignamos como valor 1 a nuestra variable se podrá hacer visible el cambio según lo que se busque al modificar el programa, de lo contrario no podremos observar tal cambio aunque este mismo si se realiza internamente.
                 CONCLUSIONES
        • Se logró desarrollar programas utilizando el software PIC C COMPILER, posteriormente se llevo a su ejecución con PICKIT2.
        • Para evitar dañar nuestro equipo de trabajo y realizar una corroboración adecuada del código introducido podemos utilizar nuestro programa ISIS PROTEUS, solo transfiriendo el archivo".cof".
        • Se entendió que el PIC utilizado en la presente sesión 16F877A es capaz de realizar diferentes actividades que requieran del procesamiento de datos digitales, de control y comunicación digital de diferentes dispositivos.
        • Se comprendió el manejo adecuado de puertos en forma grupal e independiente para el control de luces.
        • Se concluye que es importante conocer acerca de símbolos y comandos presentes en la programación ya que así podremos tener una interpretación más adecuada y desarrollar adecuadamente la experiencia.
            8. BIBLIOGRAFÍA

      • Marin, Francisco (2007) Diseño basado en microcontroladores.  Málaga: Universidad de Málaga. (004.16/M26D)
      • Pereira, Fabio (2007) Microcontroladores PIC. Sao Paulo:s.n. (005.13/P43)
      • José María Angulo Usátegui [y otros]. (2007) Electrónica digital y microprogramable .Madrid: Thomson. (621.381/A37/I)

            9. INTEGRANTE 

        Condori Ortíz, Daniel Agustín C5 - A