martes, 11 de septiembre de 2018

LABORATORIO N° 03

PROGRAMACIÓN CON DISPLAY DE 7
SEGMENTOS

1. COMPETENCIA ESPECIFICA 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.

2. MARCO TEÓRICO

2.1. TIPOS DE VARIABLES
Una variable es un objeto del lenguaje cuyo valor se puede cambiar. Antes de utilizar una variable ésta debe de ser declarada. Al declarar una variable, se le asocia un identificador, es decir, un nombre, con un tipo de almacenamiento cuya forma determina la visibilidad y existencia de la variable. 
Hay dos clases de tipos de datos: tipos fundamentales y tipos derivados.
A continuación veremos los tipos de datos fundamentales:

2.1.1. TIPO ENTERO
Representa números enteros con o sin signo, que estarán compuestos por los dígitos del 0 al 9, pudiendo ser precedidos por los signos + o -.
Algunos ejemplo de datos enteros son: 0, 23, -176, -1, etc.
Para definir variables en C se antepone la palabra reservada del tipo al identificador de la variable. El tipo de datos entero se define en el lenguaje de programación C por la palabra reservada int.
Para definir un tipo de dato en C se escribe lo siguiente:
int nombre_variable = valor;
No es necesario que la variable tenga un valor predeterminado. Se puede definir sin asignarle ningún valor.
Si tenemos varios datos que son del mismo tipo, se pueden definir todas en la misma línea de código escribiendo un único int, separando el nombre de las variables por “,”. Una vez que se haya acabado de definir variables, se cierra la línea de código con “;”.

Por ejemplo: 
int edad = 24;
int edad;
int edad, num, contador;


2.1.2. TIPO REAL
Se emplean para representar números reales (con decimales).
Para definir datos reales se antepone la palabra reservada float al identificador de la variable.
float identificador = valor;

Por ejemplo: 
float numero1, numero2;
float numero3 = 123.43;
float numero3;


2.1.3. TIPO CARACTER
Este tipo de datos se emplea para representar un carácter perteneciente a un determinado código utilizado por el ordenador (normalmente el código ASCII).
Para representar este tipo de dato se antepone la palabra reservada char al identificador de la variable.
Char identificador = ‘valor’;
Una constante tipo char se representa como un solo carácter encerrado entre comillas simples.

Por ejemplo: 
char letra, letra2;
char letra=’a’;


2.1.4. TIPO CADENA DE CARACTERES
Una cadena de caracteres es un número de caracteres consecutivos (incluso ninguno) encerrado entre unos delimitadores determinados, que en el lenguaje C son las comillas dobles.
Para definir variables de tipo cadena, estas se definen como vectores de caracteres, esto es, anteponiendo la palabra reservada char al identificador de la variable, y después entre corchetes la longitud máxima de cadena.
Char identificador[cantidad] = “ mensaje ”;

Por ejemplo:
char cadena[20];
char cadena[20] = “Hola mundo”;
char cadena[] = “HOLA”;

En la siguiente tabla se hace un resumen de los distintos tipos de datos:
TIPO DE DATO
ESPECIFICADORES DE FORMATO
COMENTARIO
Int
%d
Entero con signo
Float
%f
Real con signo
Char
%c
carácter
Char [n]
%s
Cadena de caracteres

Estos tipos básicos admiten una modificación del rango de valores, aplicando las siguientes palabras  reservadas:
  • short (corto)
  • long (largo)
  • signed (con signo)
  • unsigned (sin signo)
Las modificaciones se aplican a los tipos int y char, a excepción del modificador long que también puede aplicarse al tipo double. Las posibles combinaciones son:
TIPO
NÚMERO DE BITS
RANGO
char
8
-128 a 127
unsigned char
8
0 a 255
signed char 
8
-128 a 127
short 
16
-32768 a 32767
int 
16
-32768 a 32767
unsigned int 
16
0 a 65535
signed int 
16
-32768 a 32767
short int
16
-32768 a 32767
unsigned short int
16
0 a 65535
signed short int
16
-32768 a 32767
long int
32
-2147483648 a 2147483647
signed long int
32
-2147483648 a 2147483647
unsigned long int
32
0 a 4294967295
long
32
-2147483648 a 2147483647
unsigned long
32
0 a 4294967295
float
32
3.4E-38 a 3.4E+38
double
64
1.7E-308 a 1.7E+308
long double
64 ó 80 (según versión).
1.7E-308 a 1.7E+308   ó 3.4E-4932 a 1.1E+4932

3. EVIDENCIA DE TAREAS EN LABORATORIO

