sábado, 13 de abril de 2019

LABORATORIO NRO 7

LABORATORIO NRO 7

MANEJO DEL TIMER Y LAS INTERRUPCIONES

1. OBJETIVOS
  • 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. MATERIALES Y EQUIPOS
  • CCS Compiler instalado.
  • Entrenador de PICS
  • Pantalla LCD
  • PIC16F877A
  • Guía de Laboratorio. El trabajo se desarrolla de manera GRUPAL.
  • PC con Software de simulación.
3. FUNDAMENTO TEÓRICO

3.1. TIMER 0

El timer0 PIC es un temporizador contador de 8 bits, el registro TMR0 es el temporizador contador timer0 en si, es donde se guardan los valores del timer0 PIC, cuando es utilizado como temporizador sus valores aumentaran de uno en uno entre 0 y 255 con cada 4 ciclos de reloj, no olvidar que cada ciclo de instrucción del microcontrolador PIC es realizado en 4 ciclos de reloj, por ejemplo si el oscilador con el que está funcionando el microcontrolador PIC es de 4MHz, entonces el registro TMR0 aumentará una unidad en cada 1us, si el registro TMR0 se incrementa en 100 unidades habrán transcurrido 100us; cuando el timer0 PIC es utilizado como contador el registro TMR0 ya no aumenta su valor de uno en uno en cada 4 ciclos de reloj, sino que lo hará mediante el flanco de subida o el flanco de bajada de alguna señal que llegue a un pin especial del PIC conectado al timer0 PIC, este pin es identificado como T0CKI que en el PIC16F877A es el pin6 o RA4, esto puede variar de acuerdo al microcontrolador PIC utilizado, pero siempre se llamará T0CKI.

El registro TMR0 del timer0 PIC puede ser leído 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 por programa.



3.1.1. TIMER PIC COMO TEMPORIZADOR

Se verá en este caso el uso del timer0 PIC como temporizador, normalmente el registro TMR0 del timer0 PIC irá 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 será de 0,25us, luego cada ciclo de instrucción tardará 4 veces este valor, es decir 4*(0,25us) lo que viene a ser 1us, a esto se se conoce como ciclo máquina TCM=4/Fosc, entonces el registro TMR0 aumentará en una unidad cada microsegundo cuando el oscilador es de 4Mhz.

Como el registro TMR0 es de 8 bits este aumentará 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 1us mas, por lo que en ir de 0 a 255 y volver a 0 transcurren 256us; no siempre se utiliza una FOSC de 4Mhz esto puede variar, por lo que como consecuencia variará el tiempo que trascurre para que el registro TMR0 aumente su valor en una unidad.

El temporizador contador pic TMR0 cuenta con lo que se conoce como 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 time0 PIC para el PIC16F877A puede tomar el valor de 1, 2, 4, 8, 16, 32, 64, 128 o 256

Si el prescaler elegido es por ejemplo de 64 y la FOSC=4Mhz, entonces la frecuencia de trabajo del temporizador Ftempserá de Ftemp=FOSC/(4*prescaler), el tiempo que tardará ahora el temporizador en aumentar una unidad será la inversa de este valor, a lo que se le conoce como periodo del temporizador Ttemp=(4*prescaler)/(FOSC), por lo que en este caso Ttemp=(4*64)/(4Mhz) de donde Ttemp=64us, esto quiere decir que ahora el temporizador aumentará en una unidad cada 64us y en este caso entonces el registro TMR0 para ir de 0 a 255 tardará 255*Ttemp=255*64us=16320us=16,32ms, la misma idea es para los demás prescaler.


Utilizando una regla de 3 simple se llega a la siguiente ecuación que ayudará a encontrar el valor inicial adecuado a cargar en el registro TMR0 para obtener el tiempo buscado.

TMR0=28-Tretardo*(Fosc/(4*prescaler))-1

3.2. INTERRUPCIONES

