miércoles, 10 de octubre de 2018

LABORATORIO N° 07

MANEJO DE TIMER E INTERRUPCIONES


1. COMPETENCIA ESPECIFICA DE LA SESIÓN
  • Conocer el funcionamiento y la configuración de las Interrupciones
  • Conocer el funcionamiento y la configuración del Timer cero
  • Aplicar estos conocimientos en la realización de un cronómetro



2. MARCO TEÓRICO

2.1. INTERRUPCIÓN TIMER0 PIC
Interrupción timer0 PIC, mediante la interrupción timer0 PIC se puede detener el programa  principal con el cual este trabajando el microcontrolador PIC, para indicarle al microcontrolador que se dedique a realizar otras tareas, al finalizar la interrupción timer0 PIC, se seguirá con el programa principal desde donde fue interrumpido.

En esta sección que es una secuencia del tema tratado en este enlace, se tratará sobre la interrupción timer0 PIC por desborde, por lo que es muy importante que se sepa utilizar el timer0 PIC, sobre la utilización del timer0 PIC ya se ha tratado y se puede ver aquí, para lo que se va a comentar a continuación se utilizará como base el microcontrolador PIC16F84A.

La interrupción timer0 PIC por desborde ocurre cuando el registro TMR0 del timer0 llega a su valor máximo de 255 tras lo que se reinicia a 0, a este paso de 255 a 0 se le llama desborde, y es en ese momento que se puede habilitar que ocurra una interrupción.

2.2. INTERRUPCIÓN TIMER0 PIC POR DESBORDE
Del registro INTCON se pondrá su bit7 GIE a 1 para habilitar el uso de las interrupciones, su bit5 TMR0IE se pondrá a 1 para habilitar el uso de la interrupción timer0 PIC por desborde, su bit2 TMR0IF es la bandera que detecta que se ha producido la interrupción del  timer0 por desborde y se tendrá que poner a 0 para que haga la detección, cuando ocurre la interrupción este bit se pone automáticamente a 1, y para seguir detectando mas interrupciones externas en al rutina de atención a las interrupciones se tendrá que poner nuevamente a 0 este bit.
interrupción timer 0 pic intcon

Del registro OPTION_REG se pone a 0 su bit5 T0CS para indicarle al PIC que se utilizará el timer0 como temporizador, el bit4 se pone a 0 ya que este se usa cuando el timer0 es utilizado como contador, mediante su bit3 PSA=0 se indica a quien será asignado el prescaler, y con sus bits PS2:PS0 se indica de cuanto será el prescaler.
interrupción timer0 pic option_reg
interrupción timer0 pic registro option_reg2


3. EVIDENCIA DE TAREAS EN LABORATORIO

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



3.2. VÍDEOS EXPLICATIVOS MOSTRANDO LAS TAREAS A SER EVALUADAS Y SIMULACIÓN DEL PROGRAMA SOLICITADO

3.2.1. VIDEO: PARICAHUA CRUZ, MAYCOL REINILDO

JUEGO PARA APRENDER A PROGRAMAR: BLOCKLY GAMES (último nivel)


3.2.2. VIDEO: SEJJE YUCRA, FERNANDO 

JUEGO PARA APRENDER A PROGRAMAR: BLOCKLY GAMES


3.2.3. VIDEO: CHAVEZ CHENEAU, DAVID ALONSO
JUEGO PARA APRENDER A PROGRAMAR: BLOCKLY GAMES


3.2.4. VIDEO: BALLENAS ZÚÑIGA, MARVIN ROODWELL
JUEGO PARA APRENDER A PROGRAMAR: BLOCKLY GAMES


3.2.5. VIDEO: MENDEZU NINA, ELIZABETH YULISSA
JUEGO PARA APRENDER A PROGRAMAR: BLOCKLY GAMES


3.2.6. VIDEO: CARRANZA CAVANI, JEAN PIERRE
JUEGO PARA APRENDER A PROGRAMAR: BLOCKLY GAMES





lunes, 1 de octubre de 2018

LABORATORIO N° 06

LECTURA DE ENTRADAS ANALÓGICAS Y SENSOR DE TEMPERATURA


