jueves, 21 de noviembre de 2019

LABORATORIO N°12


MICROCONTROLADORES




Laboratorio N°12:



MANEJO DE TIMER Y LAS INTERRUPCIONES.

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

  • Conocer el funcioamiento 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.

III. FUNDAMENTO TEÓRICOS

A. TIMER0 PIC

El timer0 Pic es un temporizador contador de 8 bits, el registro TMR0 es el temporizador contador timer0 PIC, cuando es utilizado como temporizador sus valores aumentaran de uno en uno entre 0 y 255 con cada 4 ciclos del reloj, cabe destacar que cada ciclo de instrucción del microcontrolador PIC es realizado en 4 ciclos de reloj.

El registro TMR0 del timer' PIC puede ser leido y escrito, puede ser prescalado para que el tiempo en su incremento de valor en una unidad sea mayor, el timer0 PIC cuando alcanza su valor máximo de 255 se reinicia, volviendo a incrementar sus valores de 0 a 255, además cuando llega a su valor máximo y se reinicia puede producir una interrupción, lo que se decide en la programación.

FUENTE: MRELBERNI

B. TIMER0 AVR: CONTADOR

Para el PIC 16F877A el registro TMR0 del timer0 PIC esta formador por 8 bits por lo que se puede contar desde 0 hasta 255, al utilizar timer0 PIC como contador este no aumentara sus valores o su cuenta con cada ciclo de instrucción, en este caso el timer0 estará conectado al pin TOCKI por donde se le hara llegar una señal, la cual al cambiar de estado hara que el timer0 PIC se incremente en una unidad, estos incrementos en su cuenta pueden ser por cada flanco de subida o cada por flanco de bajada de la señal, el flanco a utilizar se elige por programa, por ejemplo se elige el flanco de subida, quere decir que cada vez que la señal que llega al pin T0CKI pase de un bajo a un alto o de 0 a 1, el registro TMR0 aumentara en una unidad, de esta manera se le puede utilizar como contador , cuando la señal pase de un alto a un bajo o de 1 a 0 el registro TMR0 no aumentara su valor o no se incrementara.

FUENTE: MRELBERNI

¿QUÉ BITS SE UTILIZAN?

-> Bit 7: al poner este bit a ' se activan unas resistencia pull up internas que el micrcontrolador tiene en el puerto B.
-> Bit 6: es para cuando se utilice una interrupción externa por el pin INT, con este bit se elige si se quiere que la interrupción sea por flanco de subida o por flanco de bajada.
-> Bit5 TOCS este es el bit que en este caso interesa, al poner este bit a 1 se elige utilizar el timer0 PIC como contador, si se le pone a ' se elige utilizar el timer0 PIC como temporizador
-> Bit4 T0SE con este bit se elige si se quiere que el timer0 PIC cuente por flanco de subida, esto es cuando la señal que llega por el pi T0CKI pase de 0 a 1, o que cuente por flanco de bajada
-> Bit 3: es para utilización del prescaler para el timer 0, el prescaler se le puede asignar al timer0 o al WDT mediante este bit
-> Bit 2,1,0 son para elegir el prescaler a utilizar mediante las combinaciones de esots bits se tienen diferentes valores para el prescaler, el que a su vez dependerá de a quien se la ha asignado el prescaler mediante el bit3, como se puede observar en la imagen.

C. TIMER0 AVR: TEMPORIZADOR

El timer0 Pic como temporizador normalmente se utilizar el TMR0 del timer0 PIC ira aumentando sus valores con cada ciclo de instrucción del microcontrolador PIC, y para estos microcontroladores a cada ciclo de instrucción le toma 4 ciclos del oscilador que se esté utilizando, si se usa por ejemplo un cristal de Fosc=4Mhz entonces cada ciclo del oscilador sera de 0.25us, luego cada ciclo de instrucción tardara 4 veces este valor, es decir 4*(0.25us) lo que viene a ser 1us, a esto se le conoce como ciclo máquina Tcm= 4/Fosc, entonces el registro TMR0 aumentará en una unidad cada microsegundo cuando el oscilador es de 4Mhz.