Interrupciones con el PIC, los microcontroladores PIC se programan para que realicen tareas de acuerdo a lo que interese, normalmente realizarán esas tareas en forma ordenada una tras otra en forma cíclica, a esto se le conoce como el programa principal; las interrupciones microcontroladores con el PIC son eventos que hacen que el programa principal se detenga, para que el microcontrolador PIC se dedique ha realizar otras tareas, mientras no ocurra una interrupción el microcontrolador solo realizará las tareas indicadas dentro del programa principal.

4. VÍDEO

https://drive.google.com/file/d/1sZQM6fxlMpdrrRymRq9CMjUAl9VYSjU6/view?usp=sharing

5. OBSERVACIONES
  • Se utilizo #int_TIMER0 para llamar a la función de interrupción
  • Se usaron sentencias condicionales dentro de la función de desbordamiento del TIMER
  • Se habilito y deshabilito las interrupciones del timer para iniciar la temporización
  • Se asignaron valores para que cuando el TIMER se desborde reinicie en el valor asignado
  • Se uso una función BIP creando un tren de pulsos para emitir pitidos segun las actividades planteadas
6.CONCLUSIONES
  • Se conoció el modo de funcionamiento del TIMER0
  • Se usaron interrupciones en la programación
  • Se usaron el timer y las interupciones juntas para programar un cronómetro que puede hacer una cuenta ascendente o descendente
7. INTEGRANTES
  • Corimanya Castelo, Laura Milagros

domingo, 7 de abril de 2019

LABORATORIO NRO 6

LABORATORIO NRO 6

LECTURA DE ENTRADAS ANALÓGICAS Y SENSOR DE TEMPERATURA

1. OBJETIVOS
  • Lecturas analógicas de un canal del PIC
  • Configuración de un Sensor de Temperatura
  • Lectura analógica en una pantalla LCD
2. MATERIALES Y EQUIPOS
  • CCS Compiler instalado.
  • Entrenador de PICS
  • Pantalla LCD
  • PIC16F877A
  • Guía de Laboratorio. El trabajo se desarrolla de manera GRUPAL.
  • PC con Software de simulación.
3. FUNDAMENTO TEÓRICO


3.1. CONVERSOR ANALÓGICO DIGITAL

El módulo de A/D tiene cuatro registros. Estos registros son: ·

ADRESH : Parte alta del resultado de la conversión ·

ADRESL: Parte baja del resultado de la conversión ·

ADCON0: Registro de Control 0 ;control del funcionamiento del conversor ·

ADCON1, Registro de Control 1; configuración de los pines del puerto
Conversor Analógico Digital PIC: El registro ADCON0


En la siguiente imagen se tiene el registro ADCON0 para el control del conversor analógico digital PIC, se pueden ver los nombres que le corresponden a cada uno de sus bits.


Los bits 7 y 6 de este registro junto con el bit 6 del registro ADCON1 se elige el reloj, esto es entre cuanto se fraccionará la frecuencia del oscilador utilizado para que se tenga un tiempo de conversión adecuado, esto es el tiempo que tardará el PIC para realizar la conversión, ademas de estas opciones el conversor analógico digital pic cuenta con su propio oscilador formado por un circuito RC que también puede ser elegido mediante estos bits, en la siguiente tabla se tienen los fraccionamientos del oscilador de acuerdo a los valores que tomen estos bits o si se quiere utilizar el oscilador interno del CAD.


De acuerdo a la frecuencia del oscilador se obtendrá un tiempo para la conversión, ese tiempo tiene que ser mayor a 1,6us para que al leer los registros ADRESH y ADRESL el numero obtenido represente en forma adecuada el valor de la señal analógica.

Por ejemplo, si se usa un cristal con una Fosc de 4Mhz, de la tabla se puede ver que si la Fosc se divide entre 2 se tendrá el el tiempo de conversión será de 0,5us, lo cual no llega a los 1,6us mínimos, si se divide entre la Fosc 4 se tendrá el tiempo de conversión será de 1us, con lo cual tampoco se llega a los 1,6us mínimos, si se divide la Fosc entre 8 se tendrá el el tiempo de conversión será de 2us, con lo cual ya se ha logrado un tiempo de conversión que sobrepasa los 1,6us mínimos que se necesita, por lo que en este caso se elegiría esta opción para el tiempo de conversión y la combinación de bits serian 001, aunque se pueden elegir otros siempre y cuando se obtengan tiempos de conversiones mayores a los 1,6us.

