jueves, 18 de octubre de 2018

LABORATORIO N°7


TEMPORIZADOR CONTADOR PIC


Un temporizador contador PIC es un registro que aumenta su valor en una unidad con cada 4 ciclos de reloj al cual se encuentre funcionando el microcontrolador PIC, si por ejemplo la frecuencia del oscilador es de 4MHz, entonces  el ciclo de trabajo del microcontrolador PIC será de 1us, por lo que el temporizador contador PIC aumentará  su  valor de uno en uno en cada microsegundo; por ejemplo cuando el temporizador aumenta su valor en 10 unidades habrán transcurrido 10us.

El temporizador contador PIC es utilizado para obtener medidas de tiempos muy precisas, de ahí que se le da el nombre de temporizador, en este caso el temporizador contador PIC funciona con el reloj del sistema; pero también puede ser utilizado para realizar conteos, por lo que también se le llama contador, en este caso el temporizador contador PIC ya no aumenta su valor de uno en uno en cada ciclo de trabajo, sino que lo hará mediante el flanco de subida o el flanco de bajada de alguna señal que llegue a un pin del PIC, estos pines son identificados como TxCKI donde x es el número temporizador contador PIC que será usado como contador.

El temporizador contador PIC puede producir interrupciones.

Los microcontroladores PIC suelen tener varios temporizadores, como ejemplo se utilizará el PIC16F877A, el cual tiene 3 temporizadores que son llamados timer0, timer1 y timer2, el tiempo que tarda el temporizador contador PIC en aumentar su valor de unidad en unidad, se puede modificar por programa mediante el uso de prescalers, siendo de esta manera mucho mas provechosos; dependiendo del modelo de microcontrolador PIC utilizado, no todos los temporizadores pueden ser utilizados como temporizador y también como contador.

El registro en los microcontroladores PIC donde se guardan y realizan los aumentos de uno en uno del temporizador PIC, es llamado registro temporizador contador y es representado por TMRx, donde x es el número de temporizador contador PIC que puede ser 0, 1, 2, dependiendo del número de temporizadores con que cuente el microcontrolador PIC; el temporizador contador PIC puede ser de 8 bits o de 16 bits.

El temporizador contador PIC puede aumentar sus valores de 0 a 255 si es de 8 bits como el timer0, o de 0 a 65535 si es de 16 bits como el timer1, cada vez que estos registros alcanzan su máximo valor se reinician, volviendo a contar desde su valor mínimo hasta su máximo, ademas pueden ser programados para provocar interrupciones.

Para el uso del temporizador contador PIC se cuenta además con un grupo de registros mediante los cuales se puede lo puede configurar de acuerdo a las necesidades que se tengan.

El registro temporizador contador PIC TMR1 puede ser utilizado para tareas de comparación, captura y el registro TMR2 es utilizado para la obtención de señales  de modulación de ancho de pulso o PWM, siendo para ello necesario el uso de otros registros.





INTERRUPCIONES


Una interrupción es un aviso provocado por un módulo del PIC, por un cambio en el estado de un pin o un recordatorio de que ha pasado un cierto tiempo. Como su nombre indica este aviso interrumpirá la tarea que se este haciendo en ese momento y pasaremos a ejecutar una rutina de servicio o gestión de la interrupción.

