11/22/2011

GLCD WG12864A

Complemento Teórico

Un LCD gráfico es una pantalla plana formada por una matriz de píxeles. Poseé una ilumniacon de fondo(backlight). Dispone de una memoria RAM interna del mismo tamaño de la capacidad que dispone la pantalla, por ejemplo si una pantalla tiene un tamaño de 128x64 tiene una memoria RAM interna de la misma capacidad (128x64).
Por lo general son manejados por microcontroladores para la configuración y utilización de la misma.
Hay varios tamaños y por lo general los expresan por las cantidad de pixeles que ellos dispones.

Características de una GLCD 128x64

  • Conformado por una matriz de puntos de visualización de 128x64.
  • Su iluminación de fondo está entre verde-amarillo cuando se enciende.
  • Fácil manejo con microprocesadores de 8-Bits.
  • Bajo poder de consumo.
  • Contiene dos controladores internos un KS0108B y KS0107B.

Pin Out:

  • PIN 1: VSS (Conexión a tierra)
  • PIN 2: VDD (Conexión de alimentación - +5V)
  • PIN 3: V0 (Voltaje de salida negativa, por lo general es usada con un potenciómetro con el PIN 18 para el ajuste del contraste de los pixeles)
  • PIN 4: D/I (Datos de E/S para el cambio de registro)
  • PIN 5: R/W (Determinas si los datos se van a leer o escribir)
  • PIN 6: E (Habilita la comunicación con la GLCD)
  • PIN 7 - 14 (Especifica un dato de 8-Bits de información)
  • PIN15: CS1 (Indica si se selecciona la primera mitad de la pantalla, pixeles 0-63)
  • PIN16: CS2 (Indica si se selecciona la segunda mitad de la pantalla, pixeles 64-127)
  • PIN17: RESETB (Señal de reinicio, funciona de varias forma dependiendo de la ocasión)
  • PIN18: VEE (Conexión de ajuste de contraste de los pixeles)
  • PIN19: A (Conexión positiva de la luz de fondo, por lo general son +5V)
  • PIN20: K (Conexión negativa de la luz de fondo, por lo general es tierra)

En la entrada "Proyecto Final" se puede observar el uso del dispositivo.

DS18B20

 DS1820 es un sensor creado por Dallas Semiconductor. Se trata de un termómetro digital, con una precisión que varía según el modelo. Existen tres modelos, el DS1820, el DS18S20 y el DS18B20. Sus principales diferencias se observan en la exactitud de lectura, en la temperatura, y el tiempo de conversión que debe se le debe dar al sensor para que realice esta acción (como por ejemplo el modelo "B20", necesita un tiempo de 750 uS para la conversión de la misma).
 Este sensor utiliza un protoco llamado 1-Wire (Vease 1-Wire), para la comunicación entre los dispositivos que compartan este protocolo y el "Maestro", que se encarga de manipular a los diferentes componentes dentro de la linea de comunicación 1-Wire.
 Tiene dos encapsulados, uno es el TO-92 y otro en forma de integrado.


Contiene tres pines que se utilizan, dos son referidos a la alimentación, y un único pin referido a la comunición entre el sensor y un dispositivo "maestro".


  Se lo puede alimentar de dos formas distintas al mismo, de forma "parásita" y de forma "normal". De la primera forma, colocándo una resistencia de pull up de 4k7 sobre su linea de comunicación, y el pin de Vdd y GND a tierra. La otra manera se obtiene alimentado de manera normal al sensor, esto quiere decir, colocando Vdd a los 5 v, GND a tierra, y utilizar DQ solamente para comunicación.
 Se dice que este sensor es digital, ya que entrega la temperatura en dos bytes, los cuales algunos bits son utilizados para el signo, y los otros dos restantes son potencias de 2.



En esta imagen se puede apreciar como es que entrega el sensor la temperatura y se obtiene ejemplos a diferentes temperaturas como se encuentra el valor de cada byte.

 En el caso del DS18B20, tiene la posibilidad de configurar la resolución (en otras palabras, ajustar su presición). Posee cuatro resoluciones las cuales serian de 9 bits, 10, 11 y hasta 12 bits, dándole así, con esta última, una presión de 0,0625. Para configurar estas, existe un registro dentro de la memoria Scratchpad, llamado "registro de configuración". Dentro de éste, existe dos bits, los cuales, colocando diferentes combinaciones de 0 y 1, se puede modificar la resolución.

Se puede observar que esta memoria contiene tambien los dos bytes entregados por el sensor con la temperatura.
Dejo la hoja de datos del sensor DS18B20, utilizado en este proyecto

                                                      Hoja de datos

1-Wire

