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.