3.1. DIAGRAMA DE LA SIMULACIÓN DEL ENTRENADOR DE PICS EN PROTEUS


3.2. VIDEO EXPLICATIVO MOSTRANDO LAS TAREAS A SER EVALUADAS, SIMULACIÓN E IMPLEMENTACIÓN DEL PROGRAMA SOLICITADO

4. OBSERVACIONES:
  • Para llamar a una subrutina, debemos colocar el nombre de esta y luego colocar paréntesis con la variable a ser evaluada, dependiendo del caso.
  • Para hacer que la visualización de los tres Displays de 7 segmentos se vea en forma continua, tenemos que multiplexar el encendido de estos a una gran velocidad.
  • Para hacer que se escuche un pitido en el parlante del entrenador se realizó una subrutina en la programación, en donde se creaba un tren de pulsos a una determinada frecuencia.
  • Para realizar los tres pitidos en caso de que se sobrepase el número 600, se estableció un intervalo de 200ms entre ellos y uno de 1000ms en cada secuencia.
  • Al momento de presionar los pulsadores, en los Displays de 7 segmentos solo se mostraba la cifra de unidades. Para solucionar este problema se creó un bucle con "for" adicional en vez de un retardo de tiempo.

5. CONCLUSIONES
  • Se realizaron subrutinas y se aprendió a cómo llamarlas dentro del programa principal.
  • Se modificó el programa base con las tareas a ser evaluadas, utilizando el programa PIC C Compiler, en donde se crearon nuevos bucles con "for" y se llamaron a las subrutinas necesarias.
  • Se programaron bucles con "for" en la modificación del programa base, para no tener que copiar demasiadas lineas repetitivas.
  • Se crearon bucles con "for" adicionales en lugar de los delays, para hacer que el numero se muestre en todo momento en los Displays casi de manera simultánea.
  • Se logró transferir el archivo generado HEX al entrenador utilizando el programa PICKIT2.
  • Se probó en el entrenador el correcto funcionamiento de las tareas a ser evaluadas, incluso se realizaron mejoras al programa anterior para que los Displays se visualizaran en todo momento incluso cuando se presionaban los pulsadores.

6. FOTO GRUPAL

7. ANEXOS

7.1. Cuestionario 3 - Curso virtual: Simulando Sistemas Embebidos con Microcontroladores PIC











domingo, 26 de agosto de 2018

LABORATORIO N° 02

PROGRAMACIÓN BÁSICA CON BUCLES DE CONTROL

1. COMPETENCIA ESPECIFICA DE LA SESION
  • 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.

2. MARCO TEÓRICO

2.1. BUCLES DE CONTROL
Las estructuras de control nos permiten controlar el flujo del programa: tomar decisiones, realizar acciones repetitivas etc, dependiendo de unas condiciones que nosotros mismos establezcamos. Así podemos hacer un script que nos salude cada día de la semana de una manera diferente. O por ejemplo hacer un script que nos pida la contraseña una y otra vez hasta que suministremos la opción correcta.

2.1.1. LA TOMA DE DECISIONES IF-ELSE
Quizá la estructura de control más básica y la más utilizada sea if-else:
if (condición) {
// instrucciones que hay que ejecutar si la condición es verdadera
} else {
// Instrucciones que hay que ejecutar si la condición es falsa
}
En castellano sería algo así:
Si (Tal cosa es cierta) {
//  Haz esto
} En caso contrario {
// Haz esto otro
}
Ejemplo:
if ($nombre=="Coder") {  // Si el nombre es Coder
echo(" Hombre $nombre! Ya estás cotilleando por aquí otra vez!"); // saludo especial
}else {
echo("Hola, $nombre, gracias por visitarnos"); // saludo para los demás
} 
La cláusula else (la parte del if-else que indica lo que hay que hacer si la condición es falsa) es opcional.


2.1.2. BUCLES: WHILE
If else nos permitía decidir si queríamos ejecutar o no una instrucción en función de una condición, los bucles nos permiten utilizar una condición para determinar cuantas veces queremos ejecutar una instrucción:
While (condicion) {
// Instrucciones a ejecutar una y otra
//vez mientras la condición sea cierta
}
El funcionamiento es muy parecido al del if-else, la diferencia estriba en que si la condición es cierta y se ejecuta la orden, la condición vuelve a comprobarse una y otra vez mientras siga siendo cierta. En cambio en el cambio del if-else sólo se comprueba la condición una vez, si es cierta se ejecuta la instrucción y se sigue con el programa.
Ejemplo:
$cantidad = 1;
while ($cantidad < 10) {
echo ("$cantidad ");
$cantidad++;
}
Esto traducido a castellano sería:
$cantidad = 1; $cantidad es igual a uno
while ($cantidad < 10) Mientras el valor de la variable $cantidad sea menor que 10
echo (“$cantidad “); Escribe el valor de cantidad
$cantidad++ (suma 1 al valor que tenga $cantidad, también podríamos haber escrito $cantidad = $cantidad +1)