Entonces como el registro TMR0 es de 8 bits este aumentara desde 0 o desde algún valor que se le ponga como valor inicial hasta un máximo de 255, por ejemplo si va desde 0 hasta 255 habrán transcurrido 255us luego volverá a 0 pero en esa vuelta a 0 transcurre a 1us mas, por lo que en ir de 0 a 255 y volver a 0 transcurren 256us.

El temporizador contador PIC TMR0 cuenta con prescaler esto hace que la frecuencia de trabajo Fosc, se divida por este prescaler, con lo que se logra que el temporizador contador pic tarde un poco mas en aumentar su valor en una unidad; el prescaler del timer0 PIC para el PIC16F877A puede tomar el valor 1, 2, 4, 8, 16, 32, 64, 128 o 256; estos valores se eligen mediante las combinaciones de los bits 0, 1 y 2 del registro OPTION_REG

FUENTE: MRELBERNI

¿QUÉ BITS SE UTILIZAN?

-> Bit 7: al poner este bit a ' se activan unas resistencia pull up internas que el micrcontrolador tiene en el puerto B.
-> Bit 6: es para cuando se utilice una interrupción externa por el pin INT, con este bit se elige si se quiere que la interrupción sea por flanco de subida o por flanco de bajada.
-> Bit5 TOCS este es el bit que en este caso interesa, al poner este bit a 1 se elige utilizar el timer0 PIC como contador, si se le pone a ' se elige utilizar el timer0 PIC como temporizador
-> Bit4 T0SE con este bit se elige si se quiere que el timer0 PIC cuente por flanco de subida, esto es cuando la señal que llega por el pi T0CKI pase de 0 a 1, o que cuente por flanco de bajada
-> Bit 3: es para utilización del prescaler para el timer 0, el prescaler se le puede asignar al timer0 o al WDT mediante este bit
-> Bit 2,1,0 son para elegir el prescaler a utilizar mediante las combinaciones de esots bits se tienen diferentes valores para el prescaler, el que a su vez dependerá de a quien se la ha asignado el prescaler mediante el bit3, como se puede observar en la imagen.

IV. DESARROLLO DE LAS TAREAS

Las condiciones encargadas en este laboratorio son:

a. Al presionar el pulsador D0 se debe incrementar segundos, el temporizador aún no debe estar contando el tiempo.

b. Al presionar el pulsador D1, iniciar CUENTA REGRESIVA desde los minutos previamente configurados.


d. Si la cuenta llega a 00:00, congelar la cuenta y sonar BIP 3 veces.

V. VÍDEO DEMOSTRATIVO




VI. OBSERVACIONES Y CONCLUSIONES

a. Observaciones:

  • Al realizar las configuraciones respectivas para lograr cumplir las indicaciones se tuvo complicaciones ya que al tener un temporizador ascendente se tenia que configurar los tiempos para que este sea descendente.
  • Al programar y realizar las pruebas correspondientes en el entrenador físico existía una pequeña interferencia, ya que al presionar el pulsador programado este no respondía correctamente, por lo que se reinicio el entrenador con lo que se logro solucionar el problema.
  • En las primeras pruebas que se realizo se utilizo el programa CCS Compiler en la maquina física pero existía confusiones ya que no encontraba variables como "i", por lo que se utilizo el CCS Compiler pero en la maquina virtual logrando compilar la misma programación.
  • Al realizar las pruebas de la programación en la máquina virtual, no se lograba escuchar los sonidos que se habían programado lo que causo que se revisara de nuevo la programación pero el error era que en la maquina virtual no lograba emitir el sonido, pero en la código en el Proteus de la maquina física si logro emitir el sonido de los "BIP".