1. COMPETENCIA ESPECIFICA DE LA SESIÓN
  • Lecturas analógicas de un canal del PIC
  • Configuración de un Sensor de Temperatura
  • Lectura analógica en una pantalla LCD


2. MARCO TEÓRICO

2.1. ENTRADAS ANALÓGICAS

2.1.1. DESCRIPCIÓN
adc
El PIC 16F877a, entre sus varios periféricos, posee un conversor análogo a digital con una resolución de 10 bits que puede leer los voltajes presentes en los pines marcados como AN0 hasta AN7
pines

La lectura de estos se hace de forma multiplexada, una a la vez. Como buen sistema digital, las lecturas son tratadas como muestras tomadas a intervalos regulares de tiempo, las que son retenidas por un capacitor interno. La cantidad de muestras por segundo o velocidad de lectura son un submultiplo de la velocidad de oscilación del PIC por lo cual se debe cuidar que esta no resulte ser mayor que el tiempo que el capacitor interno demora en cargarse.

Una mala elección de velocidad de lectura, puede resultar en mediciones erróneas, por debajo de las magnitudes que se pretenden medir. Según Microchip, el tiempo de adquisición de los datos debe ser mayor a 19.72us.


2.1.2. REGISTROS INVOLUCRADOS EN LA CONVERSIÓN A/D
La conversión analogo-digital, se configura y controla con los registros ADCON0 y ADCON1, donde es posible configurar aspectos como el canal (pin del PIC) en que se hará la lectura, velocidad de muestreo, estado de la conversión, pines análogos o digitales, entre otros. Por otro lado la conversión resultante se alberga en los registros ADRESH y ADRESL La gráfica lo explica de mejor manera.
registrosAcon


2.1.3. VELOCIDAD DE CONVERSIÓN
La velocidad de muestreo con que se tomarán lecturas en el pin indicado, viene dada por el binario formado por los bits ADCS2-ADCS1-ADCS0, donde cada combinación corresponderá  a lo mostrado en la tabla. (extraída del datasheet).
osc

2.1.4. CANAL DEL LECTURA
El binario formado por CHS2-CHS1-CH0 corresponde al equivalente decimal del canal a leer. Por ejemplo 0b111 corresponde a leer el acanal AN7, mientras que el binario 0b011 corresponderá a AN3.


2.1.5. BIT DE ESTADO DE LA CONVERSIÓN
Este bit permanecerá en 1 mientras se esté ejecutando la conversión análogo-digital. Obviamente se debe esperar a que este esté en 0 antes de poder leer el resultado de la conversión.


2.1.6. CANALES USADOS COMO ENTRADA ANALÓGICA
En el binario formado por los bits PGF3-PGF2-PGF1-PGF0, se debe ingersar la combinación correspondiente a los canales digitales o analógicos que se quieran usar, vease la siguiente tabla para más detalle.
pinesad
En este caso cabe notar la simplicidad de utlizar 0000 para tener todos los pines analógicos de 0 a 5 volts o 0110 para desactivar la conversión AD y usar esos pines como digitales.


2.1.6. EL BIT ADFM Y COMO LEER EL RESULTADO.
El resultado de la conversión, finalmente será un numero de 0 a 1023 correspondiente a los 0 a 5 volts, tal como se muestra  en la primera Imagen bajo el título principal. Este número al ser de 10 bits no cabe en un solo registro y es por eso que se utilizan dos (ADRESH y ADRESL) en binario puede parecer dificil de entender pero en en el lenguaje C de XC8 basta con sumar ambos registros y almacenar el reslutado en un INT para tener el número entre 0 y 1023 correspondiente a la conversión.


3. EVIDENCIA DE TAREAS EN LABORATORIO

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


3.2. VÍDEOS EXPLICATIVOS MOSTRANDO LAS TAREAS A SER EVALUADAS Y SIMULACIÓN DEL PROGRAMA SOLICITADO

3.2.1. VIDEO: PARICAHUA CRUZ, MAYCOL REINILDO

JUEGO PARA APRENDER A PROGRAMAR: BLOCKLY GAMES