2.1.3. BUCLES: FOR
Los bucles for funcionan exactamente igual que en C . Con una sola instrucción controlamos todo el bucle, así que para los vaguetes está muy bien.
for (valor inicial; condicion; ejecutar en cada blucle) {
// Instrucciones a ejecutar mientras la condición sea cierta
}
Ejemplo:
for ($cantidad = 1; $cantidad <10; $i++) {
echo("$cantidad");
}
Traducido es igual a:
Cantidad es igual a 1, mientras cantidad sea menor que 10 escribe cantidad en pantalla y después súmale 1 al valor de cantidad. Es decir, es exactamente el mismo ejemplo que vimos en el bucle while pero de otra manera.

3. EVIDENCIA DE TAREAS EN LABORATORIO

3.1. DIAGRAMA DE LA SIMULACIÓN DEL ENTRENADOR DE PICS EN PROTEUS

3.2. VIDEO EXPLICATIVO MOSTRANDO LAS TAREAS A SER EVALUADAS



3.3. VIDEO EXPLICATIVO MOSTRANDO EN SIMULACIÓN E IMPLEMENTACIÓN DEL PROGRAMA SOLICITADO

4. OBSERVACIONES:
  • Hay que procurar realizar el programa en PIC C Compiler de forma ordenada y con comentarios si es posible, para poder entender el programa en caso de verlo más adelante.
  • En caso de que el programa no salga como deseamos es recomendable depurarlo paso a paso el simulador de Proteus para así corregor los posibles errores que pudiera presentar.
  • Es necesario copiar el archivo "16F877A.h" en la carpeta donde se creó el programa, para que sea reconocido mediante la instrucción "#include <16f877a.h>" que se utilizó en el encabezado del programa,.
  • Se observó que al momento de realizar la simulación en Proteus y cargar el programa en el PIC, se observó que tanto el archivo HEX y COF lo ejecutan de manera correcta, pero con el archivo HEX no es posible depurarlo paso a paso.
  • Al momento de programar en PIC C Compiler, debemos tomar en cuenta que para negar una variable hay que usar el comando "!" y no "TOGGLE", ya que este último se usa para puertos de salida.
  • Utilizamos el comando "<<" y ">>" para recorrer el contenido de una variable una posición hacia la izquierda y derecha respectivamente.

5. CONCLUSIONES
  • Se realizó el manejo de puertos de forma grupal e independiente para el manejo de luces, realizando el programa dado en el laboratorio correspondiente.
  • Se reconoció la función que cumplen las instrucciones en las directivas o cabeceras del programa utilizado: "#include <16f877a.h>", "#use delay (clock=20M)" y "#fuses HS, NOPROTECT, NOWDT".
  • Se utilizaron funciones condicionales como "IF", "ELSE IF" para la realización de las condiciones establecidas al presionar cada pulsador.
  • Se compiló el programa en PIC C Compiler a partir del cual se generaron los archivos HEX y COF para realizar la simulación en Proteus.
  • Se logró transferir el archivo generado HEX al entrenador utilizando el programa PICKIT2 y se verificó el correcto funcionamiento del mismo.
  • Se modificó el programa para encender un LED y desplazarlo hacia arriba y abajo mediando dos pulsadores y un tercer pulsador para habilitar dicho dezplazamiento.

6. FOTO GRUPAL


7. ANEXOS

7.1. Cuestionario 02 - Curso virtual: Simulando Sistemas Embebidos con Microcontroladores PIC












jueves, 15 de marzo de 2018

LABORATORIO N° 01

HERRAMIENTAS DE PROGRAMACIÓN HARDWARE
y SOFTWARE

1. COMPETENCIA ESPECIFICA DE LA SESION
  • Listar las partes internas generales de un microcontrolador.
  • Identificar las funciones generales de un microcontrolador
  • Introducción a la programación en PIC C Compiler
  • Cómo utilizar el Entrenador

2. MARCO TEÓRICO
El PIC 16F877a es un microcontrolador de Microchip Technology fabricado en tecnología CMOS, su consumo de potencia es muy bajo y además es completamente estático (esto quiere decir que el reloj puede detenerse y los datos de la memoria no se pierden). Tiene una memoria memoria de programa tipo FLASH, lo que representa gran facilidad en el desarrollo de prototipos y en su aprendizaje, pues permite reprogramarlo nuevamente sin ser borrado con anterioridad.
Resultado de imagen para pic16f877a

