jueves, 11 de octubre de 2018

Laboratorio N°7

Manejo del Timer y las Interrupciones


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.
CONTENIDOS A TRATAR 
  • Interrupciones  
  • Timer cero.
MATERIALES Y EQUIPO
  • 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. 
MARCO TEÓRICO:

Timers:

Un timer no es más que un contador cuya entrada está conectada al reloj del sistema. De hecho, la mayoría de los timers pueden reconfigurarse como contadores. En ese caso, en lugar de contar pulsos de reloj cuentan los pulsos que llegan a un determinado pin.

Uso de TIMERS con interrupciones (timer)
Tras verificar que los TIMERS funcionan pasemos a usarlos en combinación con las interrupciones para poder establecer tareas a intervalos regulares. Por descontado, para poder usar interrupciones tenemos que habilitar las interrupciones globales y la interrupción del TMR0 en particular (aunque esto también se puede en la función OpenTimer con la máscara TIMER_INT_ON/OFF. Como vimos en el tutorial de interrupciones es conveniente trabajar con macros para no tener que recordar que bits habilitaban que interrupciones.
Ciertos timers están considerados periféricos, por lo que también tendríamos que habilitar las interrupciones periféricas, aunque no es el caso del TMR0.
El fundamento del proceso es sencillo. La interrupción del TMR0 se producirá cuando el contador del timer pase por cero (cada 256 o 65536 ciclos dependiendo de si estamos en 8 o 16 bits). La idea es arrancar con un valor del contador tal que en el tiempo deseado alcance el valor máximo (256 o 65536).



Consideremos el modo 8 bits (sin divisor) y arranquemos con un valor 156 en TMR0L. Necesitaremos 100 ciclos (256-156) para rebosar el contador y provocar la interrupción. Al cabo de 100 x 0.2 usec = 20 usec se producirá la primera interrupción.

Entrenador en Proteus:


 En los CCS tambien se dan interrupciones, pero de la siguiente manera: 

  • Interrupciones en CCS CCS dispone de directivas para el manejo de interrupciones por ejemplo:   #int_XXXX. La directiva especifica que la función que la sigue es la función de interrupción correspondiente.
 Sus funciones CCS 8 se ven validadas en una pantalla, donde se ven reflejados los diferentes tipos de conectores ( valores de  recepción del PIC 16F876A).


En el CCS  vemos algunas funciones anexadas  para la interrupción:

 Para facilitar el manejo de interrupciones en C, el compilador incluye funciones
  •  enable_interrupts(level) Activa las interrupciones indicadas por level.
  •  disable_interrupts(level) desactiva las interrupciones indicadas por level.
  •  clear_interrupts(level) Borra el flag de interrupción indicado



Partiendo de estas especificacions obtenemos un variable que debemos reconocer el LEVEL 

  1. Level es una constante definida en el fichero de cabecera (#include) generando el código necesario para activar las interrupciones correspondientes modificando los registros ITCON, PIE1 y PIE2. Debemos activa el “global mente” cuando se activamos alguna interrupción .

Definiciones de cada registro de level  






Para estos registros se muestra un ejemplo general del código de registro


PROCEDIMIENTO:
A partir del código mostrado, realice los cambios necesarios para realizar un programa que CUENTE EN FORMA DESCENDENTE, (temporizador regresivo), bajo las siguientes condiciones: 

a. Al presionar pulsador en D0, incrementar MINUTOS. el temporizador aún no debe estar contando el tiempo. (sirve para configurar tiempo de cuenta).


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


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


Programación realizado en CCS COMPILER:





EVIDENCIAS:

A) Video de Jilmar Nuñez Zegarra




B) Video de Jean Carlo Andia Jimenez 




JUEGO:


A) Juego de Jilmar Nuñez Zegarra




B) juego de Jean Carlo Andia Jimenez 


OBSERVACIONES:


(Jilmar Nuñez Zegarra)
  •   Para generar los segundos, minutos y centésimas, debemos usar 3 variables de tipo entero   
  •     Si queremos saber el tiempo de un segundo real debemos usar el timer 0 el cual es de 8 bits
  •    Si queremos parar el cronómetro, usamos la sentencia: “disable_interrups” y el pulsador en el pin A5 el cual también aumenta los minutos y para iniciarlo de nuevo:  “enable_interrups” y el pulsador en el pin D0. 

CONCLUSIONES:

(Jilmar Nuñez Zegarra)
·    Hemos creado una función que hemos llamado BIP para emitir 3 pitidos una vez el temporizador llegue a 0.
Creamos una variable que llamada encendido la cual con una función AND se activa con los minutos y segundos en cero, para que cuando iniciemos el contador os bips no produzcan sonido
·         Para el caso de realizar un cronómetro con cuenta hacia atrás. Fue necesario asignar a la variable segundos 59 y terminarla en -1, igualmente con minutos.
·       Aprendimos el uso correcto de las interrupciones para programas un temporizador 

jueves, 4 de octubre de 2018

Laboratorio N°6

LECTURA DE ENTRADAS ANALÓGICAS Y SENSOR DE TEMPERATURA

1.COMPETENCIA ESPECIFICA DE LA SESIÓN 

  • Lecturas analógicas de un canal del PIC.
  • Utilizar al microcontrolador en aplicaciones de control electrónico.
  • Lectura analógica en una pantalla LCD.
  • Desarrollar y ejecutar programas en un microcontrolador PIC.

2.MATERIALES Y EQUIPO
  • CCS Compiler instalado.
  • Entrenador de PICS
  • Pantalla LCD
  • PIC16F877A
  • PC con Software de simulación.
3.TRABAJO DE INVESTIGACIÓN 

  • DESCRIPCIÓN Y FUNCIONAMIENTO DE LAS ENTRADAS ANALÓGICAS 
Nombre del Pin

RA0/AN0 / Pin 2 / entrada analógica 0
RA1/AN1 / Pin 3 / entrada analógica 1 
RA2/AN2/VREF-/CVREF / Pin 4 / entrada analógica 2
RA3/AN3/VREF+/ Pin 5 / entrada analógica 3 
RA4/T0CKI / Pin 6 /  bit 4 del puerto A, también se usa como entrada de reloj al temporizador o    contador
RA5/SS/AN4 / Pin 7 / entrada analógica 4 / también lo usa el puerto serial asíncrono


  • AVERIGÜE COMO FUNCIONA UN SENSOR LM35 Y COMO SE PUEDE LEER DICHA TEMPERATURA EN UNA PANTALLA LCD
Es un sensor de temperatura con una precisión calibrada de 1ºC y un rango que abarca desde -55º a +150ºC. El sensor se presenta en diferentes encapsulados pero el más común es el to-92 de igual forma que un típico transistor con 3 patas, dos de ellas para alimentarlo y la tercera nos entrega un valor de tensión proporcional a la temperatura medida por el dispositivo.


Con el LM35 sobre la mesa las patillas hacia nosotros y las letras del encapsulado hacia arriba tenemos que de izquierda a derecha los pines son: VCC – Vout – GND.

La salida es lineal y equivale a 10mV/ºC por lo tanto:

+1500mV = 150ºC

+250mV = 25ºC

-550mV = -55ºC

Funcionamiento: Para hacernos un termómetro lo único que necesitamos es un voltímetro bien calibrado y en la escala correcta para que nos muestre el voltaje equivalente a temperatura.
El LM35 funciona en el rango de alimentación comprendido entre 4 y 30 voltios.
Podemos conectarlo a un conversor Analógico/Digital y tratar la medida digitalmente, almacenarla o procesarla con un μ Controlador o similar.

Usos: El sensor de temperatura puede usarse para compensar un dispositivo de medida sensible a la temperatura ambiente, refrigerar partes delicadas del robot o bien para loggear temperaturas en el transcurso de un trayecto de exploración.






  • AVERIGÜE COMO FUNCIONA UN SENSOR  DS18B20 Y COMO SE PUEDE LEER DICHA TEMPERATURA EN UNA PANTALLA LCD
Lo primero que vemos es que hay diferentes formas del sensor DS18B20. A esto se le llama encapsulado y depende de donde lo utilices (protoboard, PCB, etc…), tendrás que elegir uno u otro.

Lo más importante de esta parte es la disposición de los pines. Para cada encapsulado encontramos una disposición diferente. Existen tres encapsulados: TO-92, SO y μSOP. El más adecuado para es el TO-92 por su fácil conexión en la una protoboard.


Una de las mayores ventajas de éste protocolo es la posibilidad de controlar un determinado dispositivo con un sólo cable, como bien nos explican en el enlace. Nos ponen como ejemplo un conocido sensor de temperatura de la casa Maxim, con un rango de medición de -55°C a 125°C.



4. PROCEDIMIENTO 