Complemento teórico:
Está basado en un bus, un microcontrolador y varios perifericos que utilizen este protocolo, de una sola línea de datos en la que se alimentan.
Para enviar un bit a 1 el microcontrolador se lleva a 0 volts la línea de dato durante 1-15 microsegundos.
Para enviar un bit a 0 el microcontrolador se lleva a 0 vols la línea de dato durante 60 microsegundos.
Los datos se envían o reciben en grupos de 8 bits. Para iniciar una comunicación se reinicia el bus.

Un ejemplo de su uso se ve en la entrada "Proyecto Final" en la cual se utilizo un protocolo entre un DS18B20 y un microcontrolador PIC16F887.

Conexionado
Por supuesto, necesita una referencia a tierra común a todos los dispositivos.La línea de datos necesita una resistencia de pull-up conectada a la alimentación.
 Un ejemplo que muestra el conexionado este seria el sensor de temperatura DS18B20.



Aquí la información del sensor

9/07/2011

Proyecto final de laboratorio

 En el siguiente espacio, explicaremos un poco de que se trata nuestro proyecto final.


Como proyecto final para laboratorio, decidimos realizar un termómetro digital, el cual demuestre su medición en un lcd gráfico.
 Este trabajo se puede dividir en varias partes:

-Por un lado, se necesita tener algunos conocimientos básicos sobre programación en lenguaje “C”, ya que su programa asi lo pide.

-Nos centraremos en la utilización de un PIC (16f887), y para ello, realizaremos previamente una lectura comprensiva de su correspondiente hoja de datos, para así adecuarnos a sus características que son de suma importancia a la hora de programar (con esto me refiero, a la cantidad de memoria que tiene, el numero de puertos, como su cantidad de pines, entre otras cosas).

-Al realizar un termómetro digital, el proyecto requiere obligatoriamente, una visualización (para este caso de la temperatura), y para ello utilizaremos un display (para ser mas exactos el modelo WG12864A). Se trata de un lcd grafico inteligente, con el cual, no sólo se podrá mostrar la temperatura, sino que también da la posibilidad de poder realizar gráficos (como sería el ejemplo de una barra, que sea proporcional a los cambios de la variable a medir, teniendo un rango aproximado de entre 0° y 60° o más).

-Todo esto anterior, sería imposible sin un sensor capaz de percibir la variable física (en nuestro caso la temperatura), y poder transmitírsela al PIC en cuestión. Para esto utilizaremos un DS18B20. Se trata de un sensor de temperatura de alta precisión (tiene un error de 0,1, para un rango de -10°C a +85°C).

-Por último, mediante la utilización de un conector RS-232 junto a un MAX-232 ( para convertir los niveles de tensión), realizaremos una conexión entre el termómetro digital y la pc, para a posterior, enviar temperaturas obtenidas, anteriormente almacenadas en la eeprom interior del PIC.

A continuación se realiza un esquemático para poder entender mejor todo visualmente:



A continuación dejamos algunas imagenes del proyecto realizado:

Perspectiva:



Superior:



Encendido:




Para empezar, comenzamos con una idea básica de lo que queriamos hacer, un termómetro. A medida que ibamos realizando el proyecto, nos dabamos cuenta de las cosas que nos llevarian mas tiempo y trabajo, y las priorizamos frente a otras. Para realizar este proyecto dividimos el trabajo en tres partes principales:

-Hardware: Este punto es unos de los más importantes, ya que sería la base de todo el proyecto (mas alla de plantear la idea principal, que es realizar un termómetro), es de suma importancia saber que componentes usar, para mas adelante, saber en que enfocarse y detallar sus principales características (en su correspondiente hoja de datos).

Hoja de datos del GLCD
Hoja de datos del PIC16F887
Hoja de datos del senso

-Esquemático y Diseño: En el siguiente archivo adjunto se encuentra el circuito esquemático, y el diseño lado cobre, realizado con el protel.

-Programación: Es otros de los puntos importantes del proyecto. Esta tiene relación directa con el hardware a utilizar. Para el programa, se utilizó el lenguaje C, y se compiló con el programa llamado "CCS". También se utilizaron librerias externas al compilador utilizado.

Programa

-Ensamblado: Llamamos a esto, el armado final del proyecto, el diseño de la plaqueta, con el posicionamiento de los componentes dentro de la misma. No es detalle menor este punto.



Aquí dos videos que muestran el funcionamiento del Termómetro:
- Encendido
- Conexión con la PC




8/30/2011

Problema de las dos bombas de agua

Se nos planteó un problema sobre dos bombas de agua. Lo realizamos tanto como en assembler como en C. El problema dice lo siguiente:

" Diseñar un programa para controlar el nivel del depósito de líquido de la figura. Utiliza (entre paréntesis las líneas del microcontrolador conectadas):

- Tres sondas detectoras: SV (sonda de vacio, RA0), SLL (sonda de llenado,RA1) y SR (sonda de rebose,RA2).

- Dos bombas de agua: B1 (RB5), B2 (RB6).

- Cinco indicadores: Vacío (RB0), Llenándose (RB1), Lleno (RB2), Rebose (RB3), Alarma (RB4).

Su funcionamiento:

- Cuando ninguna de las sondas está mojada se entiende que el depósito está vacío y se accionarán las dos bombas. El indicador "Vacío" se iluminará.

- Cuando el nivel del líquido toque la sonda de vacío (SV), seguirá llenándose  el depósito con las dos bombas. El indicador "Llenándose" se ilumina.

- Cuando el nivel del líquido toque la sonda de llenado (SLL), se para la bomba B2, quedando la bomba B1 activada en modo de mantenimiento. El indicador "Lleno", se ilumina.

- Si el nivel del líquido moja la sonda de rebose (SR) se apaga también la bomba B1, quedando las dos bombas fuera de servicio. El indicador de "rebose" se enciende.

- Cuando se produce un fallo  o mal funcionamiento en las sondas de entrada (por ejemplo que se active la sonda de rebose y no la de vacío) se paran las dos bombas. El indicar de "alarma" se enciende.

FIGURA DE LAS BOMBAS


8/22/2011

Ejercicios en Assembler y en C

 Para poder aprender mas de programación, decidimos realizar unos ejercicios, basados en el PIC 16f84, tanto en lenguaje C como en Asembler. A continuación dejamos constancias de los mismos:

Ejercicio 1: Por el puerto B se obtiene el dato de las cinco líneas del puerto A, al que está conectado un aray de interruptores, sumándole el valor de una constante, (por ejemplo 74).
Es decir : PORTB = (PORTA+Constante)


Ejercicio 2: Por el puerto B se obtiene el dato del puerto A, multiplicado por 2. Es decir: PORTB = (PORTA x 2)


Ejercicio 3: Por el puerto B se obtiene el dato introducido por el puerto A, pero los bits pares de la salida se fijan siempre en "1". El orden de los bits será "b7 b6 b5 b4 b3 b2 b1 b0", siendo los pares el "b6, b4, b2 y b0". Por ejemplo, si por el puerto A se introduce el dato '---01100', por el puerto B se visualiza '---11101'. Observa que:

-Los bits pares están en "1", efectivamente (puerto B) = '---1x1x1'
-Los impares permanecen con el dato del puerto de entrada, efectivamente: Puerto A = '---x1x0x' y Puerto B = '---x1x0x'


Ejercicio 4: Por el puerto B se obtiene el contenido del puerto A, pero los bits impares de la salida se fijan siempre a "0". El orden de los bits será "b7 b6 b5 b4 b3 b2 b1 b0", siendo los impares ""b7, b5, b3 y b1". Por ejemplo, si por el puerto A se introduce el dato b'---01100', por el puerto b se visualiza '000001000'. Observar que:

-Los bits impares están a "0", efectivamente: Puerto B = '0x0x0x0x'
-Los bits pares permanecen con el dato del puerto de entrada, efectivamente: Puerto A = '--- 0x1x0' y Puerto B = '---0x1x0'


Ejercicio 5: Por el puerto B se obtiene el dato del puerto A invertidos  los unos y los ceros. Por ejemplo, si por el puerto A se introduce "---11001", por el puerto B aparecerá "xxx00110". (No importa el estado de los tres bits superiores del puerto B).


Ejercicio 6: Por el puerto B se obtiene  el dato del puerto A intercambiando los nibbles alto y bajo. Por ejemplo, si por el puerto A se introduce "---1001", por el puerto B aparecerá "1001xxx1".


Ejercicio 7: Por el puerto B se obtiene el dato del puerto A desplazando un bit hacia la izquierda, por la derecha entrará un "1". Por ejemplo, si por el puerto A se introduce "---11001", por el puerto B aparecerá "xx110011".


 

Ejercicio 8: Por el puerto B se obtiene el dato del puerto A desplazando un bit hacia la derecha, por la izquierda entrará un "0". Por ejemplo, si por el puerto A se introduce "---11001", por el puerto B aparecerá "0xxx1100".



Ejercicio 9: Por el puerto B, se obtiene el dato del puerto A, pero los bits pares son invertidos. Los impares se mantienen inalterables.


Ejercicio 10: Por el puerto B, se obtiene el dato del puerto A, y luego el PIC entra en modo Standby.