b. Conclusiones


  • Se logro elaborar la programación que satisfaga las condiciones que se proporcionaron en este laboratorio, logrando un temporizador descendente controlando su inicio y determinando el tiempo a descender.
  • Se concluye que al existir errores de compilación se debe buscar otras opciones como el uso de la maquina virtual que en este laboratorio ayudo a lograr concluir satisfactoriamente.
  • Se concluye que se debe tener cuidado al simular la programación, ya que el error no solo radica en la programación si no que hay varios elementos que pueden hacer que no funcione correctamente, como el daño del software, las limitaciones de la computadora, etc.

martes, 12 de noviembre de 2019

LABORATORIO N°11


MICROCONTROLADORES


Laboratorio N°11:

PROGRAMACIÓN EN UNA PANTALLA LCD.


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
  • Conocer el Display LCD y su funcionamiento
  • Programar eficientemente el LCD
  • Programar HMI para proyecto actual
III. FUNDAMENTOS TEÓRICOS


FUENTE: Ingeniería Electrónica


En la actualidad existe un sinnúmero de aparatos, desde lo mas pequeño como una calculadora hasta los televisores mayores a 50 pulgadas, las pantallas LCD que son las siglas del ingles liquid crystal display que significa la pantalla de cristal líquido.
1. Características
Cada pixel de un LCD típicamente consiste de una capa de moléculas alineadas entre dos electrodos transparentes, y dos filtros de polarización, los ejes de transmisión de cada uno que están perpendiculares entre sí. Sin cristal líquido entre el filtro polarizarte, la luz que pasa por el primer filtro sería bloqueada por el segundo polarizador.

2. Matrices activas y pasivas dirigidas a LCD
Las pantallas LCD con un pequeño número de sectores, tales como los que se utilizan en relojes digitales y calculadores de bolsillo, tienen contactos eléctricos individuales para cada segmento. Un circuito externo dedicado suministra una carga eléctrica para el control de cada segmento. Esta estructura es díficl de visualizar para algunos dispositivos de visualización.

3. Composición interna un DISPLAY LCD 

La composición interna de un Display LCD de 16x2 esta formada por 6 niveles, estos son:

a. Film de filtro vertical, este primer nivel permite polarizar la luz que entra.

b. Sustrato de vidrio con electrodos de Óxido de Indio ITO, en esta etapa podremos apreciar una especie de plantilla parecida a un display de 7 segmentos, esta plantilla sera la que se muestre en negro cuando la luz se encienda, en las pantallas a color o monitores el proceso es muy parecido aun que la tecnología utilziada abarca una cantidad mayor de pixeles

c. Cristal liquido

d. Sustrato de vidrio con film electrodo común 

e. Film de filtro horizontal, este film es considerado como un filtro ya que este permite o bloquea la luz

f. Superficie reflectante, para devolver la luz al espectador.

FUENTE: Ingeniería Electrónica

4. Pines de conexión
Estas pantallas constan de 16 pines. De izquierda a derecha, sus usos son lo siguientes:

Pin 1 - VSS o GND
Pin 2 - VDD o alimentación (+5V)
Pin 3 - Voltaje de contraste. Se conecta a un potenciometro
Pin 4- Selección de registro. Aqui se selecciona el dispositivo para su uso.
Pin 5- Lectura/ escritura, dependiendo del estado (High o low), se podra escribir o leer datos en el LCD
Pin 6 - Enable. Es el pin habilita o deshabilita el LCD
Pin 7 hasta el Pin 14 - Son los pines de datos por donde se envia o recibe información
Pin 15 - El anodo del LED de iluminación de fondo (+5V)
Pin 16- El cátodo del LED de iluminación de fondo (GND)

IV. DESARROLLO DE LAS TAREAS

La programación que se planteo fue la siguiente:





Esta tarea fuera realizada en el laboratorio lo que se obtuvo fue la imagen siguiente:


V. VIDEO DEMOSTRATIVO



VI. OBSERVACIONES Y CONCLUSIONES
a. Observaciones
  • Al realizar la programación para poder realizar la actividad de este laboratorio se complico el trabajo dado que el compilador PIC C no funcionaba como debía creaba errores donde no debía lo que no permitía ejecutar las acciones que se solicitaban en el código de programación.
  • Precisamente el compilador PIC C no identificaba varias códigos de la programación tales como el big, este se presentaba como un error dado que no se encontraba "definido" pero al no estarlo aparecía mas de 10 lineas un error, lo que impedida realizar el trabajo optimamente.
  • Se aprendió que es necesario saber con que librerías se van a trabajar, dado que al no tener definidos estas librerías no compilara y no encontrara datos que se necesitan para poder compilar correctamente, tales como el "lcd.c" o también el "16f877a.h".
  • Es necesario asegurarse que la programación que lo que se este realizando sea lo que se esta solicitando, es decir, que no es solo completar o añadir algo dado que si no se entiende la programación no se podrá solucionar un problema que pueda surgir.
  • Es necesario definir las variables con las que se van a trabajar, para que al momento de compilar no exista conflicto y menos aún errores que impidan realizar el correcto desarrollo del laboratorio.

b. Conclusiones
  • Se logro realizar el código de programación que cumplieron las condiciones establecidas, demostrando la compilación del mismo y sobre todo se probo en el módulo de entrenamiento y en el simulador de PROTEUS.
  • Se concluye la importancia de conocer las librerías "lcd.c" y "16f877a.h" ya que fueron indispensables para el correcto desarrollo de este laboratorio y para otros futuros proyectos que se den.
  • Se realizaron diversas condiciones para realizar las tareas a realizar, tales como la condición "if" y "else if" que ayudaron a cumplir las condiciones.
  • Se logro realizar la programación tanto en el simulador como en el entrenador notando el correcto funcionamiento del código de programación realizado.

jueves, 7 de noviembre de 2019

LABORATORIO N°10


MICROCONTROLADORES


Laboratorio N°10:


PROGRAMACIÓN CON DISPLAY DE 7 SEGMENTOS

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

Conocer el Display de 7 segmentos y su funcionamiento.
Conocer las técnicas de multiplexación.

III. FUNDAMENTO TEÓRICO

a. TIPOS DE VARIABLES

Los tipos de datos basicos definidos por C son caracteres, numeros enteros y numeros en punto flotante. Los caracteres son representados por char, los enteros por short, int, long y los numeros en punto flotante por float y double. Los tipos básicos disponibles y su tamaño son:

char Carácter (normalmente 8 bits)
short Entero corto con signo (normalmente 16 bits)
int Entero con signo (depende de la implementación)
unsigned Entero sin signo (depende de la implementación)
long Entero largo con signo (normalmente 32 bits)
float Flotante simple (normalmente 32 bits)
double Flotante doble (normalmente 64 bits)
Enteros

Los tipos de datos enteros son : short, int, long y long long, cada uno representando un numero entero de un tamaño o capacidad determinado. Según el compilador y la plataforma de hardware, cada uno de estos tipos de dato puede ocupar desde 1 byte hasta 8 bytes en memoria. Cabe añadir que en caso que no se declare si es con o sin signo, se toma con signo.


-> Variables enteras: Con signo (+, -) y sin signo (+)

Enteros de 8 bits -> 1 byte
Enteros de 16 bits -> 2 bytes
Enteros de 32 bits -> 4 bytes
Enteros de 64 bits -> 8 bytes
Reales

Los tipos de datos que representan a los números reales, ya que utilizan un sistema de representación basado en la técnica de coma flotante, que permite operar con números reales de diversas magnitudes, mediante un número decimal llamado mantisa y un exponente que indica el orden de magnitud.
La forma de declarar una variable flotante es escribiendo en una línea uno de los tipos de datos flotantes y a continuación el nombre de la variable y tal vez algún valor que se les quiera dar.

-> Variables reales (en como flotante)

Reales de 32 bits -> 4 bytes
Reales de 64 bits -> 8 bytes
Reales de 128 bits -> 16 bytes
Caracteres

Los caracteres se representan utilizando el tipo de char, que tiene solo 1 byte de tamaño. Este tipo se utiliza para representar los 256 caracteres de la tabla de caracteres del sistema. El tipo char es tambien un tipo entero, ya que puede tomar valores de 0 a 255. Por lo tanto también puede ser signed o unsigned.

-> Variable no Numericas

Lógicas -> 1 - 8 bytes
Alfanumericas -> "n" bytes


IV. DESARROLLO DE LAS TAREAS

a. TAREAS A SER EVALUADAS

Las condiciones que se tuvieron que cumplir para esta tarea fue la de:
Se tiene un sistema con dos pulsadores (D0, D1) de entrada y 3 display de salida, además de un zumbador en el pin E1. Programe según lo siguiente:

Al empezar el programa, se debe mostar el numero 500.
Al presionar D0, el número mostrado se debe incrementar en 5 unidades, ademas debe zonar un pitido.
Al presionar D1, el número mostrado debe disminuir 5 unidades pero de 1 en 1 cada segundo
Si el numero llegar a ser mayor a 600, debe sonar 3 pitidos.
1. Programación



2. Simulación en Proteus

En la simulación de Proteus, no mostraba el dato que debia dado la programación que se establecio, es por ello que fue necesario introducir el watch window que es una interfaz que permite ver el numero que en el display no se puede lograr ver.



V. VÍDEO DEMOSTRATIVO





Observaciones: 
  • Al inicio se presento un pequeño error, dado que el software PIC C COMPILER no creaba las demás carpetas que permitían simular como el archivo .hex, y para resolverlo se tuvo que recordar la anterior sesión la que se debía extraer en la base de datos del programa la información del pic 167F88A, y se copio a la carpeta donde se guardo una vez copiado se genero los archivos para poder simularlo en PROTEUS.
  • En el desarrollo del laboratorio se observo que la programación realizada al principio no lograba ejecutar las acciones que se programaron, lo cual perjudico el desarrollo del mismo por lo que se recurrió a revisar la programación notando que en una parte de la programación no se negaba lo que contradecía las configuraciones que se dispuso, lo cual era el problema por el cual el entrenador no cumplía las configuraciones que se programaron..
  • Se observo que todo lo aprendido en anteriores semestres, nos ayudo a lograr realizar con mayor eficiencia en este laboratorio en diversas plataformas de programación como lo es Arduino la que nos familiarizo con algunos comandos de bucles de control.+
  • Cuando el puerto C se desciende hasta el ultimo puerto, este ya no regresa por mas que presionemos D0, por lo tanto, se deduce que esto sucede porque el PIC no presenta un proceso de bucle interno.
  • En la investigación con respecto a los bucles de control se observo que existen ciertos comandos que se utilizan a ciertas configuraciones especificas lo que nos demuestra que las soluciones a un problema con respecto a la programación pueden ser infinitas, con respecto a los muchos ejemplos que se puede encontrar en la web.
    Conclusiones
    • Se logró realizar las actividades propuestas por el docente, realizando una correcta programación que permitió simular en el software PROTEUS a través del uso de los bucles de control como los es while, if-else, for, if.
    • Se concluye que el PIC 16F877a no presenta una función de bucles internos, dado que se demostro que al llegar al ultimo pin del puerto C este no puede regresar incluso si presionamos D0.
    • Se logró utilizar todo el puerto_C gracias a la configuración "output_c(0b00000000);" que permitió realizar las actividades propuestas por el docente.
    • Se concluye que es necesario establecer una buena programación de acuerdo a los parametros que se soliciten, demostrando que hasta un ";" puede ser crucial para que la programación no compile, e incluso un "!" para que no funcione como se programe, por lo tanto se debe ser exhaustivo en esta parte, para evitar futuros errores.