Veremos un repaso de los bits y registros de control asociados a las diferentes interrupciones, como habilitarlas y como escribir rutinas de servicio (ISR). Crearemos definiciones (#define) que nos permitirán operar con las interrupciones sin tener que recordar los bits/registros asociados, a la vez que facilitarán la tarea de portar nuestro programa a otro compilador y/o microcontrolador.

Es importante familiarizarse con el manejo de interrupciones, ya que nos evita poder manejar muchos tipos de eventos sin estar pendientes de ello. En sucesivos tutoriales veremos como el uso de interrupciones nos permite aprovechar de forma mucho más eficiente los recursos del PIC.


VÍDEOS:

Agüero Cueva Jorge Alonso




Torres Umina Renzo Claudio












Quispe Quispe Ivan







jueves, 4 de octubre de 2018

Laboratorio N°6



LABORATORIO N° 06
"LECTURA DE ENTRADAS ANALÓGICAS Y SENSOR DE TEMPERATURA"



1. 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
2. MARCO TEÓRICO:


SEÑAL ANALÓGICA 

Una señal analógica es un tipo de señal generada por algún tipo de fenómeno electromagnético; que es representable por una función matemática continua en la que es variable su amplitud y periodo (representando un dato de información) en función del tiempo. Algunas magnitudes físicas comúnmente portadoras de una señal de este tipo son eléctricas como la intensidad, la tensión y la potencia, pero también pueden ser hidráulicas como la presión y térmicas como la temperatura.

En la naturaleza, el conjunto de señales que percibimos son analógicas, así la luz, el sonido, la energía etc, son señales que tienen una variación continua. Incluso la descomposición de la luz en el arco iris vemos como se realiza de una forma suave y continúa.

Una onda sinusoidal es una señal analógica de una sola frecuencia. Los voltajes de la voz y del video son señales analógicas que varían de acuerdo con el sonido o variaciones de la luz que corresponden a la información que se está transmitiendo.

¿COMO FUNCIONAN?

Los módulos de entrada analógicas permiten que los autómatas programables trabajen con accionadores de mando analógico y lean señales de tipo analógico como pueden ser la temperatura, la presión o el caudal.

Los módulos de entradas analógicas convierten una magnitud analógica en un numero que se deposita  en una variable interna del autómata. Lo que realiza es una conversión A/D, puesto que el autómata solo trabajar con señales digitales. Esta conversión se realiza con una precisión o resolución determinada (numero de bits) y cada cierto intervalo de tiempo (periodo muestreo).

Tarea de investigación: 

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

SENSOR LM35

El LM35 es un circuito electrónico sensor que puede medir temperatura. Su salida es analógica, es decir, te proporciona un voltaje proporcional a la temperatura. El sensor tiene un rango desde −55°C a 150°C. Su popularidad se debe a la facilidad con la que se puede medir la temperatura. Incluso no es necesario de un microprocesador o microcontrolador para medir la temperatura. Dado que el sensor LM35 es analógico, basta con medir con un multímetro, el voltaje a salida del sensor.

Para convertir el voltaje a la temperatura, el LM35 proporciona 10mV por cada grado centígrado. También cabe señalar que ese sensor se puede usar sin offset, es decir que si medimos 20mV a la salida, estaremos midiendo 2°C.

SENSOR LM35 Y PANTALLA LCD 

CODIGO (ARDUINO) :

#include <LiquidCrystal.h>          //Incluir esta libreria para poder usar el lcd

int Ana1 = A0;                      //Entrada analogica de LM35
LiquidCrystal lcd(12,11,5,4,3,2);   //Definimos la pantalla LCD
int Temp = 0;
char Grados = 'º';

void setup(){
  Serial.begin(9600);      
  lcd.begin(16,2);  
  pinMode(13,OUTPUT);
  digitalWrite(13, HIGH);          //Activamos la retroiluminacion
}

void loop(){
  Temp = analogRead(Ana1);          //Leemos el valor de la entrada analogica
  Temp = map(Temp,0,1024,-55,150);  //Escalamos la señal a grados centigrados
  
  //Mostramos los grados en el serial
  Serial.print("Grados: ");
  Serial.print(Temp);
  Serial.print(Grados);
  Serial.println("C");
  
  
  //Mostramos los grados en la pantalla LCD
  lcd.setCursor(0,0);            //Con este comando decimos en que linea queremos escribir
  lcd.print("Temperatura: ");
  lcd.setCursor(0,1);            
  lcd.print(Temp); 
  
  
  delay(10000);                  //Al ser temperatura no hace falta leerlo tan seguido
}

LO MISMO CON UN SENSOR DS18B20.

CÓDIGO (ARDUINO) :

incluye  < LiquidCrystal.h >
# incluye  < OneWire.h >
# incluye  < DallasTemperature.h >

# define  ONE_WIRE_BUS  2

LiquidCrystal lcd ( 8 , 9 , 4 , 5 , 6 , 7 );
OneWire oneWire (ONE_WIRE_BUS);
DallasTemperature sensores (y OneWire);

 configuración del vacío ()
{
  sensores comenzar ();           // Inicializa los sensores
  lcd comienzo ( 16 , 2 );          // Inicializa la librería
  lcd claro ();
  lcd setCursor ( 0 , 0 );       // Coloca el cursor en el 0,0
  lcd impresión ( " Acuario 1 " );   // Imprime este mensaje
}

 bucle de vacío ()
{
  lcd setCursor ( 0 , 1 );                // Mueve el cursor al principio de la segunda línea
  lcd impresión ( " T " );                    // Imprime este mensaje   
  lcd setCursor ( 3 , 1 );                // Mueve el cursor a la segunda línea, caracter 3  
  sensores Temperaturas de solicitud ();     // Mide la temperatura
  lcd imprimir (sensores. getTempCByIndex ( 0 ), 1 ); // Imprime el valor recogido
  lcd impresión ( " C " );                         // Imprime este mensaje
}


TRABAJO EN CLASES:

2.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 printfcambie “%4u” por “%4lu”. ¿Cuál es el cambio mostrado en la pantalla LCD? ¿por qué?.

b. Convierta el valor leído en valor de voltaje de 0 a 5 voltios. Para esto cambie la variable “lectura” a variable tipo floaty 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í “Tensión: 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.



VIDEOS:

Agüero Cueva Jorge Alonso



                                       




Torres Umina Renzo Claudio





OBSERVACIONES 


-La variable de lectura debe ser de tipo float si queremos trabajar con decimales 
-Para la obtención de un valor de 0-5 voltios se tuvo que realizar una division entre 204.6 
-Si queremos comparar valores para el caso de 4.5 a mas se debe de realizar con una condicional.


CONCLUSIONES 

-Se realizo la lectura de una variación de voltaje con el puerto analógico dado por el potencio metro, dándonos la visualización dependiendo de la cantidad de bits asignados a nuestra variable de almacenamiento "lectura".

-El uso de la condicional IF  es necesaria al momento de hacer comparaciones en este caso a numeros mayores de 4.5

-Para que la impresión de los valores en el LCD no sean interrumpidos es necesario establecer bien las condiciones IF Y ELS si en caso la condicion no se cumpla   

INTEGRANTES:


Agüero Cueva Jorge Alonso

Torres Umiña Renzo Claudio














lunes, 24 de septiembre de 2018

LABORATORIO N° 5




1. COMPETENCIA ESPECIFICA DE LA SESIÓN:
  • Conocer el Display LCD y su funcionamiento
  • Programar eficientemente el LCD
  • Programar HMI para proyecto actual.

2. MARCO TEÓRICO:


Display LCD 

Los Display LCD (Liquid Crystal Display) son visualizadores pasivos, ésto significa que no emiten luz como el visualizador o display alfanumérico hecho a base de un arreglo de LEDs.

Es por esa razón que, algunas veces, cuando intentamos ver la hora en un reloj que utiliza esta tecnología, es necesario una fuente de luz adicional.

El Display LCD tiene muy bajo consumo de energía si se lo compara con el display o visualizador alfanumérico y son compatibles con la tecnología CMOS, característica que permite que se utilice en equipos portátiles (ejemplos: los relojes de pulsera, calculadoras, etc.).

Tiene una vida aproximada de 50,000 horas. Hay diferentes tipos de presentaciones y son muy fáciles de configurar. Hay desde visualizadores comunes de 7 segmentos, hasta una matriz de puntos, todos ellos muy delgados.


¿Cómo funciona un Display LCD?

El LCD modifica la luz que lo incide. Dependiendo de la polarización que se esté aplicando, el LCD reflejará o absorberá más o menos luz. Cuando un segmento recibe la tensión de polarización adecuada no reflejará la luz y aparecerá en la pantalla del dispositivo como un segmento oscuro. Seguro que más de un lector habrá visto este fenómeno en calculadoras, relojes, etc.

El líquido de un display LCD está entre dos placas de vidrio paralelas con una separación de unos micrones. Estas placas de vidrio tienen unos electrodos especiales que definen, con su forma, los símbolos, caracteres, etc. que se visualizarán.

La superficie del vidrio que hace contacto con el líquido es tratada de manera que induzca la alineación de los cristales en dirección paralela a las placas. Esta alineación permite el paso de la luz incidente sin ninguna alteración.

Cuando se aplica la polarización adecuada entre los electrodos, aparece un campo eléctrico entre estos electrodos (campo que es perpendicular a las placas) y esto causa que las moléculas del liquido se agrupen en sentido paralelo a éste (el campo eléctrico) y cause que aparezca una zona oscura sobre un fondo claro (contraste positivo). De esta manera aparece la información que se desea mostrar.

El LCD tiene una memoria interna en donde almacena todos sus caracteres alfanuméricos, los cuales podemos extender en ocho caracteres personalizados adicionales.

Los caracteres soportados por la mayoría de modelos de LCD son los siguientes:



Pines de alimentación:

Vss: Gnd
Vdd: +5 voltios
Vee: corresponde al pin de contraste, lo regularemos con un potenciómetro de 10K


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

3. EVIDENCIA DE TAREAS EN LABORATORIO:


VÍDEO Y CAPTURAS DE PANTALLAS DEL JUEGO

  • RENZO TORRES UMIÑA
        Video:



         Juego:
     
           








  • JORGE AGUERO CUEVA
Video;


Juego:







4. OBSERVACIONES:
  • Al momento de mostrar los datos en la pantalla LCD se tiene que indicar mediante el programa en que fila y en que columna irán esos datos mediante e comando "lcd_gotoxy(1,2);"
  • Para incrementar el conteo y hacer que este se quede en 1000 es necesario hacer que a  "dato" se le disminuya el inrcremento al finalizar 

5. CONCLUSIONES
  • Para realizar las configuraciones del lcd primero debemos incluir su librería con el comando "#include <lcd.c>" luego es necesario configurar lo pines que se usaran para manejar el lcd y alimentar el mismo.
  • Implementamos la función IF que se usa para realizar tareas bajo ciertas condiciones, en este caso lo usamos para poder cotejar el conteo en la variable "dato" y mostrar en pantalla FULL en caso el conteo llegue a 1000 y VALOR MÍNIMO en el caso de que el conteo llegue a 10.

6. FOTO GRUPAL: