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