Los bits 5, 4 y 3 son para elegir el canal analógico a utilizar, esto es el pin que previamente mediante los bits 3,2,1 y 0 del registro ADCON1 se ha configurado como entrada analógica, en el cual se leerá la señal analógica, el PIC16F877A cuenta con 8 entradas analógica, 5 de las cuales están en el puerto A y 3 en el puerto E, los pines de las entradas analógicas se conocen como AN0, AN1, AN2, AN3, AN4, AN5, AN6 y AN7, la elección del canal a leerse se hace de acuerdo a los valores de estos bits como se muestra en la siguiente tabla.



El bit 2 se pondrá a 1 para iniciar la conversión analógica digital PIC, cuando la conversión de analógico a digital termina este bit se pone a 0 en forma automática, lo que indica que la conversión a terminado además de que si está habilitada las interrupciones por el CAD pues se producirá una interrupción.

El bit 1 no es utilizado por lo que pondrá a 0.

El bit 0 es para activar o desactivar el conversor analógico digital PIC, cuando este bit es puesto a 1 el conversor está activo y listo para usarse, si este bit es puesto a 0 el conversor estará apagado no pudiendo utilizarse.

TAREA DE INVESTIGACIÓN

Averigüe cómo funciona un sensor LM35 y cómo se puede leer dicha temperatura en una pantalla LCD.


El LM35 es un sensor analógico que devuelve la temperatura en forma detensión, esta tensión devuelta es proporcional a la temperatura. Su rangocomprende desde -55º hasta 150ºC y el valor devuelto es el equivalente a latemperatura dividida por 10, entonces en su salida se obtienen valores comoestos


Este dispositivo es de fácil implementación dado que solo cuenta con dos terminales de polarización, y una salida de voltaje directamente proporcional a la temperatura. Este sensor puede ser polarizado de 4 a 30 voltios y tiene una salida de 10m voltios por cada grado Celsius.


El voltaje de salida del sensor se convierte en un número digital de 10-bits utilizando el ADC interno del PIC16F887. Sabiendo que su salida de voltaje es proporcional a la de temperatura. El valor de temperatura máxima de 150 °C, sería 150 x 10mV = 1. 5 V.

La resolución esta dada por:

entonces,

Supongamos, la temperatura ambiente es de 35,4 °C. La salida del sensor será 354mV (0,354 V). La salida del ADC será;

0.354 / 0.00488 = 72.5409.

Si invertimos este proceso, tenemos 72.5409 de ADC y podemos volver atrás y encontrar la temperatura utilizando el factor de escala del sensor (10mV / °C),

Temp = ADCread * ADCres / LM35Vp

Temp = 72.5409 * 0,00488 (V / Count) / 0,01 (V / °C) = 35,4 °C.

Lo mismo con un sensor DS18B20.

La medición de temperatura es una de las tareas más frecuentes realizadas por el microcontrolador. En este ejemplo, se utiliza un sensor DS1820 para medir. Es capaz de medir en el rango de 55 °C a 125 °C con exactitud de 0.5 °C. Para transmitir los datos al microcontrolador se utiliza un tipo especial de la comunicación serial denominado 1-wire. Debido al hecho de que estos sensores son simples de utilizar y de grandes capacidades, los comandos utilizados para hacerlos funcionar y controlarlos tienen la forma de funciones almacenadas en la librería One_Wire. En total son las siguientes tres funciones:
Ow_Reset se utiliza para reiniciar el sensor;
Ow_Read se utiliza para recibir los datos del sensor; y
Ow_Write se utiliza para enviar los comandos al sensor



4. VÍDEO