3.2.2. VIDEO: MENDEZU NINA, ELIZABETH YULISSA

JUEGO PARA APRENDER A PROGRAMAR: BLOCKLY GAMES


3.2.3. VIDEO: CARRANZA CAVANI, JEAN PIERRE

JUEGO PARA APRENDER A PROGRAMAR: BLOCKLY GAMES


3.2.4. VIDEO: SEJJE YUCRA, FERNANDO 
JUEGO PARA APRENDER A PROGRAMAR: BLOCKLY GAMES


3.2.5. VIDEO: CHAVEZ CHENEAU, DAVID ALONSO
JUEGO PARA APRENDER A PROGRAMAR: BLOCKLY GAMES


3.2.6. VIDEO: BALLENAS ZÚÑIGA, MARVIN ROODWELL
JUEGO PARA APRENDER A PROGRAMAR: BLOCKLY GAMES





lunes, 24 de septiembre de 2018

LABORATORIO N° 05

PROGRAMACIÓN DE UNA PANTALLA LCD

1. COMPETENCIA ESPECIFICA DE LA SESIÓN
  • Conocer el Display LCD y su funcionamiento.
  • Programar eficientemente el LCD.
  • Programar HMI para proyecto actual.


2. MARCO TEÓRICO

2.1. PANTALLA LCD 16x2

2.1.1. DESCRIPCIÓN
La pantalla de cristal liquido o LCD (Liquid Crystal Display) es un dispositivoµControlado de visualización gráfico para la presentación de caracteres, símbolos o incluso dibujos (en algunos modelos), es este caso dispone de 2 filas de 16 caracteres cada una y cada carácter dispone de una matriz de 5x7 puntos (píxeles), aunque los hay de otro número de filas y caracteres. Este dispositivo esta gobernado internamente por un microcontrolador y regula todos los parámetros de presentación, este modelo es el mas comúnmente usado y esta información se basará en el manejo de este u otro LCD compatible

Características principales:
  • Pantalla de caracteres ASCII, además de los caracteres Kanji y Griegos
  • Desplazamiento de los caracteres hacia la izquierda o la derecha
  • Proporciona la dirección de la posición absoluta o relativa del carácter
  • Memoria de 40 caracteres por línea de pantalla.
  • Movimiento del cursor y cambio de su aspecto.
  • Permite que el usuario pueda programar 8 caracteres.
  • Conexión a un procesador usando un interfaz de 4 u 8 bits

2.1.2. FUNCIONAMIENTO
Para comunicarse con la pantalla LCD podemos hacerlo por medio de sus patitas de entrada de dos maneras posibles, con bus de 4 bits o con bus de 8 bits, este último es el que explicare y la rutina también será para este. En la siguiente figura vemos las dos maneras posibles de conexionar el LCD con un PIC.
El control de contraste se realiza al dividir la alimentación de 5V con una resistencia variable de 10K.
Las líneas de datos son triestado, esto indica que cuando el LCD no esta habilitado sus entradas y salidas pasan a alta impedancia.


2.1.3. CONEXIONADO
En la siguiente imagen de Proteus se puede observar la estructura de sus pines.
Lo  podemos dividir en los Pines de alimentación, pines de control y los pines del bus de datos bidireccional. Por lo general podemos encontrar ademas en su estructura los pines de Anodo de led backlight y cátodo de led backlight.
Pines de alimentación:
  • Vss: Gnd
  • Vdd: +5 voltios
  • Vee: corresponde al pin de contraste, lo regularemos con un potenciómetro de 10K conectado a Vdd.

Pines de control:
  • RS: Corresponde al pin de selección de registro de control de datos (0) o registro de datos(1). Es decir el pin RS funciona paralelamente a los pines del bus de datos. Cuando RS es 0 el dato presente en el bus pertenece a un registro de control/instrucción. y cuando RS es 1 el dato presente en el bus de datos pertenece a un registro de datos o un carácter.
  • RW: Corresponde al pin de Escritura(0) o de Lectura(1). Nos permite escribir un dato en la pantalla o leer un dato desde la pantalla.
  • E: Corresponde al pin Enable o de habilitación. Si E(0) esto quiere decir que el LCD no esta activado para recibir datos, pero si E(1) se encuentra activo y podemos escribir o leer desde el LCD.