a) Donde dice “#device adc=8” cambie por “#device adc=10”; convierta la variable “lectura”
en entero de 16 bits y la línea printf cambie “%4u” por “%4lu”. ¿Cuál es el cambio
mostrado en la pantalla LCD? ¿por qué?.
El puerto A3 puede contar hasta 1024, osea 2^10-1=1023 bits



b) Convierta el valor leído en valor de voltaje de 0 a 5 voltios. Para esto cambie la variable
“lectura” a variable tipo float y configure su forma de mostrarse en el LCD. Luego, en la
función While(true), añada la instrucción “lectura = lectura / 204.6”. Cambie las
instrucciones para que en la pantalla del LCD aparezca algo así “Tension: 3.456 v”.



c) Finalmente agregue una condición IF para que si el valor de voltaje supera 4.5 voltios,
mostrar el mensaje “WARNING” en la primera línea del LCD.



5. EVIDENCIAS  

a) Vídeo de Jean Carlo Andia Jiménez 




b) Video de Jilmar Nuñez Zegarra



6. JUEGO 

JUEGO DE JEAN CARLO ANDÍA JIMÉNEZ 



Juego de Jilmar Nuñez Zegarra





7. OBSERVACIONES 


JEAN CARLO ANDIA JIMENEZ 
  • El programa Pic Complier tiene la opción de ayuda, la cual se activa presionado la tecla F1
  • Las constantes en la programación, tiene una gran participación, ya que, define en que paso se realizara el siguiente comando. 
  • Pic compiler puede leer datos de diferentes maneras, por ejemplo "printf (lcd_putc, "Valor: %4lu", dato) "  puede leer valores con decimales.

8. CONCLUSIONES

JEAN CARLO ANDIA JIMENEZ 


  • Reconocimos las entradas analogías del Pic PIC16F877A.
  • Cumplimos con las tareas propuestas dadas por el profesor. 
  • Realizamos lecturas analógicas en una pantalla LCD. 






lunes, 24 de septiembre de 2018

Laboratorio N°5

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. MATERIALES Y EQUIPO:
  • CCS Compiler instalado.
  • Entrenador de PICS
  • Pantalla LCD
  • PIC16F877A
  • PC con Software de simulación.
3. MARCO TEÓRICO:

  • LCD
El LCD(Liquid Crystal Dysplay) o pantalla de cristal líquido es un dispositivo empleado para la visualización de contenidos o información de una forma gráfica, mediante caracteres, símbolos o pequeños dibujos dependiendo del modelo. Está gobernado por un microcontrolador el cual dirige todo su funcionamiento.
En este caso vamos a emplear un LCD de 16x2, esto quiere decir que dispone de 2 filas de 16 caracteres cada una. Los píxeles de cada símbolo o carácter, varían en función de cada modelo.
  •  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:

Vee: Corresponde al pin de contraste.
Vdd: +5v
Vss: GND

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. 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 en 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). 

4. DESARROLLO:


  •  Se dispone de una pantalla LCD. Elaborar un programa que INCREMENTE un número en 150 unidades cada vez que se presione un pulsador y DECREMENTE dicho número en 25unidades cada vez que se presione otro pulsador.Si el valor del número supera 1000 unidades, mostrar en la pantalla LCD en la primera línea:“FULL”. Si el valor llega a ser menor o igual a 10, mostrar “VALOR MÍNIMO”. En ambos casosel valor del número no debe incrementarse ni decrementarse.


  • VIDEO DE JEAN CARLO ANDIA JIMEMEZ



  • JUEGO LIGHT BOT 

  • VIDEO DE Jilmar Nuñez Zegarra

  • JUEGO LIGHT BOT 

5. OBSERVACIONES 

JEAN CARLO ANDIA JIMENEZ
  • Se puede utilizar una variedad de librerías, específicamente utilizamos la que que puede mejorar una pantalla LCD, <lcd.c>.
  • En la programación C es determinante las coordenadas que se van a utilizar y a donde serán enviadas. 
  • Los pines del LCD especialmente el bus de datos  bidireccional puede ser analógica o digital, dependiendo en que lo queremos aplicar. 

6. CONCLUSIONES 


JEAN CARLO ANDIA JIMENEZ 
  • Conocimos el display LCD y posteriormente el funcionamiento en un pic16f877a.
  • Adecuamos la programación para realizar la tareas propuestas por el profesor. 
  • Aprendimos a utilizar nuevos comandos en la programación Pic compiler.