https://drive.google.com/file/d/1u2W8AAq-cR2ZNopf0BI9hp2Yx2AbGYEw/view?usp=sharing

5. OBSERVACIONES
  • Se utilizo #device adc para la resolución de lectura
  • Se configuró los puertos analógicos, el puerto an3 está conectado a un potenciometro que a través de la variación de voltaje se obtenga valores de temperatura
  • Es importante conocer que tipo de variable usamos para la lectura de valores, asimismo cuando usamos el comando printf se debe configurar adecuadamente el tipo de valor a leer
  • Cuando se varia de adc=8 a adc=10, el valor mostrado varía de 255 a 1023, debido a que 2 elevado a la 10 es 1023, el %4lu (long unsigned) nos permite observar este valor
6.CONCLUSIONES
  • Se conoció como leer valores de las entradas analógicas en el PIC 16f877 y convertir este valor en un señal de temperatura u otro para que sea mostrado en la pantalla LCD
  • Se estableció rangos de temperatura tomando en consideración la resolución de lectura 
  • Se conoció como configurar un Sensor de Temperatura de acuerdo a su rango de medición 
7. INTEGRANTES
  • Corimanya Castelo, Laura Milagros

jueves, 4 de abril de 2019

LABORATORIO NRO 5

LABORATORIO NRO 5

PROGRAMACIÓN DE UNA PANTALLA LCD

1. OBJETIVOS
  • Conocer el Display LCD y su funcionamiento 
  • Programar eficientemente el LCD  
  • Programar HMI para proyecto actual. 
2. MATERIALES Y EQUIPOS
  • CCS Compiler instalado.
  • Entrenador de PICS
  • Pantalla LCD
  • PIC16F877A
  • Guía de Laboratorio. El trabajo se desarrolla de manera GRUPAL.
  • PC con Software de simulación.
3. FUNDAMENTO TEÓRICO

3.1. PANTALLA LCD

Es una pantalla delgada y plana formada por un número de píxeles en color o monocromos colocados delante de una fuente de luz o reflectora. A menudo se utiliza en dispositivos electrónicos de pilas, ya que utiliza cantidades muy pequeñas de energía eléctrica.


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)


La librería del LCD:

Para poder visualizar los caracteres o símbolos en el LCD es necesario que en el programa de código fuente a emplear, incluyamos la librería.
En este caso empleamos la librería "lcd.c".

La librería viene configurada de esta manera

#define LCD_ENABLE_PIN PIN_E0


#define LCD_RS_PIN PIN_E1


#define LCD_RW_PIN PIN_E2


#define LCD_DATA4 PIN_D4


#define LCD_DATA5 PIN_D5


#define LCD_DATA6 PIN_D6


#define LCD_DATA7 PIN_D7


Funciones a usar:


lcd_init(): Inicializa el lcd
lcd_gotoxy(x,y): Establece la posición de escritura en el lcd.
lcd_putc(char s): nos muestra un dato en la siguiente posición del lcd.
printf(lcd_putc, cadena, variable)


4. VÍDEO


https://drive.google.com/file/d/14uC0PxpdDnHpTNr_hiDAYxb6BUkc2KXz/view?usp=sharing


5. OBSERVACIONES
  • Se observó que se necesitaron declarar varias variables para habilitar y deshabilitar algunos pines
  • Se conoció el comando lcd_gotoxy() que nos permite direccionar el cursor en  la columna y fila indicadas
  • Se usó un bucle while para que las instrucciones se puedan repetir
  • Se conoció el comando printf que nos permite imprimir en la pantalla del LCD valores
6.CONCLUSIONES
  • Se conoció el funcionamiento de la pantalla LCD, su configuración interna y como se debe realizar su conexiado
  • Se llamó a la librería del LCD dentro del programa
  • Se concluye que la programación de pantallas de LCD con el suo de librería es relativamente fácil, ya que simplifica mucho los comandos, y los caracteres como letras o números ya vienen incluidos en las librerías
7. INTEGRANTES
  • Corimanya Castelo, Laura Milagros