viernes, 2 de junio de 2017

Práctica 2

En esta práctica vamos a mostrar la hora y el día en un LCD conectado por I2C, utilizando un timer ds1302.



El primer paso será analizar los componentes que vamos a usar. Empezaremos por el ds1302 y para ello recurrimos al datasheet:




Lo primero que ha de llamarnos la atención es que a diferencia del timer ds1307, este no utiliza I2C, si no 3-wire. Este tipo de comunicación parece ser propietario de maxim integrated y básicamente utiliza una señal de reloj, una de activación y una línea de datos.
Teniendo claro este punto, vamos a importarlo en proteus:





En el esquema podemos ver que tenemos los mismos pines: 3 para la comunicación, 2 para el reloj, otros 2 para alimentaciones y uno para tierra que no vienen dibujado.

  • ·         En el caso de las alimentaciones, debemos tener en cuenta que la VCC2 es la fuente principal de alimentación y la VCC1 es la alimentación auxiliar (pila).
  • ·         Pin CE (o RST) es el enable de la comunicación, deberá estar a para leer o escribir.
  • ·         Pin SCLK es la señal de sincronismo para la comunicación.
  • ·         Pin I/O sirve para la comunicación bidireccional.

El otro componente que vamos a utilizar es una pantalla 16x2 con comunicación I2C.




Como podemos ver en la imagen, esta pantalla tiene cuatro conexiones: alimentación, tierra y los propios de la comunicación I2C (SDA y SCL).

Su esquema en proteus es el siguiente:




Donde los bits A2, A1 y A0 representan la dirección I2C de la pantalla. En la imagen, de derecha a izquierda



La señal INT corresponde a la luz de fondo, que en la placa es típicamente un jumper.

Una vez que tenemos claros los componentes, solo nos queda conectarlos entre sí, el resultado es el que sigue:




Hemos utilizado los pines 4 y 5 para la comunicación I2C, SDA y SCL respectivamente.Los pines del 6,7 y 9 los hemos utilizado para el 3-wire, siendo: pin8=RST, pin7=SCLK y pin6=I/O.

Llegados a este punto solo nos queda el código. En primer lugar tenemos que encontrar una librería que funcione con la comunicación 3-wire. En mi caso he utilizado la siguiente:


La incluiremos en nuestro programa por medio de la siguiente instrucción:



Ahora ya podemos inicializar el módulo:



Algunas veces el dispositivo pierde la memoria (que queda sin batería) y hay que cargarle los datos actuales, para ello utilizaremos las siguientes instrucciones:



El resto del código está incluido y explicado en el siguiente enlace.


No hay comentarios:

Publicar un comentario