Pines de Bus de datos:
  • El Bus de datos bidireccional comprende desde los pines D0 a D7. Para realizar la comunicación con el LCD podemos hacerlo utilizando los 8 bits del bus de datos(D0 a D7) o  empleando los 4 bits mas significativos del bus de datos(D4 a D7). En este caso vamos a explicar la comunicación con el bus de 4 bits.



3. EVIDENCIA DE TAREAS EN LABORATORIO

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


3.2. VÍDEOS EXPLICATIVOS MOSTRANDO LAS TAREAS A SER EVALUADAS Y SIMULACIÓN DEL PROGRAMA SOLICITADO

3.2.1. VIDEO: PARICAHUA CRUZ, MAYCOL REINILDO

JUEGO PARA APRENDER A PROGRAMAR: LIGHT BOT


3.2.2. VIDEO: CARRANZA CAVANI, JEAN PIERRE

JUEGO PARA APRENDER A PROGRAMAR: LIGHT BOT


3.2.3. VIDEO: SEJJE YUCRA, FERNANDO 

JUEGO PARA APRENDER A PROGRAMAR: LIGHT BOT


3.2.4. VIDEO: CHAVEZ CHENEAU, DAVID ALONSO

JUEGO PARA APRENDER A PROGRAMAR: LIGHT BOT



3.2.5. VIDEO: BALLENAS ZÚÑIGA, MARVIN ROODWELL
JUEGO PARA APRENDER A PROGRAMAR: LIGHT BOT


3.2.6. VIDEO: MENDEZU NINA, ELIZABETH YULISSA
JUEGO PARA APRENDER A PROGRAMAR: LIGHT BOT


4. OBSERVACIONES:
  • Se utilizaron comandos como "printf()" y "lcd_gotoxy()" para realizar modificaciones en la pantalla LCD.
  • Para evitar el errores de rebote debido a los pulsadores, se implementó un sencillo bucle "While", del cual se salía cuando se dejaba de pulsar el pulsador correspondiente.
  • Al momento de colocar imprimir un texto diferente al anterior en el LCD, se recomienda rellenar con la tecla "espacio", los caracteres sobrantes; debido a que borrar la pantalla, significaría un paso muy tedioso al volver a colocar los datos que no se quieren modificar.
  • Cuando queramos imprimir un texto en el LCD, debemos de fijarnos en en qué fila nos encontramos; ya que podríamos estar llenando la fila equivocada.
  • Se debe tener en cuenta la estructura del programa, esta debe estar bien estructurada para corregir el programa en caso de que se detecte un error.
  • Al introducir los comandos "lcd_gotoxy"()" y en los paréntesis va la columna y la fila en la cual se imprimirá el dato.
  • Observamos que el dato para que no varie este debe estar con el incremento restado ya que sino excederia 1000.
  • Observamos que %4lu significa ingresar una variable y darle 4 espacios de separacion.

5. CONCLUSIONES
  • Se logró conocer el display LCD 16x2, descripción y funcionamiento, a partir del cual se verificó su conexionado en el PIC16F877A y se realizó la correspondiente programación.
  • Se programó el LCD utilizando el PIC16F877A y haciendo uso de las librerías necesarias para el manejo de dicha pantalla.
  • Se modificó el programa base para incrementar o decrementar un número, visualizarlo en el LCD y mostrar "Full" o "Valor mínimo" al llegar a los valores extremos.
  • Se culminó con éxito el juego para aprender a programar "Lightbot", cuya experiencia fue muy entretenida y divertida, además de un entorno interactivo.
  • Se programó la pantalla LCD 16x2 del PIC 16F877A, así como también la simulación de este en el entrenador HFK- O1OU PICS.
  • Se reconoció la instrucción IF para establecer una condicional, a la vez también se identificó la instrucción ELSE, para establecer una serie de comandos en caso de que la condición IF no se cumpliera.
  • Se logró realizar la compilación del código fuente del programa, para luego configurar y establecer la comunicación con el entrenador HFK – 01OU PICS.