jueves, 25 de abril de 2019

MICRO CONTROLADORES

LABORATORIO NR°7
 Manejo del Timer y las Interrupciones 


I. COMPETENCIAS ESPECIFICAS: 
  • 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 cronometro.
II.MARCO TEÓRICO:

  TIMER: 

El timer es un objeto de programación tiene como funcionalidad ejecutar una función o bloque de código cada cierto tiempo. Esto tiene muchas aplicaciones ya que no depende de la acción por parte de usuario para ejecutar cierto código. Por ejemplo podemos hacer que nuestro programa cheque una tabla de una base de datos y muestre la información actualizada en pantalla cada minuto. También se puede hacer que cuente tiempo.

También es un dispositivo, con frecuencia programable, que permite medir el tiempo. Cuando trascurre el tiempo configurado se hace saltar una alarma o alguna otra función a modo de advertencia, al igual es un elemento que ofrece la posibilidad de usar cualquier dispositivo eléctrico de forma programada, activarlo y desactivarlo a las horas que queremos, sin necesidad de estar presentes. Es una buena forma de ahorrar con un aparato como un termo eléctrico, por ejemplo.
TAREA A RESOLVER :
  1. Al presionar pulsador en D0, incrementar SEGUNDOS. el temporizador aún no debe estar contando el tiempo. (sirve para configurar tiempo de cuenta).
  2. Al presionar pulsador en D1, iniciar CUENTA REGRESIVA desde los minutos previamente configurados.
  3. Si la cuenta llega a 00:00, congelar la cuenta y sonar BIP 3 veces.

PROGRAMACIÓN :

#include <16f877a.h>             // Incluimos archivo con PIC a utilizar
#device adc=8                    // Utilizamos 8 bits de RESOLUCIÓN de lectura 
#use delay (clock=20M)           // Indicamos al compilador que trabajaremos a 20Mhz
#fuses HS, NOPROTECT, NOWDT      // Configuración básica de los fusibles

#define LCD_ENABLE_PIN        PIN_D3   //Definimos los pines a ser utilizados por la
#define LCD_RS_PIN            PIN_D2   //pantalla LCD
#define LCD_RW_PIN            PIN_A0   
#define LCD_DATA4             PIN_D4
#define LCD_DATA5             PIN_D5
#define LCD_DATA6             PIN_D6
#define LCD_DATA7             PIN_D7  
#include <lcd.c>                 // Incluimos librería para manejar Pantalla LCD

int centesimas=0,segundos=0,minutos=0;
void BIP();
int encendido =0;

#int_TIMER0                      // FUNCION DE INTERRUPCION POR
void TIMER(VOID)                 // DESBORDAMIENTO DEL TIMER 0
{
 ++centesimas;                 // incrementar una centésima
   if (centesimas>99)
      {
      --segundos;                // si llegamos a 100, incrementar un segundo
      centesimas=0;
      }
   if (segundos==-1)
      {
      --minutos;                 // si llegamos a 60, incrementar un minuto
      segundos=59;
      }
   if (segundos==0)              // si llegamos a 3 minutos, hacer alguna acción
      {
      segundos=0;
      disable_interrupts (GLOBAL);          //habilita interrupcion de timer0
      // agregar cualquier otra acción necesaria.
      }
   
   set_timer0 (61);              //reinicar cuenta desde 61

void main ()
{
   lcd_init () ;                                                                        // Inicializamos pantalla LCD
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);   //configuracion del timer0
   set_timer0 (61);                                                                // interrupción cada centésima
   enable_interrupts (INT_TIMER0);                                  //habilita interrupcion de timer0
   disable_interrupts (GLOBAL);                 
   
   printf (lcd_putc, "\f***CRONOMETRO***") ;              // Mandamos mensaje por única vez
   
   WHILE (true)
   {
      lcd_gotoxy(2,2);
      Printf(lcd_putc,"Tiempo %02u:%02u",minutos, segundos);
      
     IF (!input(PIN_D0))        
      {
         delay_ms(500); 
         minutos= ++ minutos;
         segundos=0;
         disable_interrupts (GLOBAL);
      }
       IF (!input(PIN_D1))       
      {
         delay_ms(500); 
         segundos= --segundos;
         enable_interrupts (GLOBAL);
         segundos=0;    
         encendido =1;
      }
     
       IF (minutos==0 && segundos==0 && encendido==1 )
   { 
      minutos=0;
      segundos=0;
      encendido=0;
      disable_interrupts (GLOBAL);
      }
      
    }
}