2.1. RESUMEN DE CARACTERÍSTICAS PRINCIPALES DEL PIC 16F877a
  • Memoria de programa: FLASH de 8K de instrucciones de 14 bits
  • Memorias de datos: SRAM de 512 bytes, EEPROM de 256 bytes
  • Pines I/O (Input/Output) : 6 del puerto A, 8 del puerto B, 8 del puerto C, 8 del puerto D y 3 del puerto E, además de 8 entradas analógicas.
  • Pila (Stack): 8 niveles (14 bits)
  • Fuentes de interrupción: 14
  • Instrucciones: 35
  • Compatible modo SLEEP
  • Frecuencia máxima del oscilador de 20MHz
  • Conversor Analógico/Digital de 10 bits multicanal (8 canales de entrada)
  • Corriente máxima absorbida/suministrada (sink/source) por pin: 25 mA
  • Voltaje nominal: 3 a 5.5V DC (CMOS)
  • Power On Reset
  • Power Up Timer (PWRT) 
  • Oscilador Start Up Timer (OST)
El encapsulado que he utilizado es de tipo DIP (Dual In-Line Pin) de 40 pines, aunque posee otros encapsulados (SOIC, PLCC y QFP):
Pines

2.2. ARQUITECTURA INTERNA
Este término se refiere a los bloques funcionales que componen en PIC internamente, como la memoria RAM, la memoria FLASH,  la lógica de control, etc.
El PIC 16F877 se basa en la arquitectura Harvard, en la cual el programa y los datos se pueden trabajar con buses (un bus es un conjunto de líneas que transportan información entre 2 o más módulos) y memorias separadas, lo cual permite que las instrucciones y los datos tengan longitudes diferentes.

3. EVIDENCIA DE TAREAS EN LABORATORIO

3. DIAGRAMA DE LA SIMULACIÓN DEL ENTRENADOR DE PICS EN PROTEUS


3.2. VIDEO EXPLICATIVO

4. OBSERVACIONES:
  • Al momento de realizar el programa en PIC C Compliler, debemos tener cuidado al momento de escribir las instrucciones y comandos de manera correcta; ya que podría conllevarnos a errores al momento de compilarlo.
  • Debido a que se utilizó la instrucción "#include <16f877a.h>" en el encabezado del programa, es necesario copiar el archivo "16F877A.h" en la carpeta donde se creó el programa.
  • Antes de compilar el programa en PIC C Compiler, es necesario cerrar las otras pestañas y abrirlo nuevamente para que se generen los archivos HEX y COF.
  • Al momento de realizar la simulación en Proteus y cargar el programa en el PIC, se observó que tanto el archivo HEX y COF lo ejecutan de manera correcta.
  • La instrucción “while(true)” genera un bucle infinito y de no colocar el programa dentro, este solo se ejecutará una vez.
  • Al presionar el pulsador de RESET, la ejecución del programa vuelve al inicio, sin importar dónde se quedó mientras se ejecutaba.

5. CONCLUSIONES
  • Se logró identificar las partes internas y funciones generales del microcontrolador 16F877a. Realizando además las pruebas correspondientes en el entrenador de PICs.
  • Se realizó un programa básico en PIC C Compiler para el encendido y apagado de un LED utilizando las instrucciones "while", "output_high", "output_low" y "delay_ms".
  • Se compiló el programa en PIC C Compiler a partir del cual se generaron los archivos HEX y COF para realizar la simulación en Proteus.
  • Se logró transferir el archivo generado HEX al entrenador utilizando el programa PICKIT2 y se verificó el correcto funcionamiento del mismo.
  • Se modificó el programa para diseñar un semáforo con 3 salidas (LEDs), el cual fue simulado en Proteus con éxito.
  • Se reemplazó la instrucción output_high(PIN_C0), por output_bit(PIN_C0, 1); notando que cumple una función similar poniendo el pin C0  a 1.
  • Se eliminó la instrucción “while(true)”, sin la cual ya no se generaba el bucle infinito y el pin se encendía y apagaba una sola vez.
  • Se presionó el pulsador de RESET y se observó que la ejecución del programa volvía al inicio, sin importar dónde se quedó.

6. FOTO GRUPAL


7. ANEXOS

7.1. Cuestionario 01 - Curso virtual: Simulando Sistemas Embebidos con Microcontroladores PIC