Paso 1: El DS1307 en tiempo real reloj
Para este pequeño proyecto sólo usaremos lo del tiempo. Por lo tanto necesita un cristal de cuarzo de 32,768 kHz conectado entre los pines 1 y 2. También podemos agregar una batería con + al pin 3 y - al pin 4. Esto permite que el IC a seguir trabajando cuando se apaga el mainpower. Si no desea utilizar esta función, sólo puede conectar el pin 3 al pin 4 y todo funciona bien.
Patillas 5 y 6 se utilizará para transferir los datos a nuestro microprocesador. Debe ser conectados a los pines SCL y SDA en el microprocesador. Estas líneas deben tirar alto por un resistor de 4K 7 pullup.
Bascom facilita el trabajo con dispositivos I2C. Sólo necesita saber 4 comandos:
- I2cstart: este commant será comunicaciones de inicio de I2c
- I2cstop: este comando detiene la comunicación I2c
- Var I2crbyte : este comando Lee un byte desde el dispositivo y se almacena en 'var'
- Var I2cwbyte : este comando escribe la variable 'var' en el dispositivo
Utilizando el comando de escritura o lectura no basta, también tenemos que contar el dispositivo si queremos escribir en él o leer de él. Hacemos esto mediante el uso de la dirección correcta. Estas direcciones pueden encontrarse en la hoja de datos. La dirección de escritura para el DS1307 es D0H y la dirección de lectura D1H (la H detrás de él nos dicen que estas son cifras hexadecimales).
El DS1307 envía y quiere recibir datos en formato BCD. Esta es una variación en binario para la muestra donde cada dígito es representado por cuatro bits. Más sobre eso aquí. Por suerte convertir de BCD a decimal y viceversa es muy fácil en Bascom.
- var = Makebcd(var) va a convertir decimal, hexadecimal y binario BCD
- var = Makedec(var) va a convertir a hexadecimal, binario y BCD a decimal
Los datos se almacenan en la IC en registro. Te los imaginas como aquellos filingcabinets de antaño. Cada cajón tiene su número y contiene algo de información:
Segundos de 00H
H 01 minutos
02H horas
Día 03H
04 H fecha la H nos dicen que estas son cifras hexadecimales.
05H mes
06H año
07H Control
08H a 3FH Ram
Si queremos leer o almacenar algunos datos en primer lugar tendremos al dispositivo en que cajón que queremos ser. Podemos hacerlo escribiendo el código hex para ese cajón al dispositivo. El dispositivo entonces se nos otorga acceso a ese cajón. Después de escribir o leer algo o a este registro el dispositivo que automáticamente salta a la siguiente. Así que no es necesario enviar la ubicación cada vez
Ahora permite pone este código:
Este código necesita dim horas como byte, byte minutos y segundos como byte. En primer lugar, estableceremos el reloj:
Segundos = Makebcd(Seconds) convertimos nuestras variables en formato BCD
Minutos = Makebcd(Minutes)
Horas = Makebcd(Hours)
restablecer hours.6 restablecemos bit 6 de la hoursbyte para asegurarse de
nuestro reloj se ejecuta en modo de 24h. Si el bit 6 es 1 entonces el
reloj funciona en modo de 12h y bit 5 será entonces
contienen los datos de AM/PM.
I2cstart
I2cwbyte y HD0 decimos el dispositivo que queremos escribir un byte
2cwbyte & H00 empezamos en el registro de segundos hex 00
I2cwbyte segundos Agregar segundos
Minutos de I2cwbyte minutos de adición
Agregar horas de I2cwbyte horas
I2cstop
Ahora es nuestro reloj! Permite leer de él ahora.
I2cstart
I2cwbyte y HD0 decimos el dispositivo que queremos escribir un byte de.
I2cwbyte & H00 pedimos el dispositivo para ir al registro segundos.
I2cstop
I2cstart
I2cwbyte & HD1 decimos el dispositivo que queremos leer bytes.
Segundos I2crbyte Ack leemos los datos y reconocer que queremos
leer también el siguiente byte.
I2crbyte minutos, Ack
I2crbyte horas, Nack no ackowledge aquí para que el dispositivo sepa
que nos estamos leyendo.
I2cstop
Horas = horas y B00111111 que quitar los 6 y 7 ya que contienen otros
datos. Si usted está en modo de 12h, deberá
Retire la broca 5 también
Horas = Makedec(Hours) convertimos a formato decimal.
Minutos = Makedec(minutes)
Segundos = Makedec(seconds)
Ahora sabemos qué hora es.
En el siguiente paso se echa un vistazo en el DS18B20.