VÍDEO 

CONCLUSIONES 


  • Se concluye que los Timer para los PICs tiene una amplia gama de aplicaciones en la práctica. Sólo unos pocos programas no lo utilizan de alguna forma. Es muy conveniente y fácil de utilizar en programas o subrutinas para generar pulsos de duración arbitraria, en medir tiempo o en contar los pulsos externos (eventos) casi sin limitaciones.
  • El registro TMR0 del timer0 en el PIC está formado por 8 bits por lo que se puede contar desde 0 hasta 255.
  • El circuito utilizado para el ejemplo del uso del Timer como contador.



MICRO CONTROLADORES

LABORATORIO NR°6
 Lectura de Entradas  Analógicas y Sensores de temperatura 



I. 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.

ll. MARCO TEÓRICO :

Sensores de temperatura:


Los sensores de temperatura son dispositivos que transforman los cambios de temperatura en cambios en señales eléctricas que son procesados por equipo eléctrico o electrónico. Hay tres tipos de sensores de temperatura, los termistores, los RTD y los termopares.
El sensor de temperatura, típica mente suele estar formado por el elemento sensor, de cualquiera de los tipos anteriores, la vaina que lo envuelve y que está rellena de un material muy conductor de la temperatura, para que los cambios se transmitan rápidamente al elemento sensor y del cable al que se conectarán el equipo electrónico.

Termistor: El termistor está basado en que el comportamiento de la resistencia de los semiconductores es variable en función de la temperatura. Existen los termistores tipo NTC y los termistores tipo PTC. En los primeros, al aumentar la temperatura, disminuye la resistencia. En los PTC, al aumentar la temperatura, aumenta la resistencia.
.
RTD: Un RTD es un sensor de temperatura basado en la variación de la resistencia de un conductor con la temperatura. Los metales empleados normalmente como RTD son platino, cobre, níquel y molibdeno.


Temopar: El termopar, también llamado termocupla y que recibe este nombre por estar formado por dos metales, es un instrumento de medida cuyo principio de funcionamiento es el efecto termoceléctrico.Un material termoeléctrico permite transformar directamente el calor en electricidad, o bien generar frío cuando se le aplica una corriente eléctrica.El termopar genera una tensión que está en función de la temperatura que se está aplicando al sensor. Midiendo con un voltímetro la tensión generada, conoceremos la temperatura.
Resultado de imagen para sensores de temperaturaImagen relacionada

 Como funcionamiento un sensor de temperatura  ?

Un sensor es un objeto capaz de detectar magnitudes físicas o químicas llamadas variables de instrumentación, que pueden ser la intensidad lumínica, la temperatura, distancia, aceleración, etc. El sensor de temperatura empleado más habitualmente es el sensor termopolar. Está formado por mecanismos muy sencillos constituidos por dos materiales metálicos de diferente naturaleza unidos mediante uniones llamadas unión fría y unión caliente. El grado de temperatura que detectan estas uniones genera una diferencia de potencial estrechamente dependiente de la naturaleza de los materiales. El sensor térmico transforma esta diferencia de potencial en una señal eléctrica.


Que son entradas Analógicas ?


Una señal eléctrica analógica es aquella en la que los valores de la tensión o voltaje varían constantemente y pueden tomar cualquier valor. En el caso de la corriente alterna, la señal analógica incrementa su valor con signo eléctrico positivo (+) durante medio ciclo y disminuye a continuación con signo eléctrico negativo (–) en el medio ciclo siguiente.

Un sistema de control (como un microcontrolador) no tiene capacidad alguna para trabajar con señales analógicas, de modo que necesita convertir las señales analógicas en señales digitales para poder trabajar con ellas.
La señal digital obtenida de una analógica tiene dos propiedades fundamentales:
  • Valores. Que valor en voltios define 0 y 1. En nuestro caso es tecnología TTL (0– 5V).

  • Resolución analógica: nº de bits que usamos para representar con una notación digital .
En el caso de un arduino Uno, el valor de 0 voltios analógico es expresado en digital como B0000000000 (0) y el valor de 5V analógico es expresado en digital como B1111111111 (1023). Por lo tanto todo valor analógico intermedio es expresado con un valor entre 0 y 1023, es decir, sumo 1 en binario cada 4,883 mV.

Resultado de imagen para que son entradas analogicas
lcd_gotoxy(): Nos da la posicion de acceso al LCD. por ejemplo: lcd_gotoxy(1,1), esto nos indica la primera posición de la primera linea y si fuera (1,2) seria primera posición de la segunda linea. 

#DEVICE: permite definir al PIC con el que se realizara.

setup_adc(ADC_CLOCK_INTERNAL):  modo para la configuración del modula AD correspondiente a los 7:6 del ADCON0.  

setup_adc_ports(AN0): Es el valor de las entradas analógicas correspondiente a los bit 3-0 del ADCON1. 


TAREA A REALIZAR 

1.Realice los cambios sugeridos a continuación y muestre sus resultados
  • 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é?.
  • 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”.
  • 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.

#include <16f877a.h>             // Incluimos archivo con PIC a utilizar
#device adc=10                    // Utilizamos 8 bits de RESOLUCION de lectura 
#use delay (clock=20M)           // Indicamos al compilador que trabajaremos a 20Mhz
#fuses HS, NOPROTECT, NOWDT      // Configuración básica de los fusibles

#define LCD_ENABLE_PIN        PIN_D3   //Definimos los pines a ser utilizados por la
#define LCD_RS_PIN            PIN_D2   //pantalla LCD
#define LCD_RW_PIN            PIN_A0   
#define LCD_DATA4             PIN_D4
#define LCD_DATA5             PIN_D5
#define LCD_DATA6             PIN_D6
#define LCD_DATA7             PIN_D7  
#include <lcd.c>                 //
float lectura=0;

void main ()
{
   lcd_init () ;                       // Inicializamos pantalla LCD
   printf (lcd_putc, "\fLECTURA ANALOGICA") ;  // Mandamos mensaje por única vez

   //Configuración del puerto analógico
   setup_adc_ports (AN0_AN1_AN3);
   setup_adc (ADC_CLOCK_INTERNAL);
   set_adc_channel (3); //lectura del canal analogico 3
   delay_us (20);
   
   WHILE (true)
   {
      lectura = read_adc (); 
      lectura = lectura / 204.6;  // Leemos Canal A0
      delay_ms (20) ;               // esperamos para una correcta lectura
      lcd_gotoxy(1,2);              // ubicamos cursos en LCD
      printf (lcd_putc, " Tension : %1.1f", lectura); // imprimimos valor
      delay_ms(100);  
      IF (lectura > 4.5)
      {
       lcd_gotoxy(1,1);
       printf(lcd_putc,"      WARNING     ");// esperamos
      }
      ELSE 
      {
       lcd_gotoxy(1,1);
       printf(lcd_putc," LECTURA ANALOGICA ");// esperamos
      }
      
    }
}


VÍDEO DE EXPLICACIÓN: 



CONCLUSIONES:
  • Se concluyo que nos servir de mucho las entradas analógicas del PIC 16F877A, las cuales convertimos a digitales para poder leerlas en una pantalla LCD.
  • Se concluyo que se puede simular un sensor de temperatura con un potenciómetro conectado a una fuente de 5 voltios.
  • Se concluyo que cada tipo de variables debemos utilizar según sea nuestra necesidad.
  • Se conoció el funcionamiento de un Display LCD en la tarjeta PIC16F877A.
OBSERVACIONES: 
  • Se observo que el convertidor analógico digital (adc) puede trabajar a una resolución de 8 bits, con la cual puede contarse de 0 hasta 255 y con una resolución de 10 bits, de 0 a 1023.
  • Se observo señal analógica de entrada la obtuvimos a partir de un potenció metro colocado en configuración divisor de tensión de 0 a 5 voltios.
  • Tambien se oBservo que setup_adc_ports(x,x) es donde nuestra variables analógicas toman valor  correspondiente a los 3-0 bits. 
  • El LCD es un dispositivo electrónico que sirve para mostrar información que deseamos ver.

miércoles, 24 de abril de 2019

MICRO CONTROLADORES

LABORATORIO NR°5
 Programación con una Pantalla LCD

  1. COMPETENCIA ESPECIFICA DE LA SESION
  • Conocer el Display LCD y su funcionamiento
  • Programar eficientemente el LCD
  • Programar HMI para proyecto actual.
      
      II. MARCO TEÓRICO 
          
         Pantalla LCD:

Una pantalla de LCD (acrónimo de "cristal líquido" en inglés)es aquella pantalla delgada, formada por un determinado número de píxeles que se colocan delante de una fuente de luz. Este tipo de pantalla utiliza pequeñas cantidades de energía eléctrica  y por eso las pantallas de LCD se utilizan en dispositivos con pilas o baterías.
La primera pantalla de LCD fue producida en Estados Unidos en el año 1972 a cargo de Peter T. Brody. En una pantalla de este tipo, cada pixel está formado por una capa de moléculas ubicadas entre dos electrodos y dos filtros de polarizacion. El cristal líquido permite que la luz pase de un polarizador al otro. 
Cada píxel de un LCD típica mente consiste en 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 (en la mayoría de los casos) perpendiculares entre sí. Sin cristal líquido entre el filtro polarizante, la luz que pasa por el primer filtro sería bloqueada por el segundo (cruzando) polarizador.
La superficie de los electrodos que están en contacto con los materiales de cristal liquido es tratada a fin de ajustar las moléculas de cristal líquido en una dirección en particular. Este tratamiento suele ser normalmente aplicable en una fina capa de polímero que es unidireccionalmente frotada utilizando, por ejemplo, un paño. La dirección de la alineación de cristal líquido se define por la dirección de frotación.

Resultado de imagen para una pantalla lcd


Imagen relacionada

















TAREA A REALIZAR :


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 25 unidades 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 MINIMO”. En ambos casos el valor del número no debe incrementarse ni decrementarse.
para la cual se utilizo el siguiente programa:

#include <16f877a.h> #use delay (clock=20M) #fuses HS, NOPROTECT, NOWDT #define LCD_ENABLE_PIN PIN_D3 //Definimos los pines a ser #define LCD_RS_PIN PIN_D2 //pantalla LCD #define LCD_RW_PIN PIN_A0 #define LCD_DATA4 PIN_D4 #define LCD_DATA5 PIN_D5 #define LCD_DATA6 PIN_D6 #define LCD_DATA7 PIN_D7 #include <lcd.c> // Incluimos librería para manejar Pantalla LCD int16 dato; void main () { lcd_init () ; // Inicializamos pantalla LCD dato = 50; // Damos valor inicial para empezar la cuenta printf (lcd_putc, " CONTADOR") ; // Mandamos mensaje por única vez lcd_gotoxy(1,2); printf (lcd_putc, "Valor: %4lu", dato) ; WHILE (true) { IF (!input(PIN_D0)) // Rutina para INCREMENTAR dato { lcd_gotoxy(1,1); printf (lcd_putc, " CONTADOR ") ; dato= dato +150; lcd_gotoxy(1,2); printf (lcd_putc, "Valor: %4lu", dato) ; while (!input(PIN_D0)) // Rutina ANTIRREBOTE por software while (!input(PIN_D0)) // Rutina ANTIRREBOTE por software {} IF (dato>1000) { dato=1000; lcd_gotoxy(1,1); printf (lcd_putc, " FULL ") ; } } IF (!input(PIN_D1)) { lcd_gotoxy(1,1); printf (lcd_putc, " CONTADOR ") ; dato= dato -25; lcd_gotoxy(1,2); printf (lcd_putc, "Valor: %4lu", dato) ; while (!input(PIN_D1)) // Rutina ANTIRREBOTE por software {} IF (dato==0) { dato=0; lcd_gotoxy(1,1); printf (lcd_putc, " VALOR MINIMO ") ; } } } }

VÍDEO DE EXPLICACIÓN DEL PROGRAMA Y SIMULACIÓN: 




CONCLUSIONES :

  •  Se Concluyo al hacer una programación en un display de cristal líquido Lcd  es muy fácil controlar su comportamiento dependiendo de los requerimientos  y la tarea específica asignada.
  •  Se Concluyo que para la configuración de una pantalla LCD  debemos tener  las herramientas necesarias para  realizar  la adaptación del programa correctamente.
  • Se Concluyo que un micro controlador  tiene varios componentes  integrados  en su estructura por lo cual no necesita de otros componentes  para  su utilización o aplicación.


OBSERVACIONES :

  • Se observo que en el proyecto a desarrollar compilaremos y ejecutaremos programas  en el entrenador de  PIC
  • Se observo que se puede realizar microcontroladores en aplicaciones de control electrónico.
  • Se observo en el desarrollo del laboratorio que es necesario gestionar los recursos y usar los componentes así como escoger la programación adecuada a realizar.