lunes, 16 de enero de 2012

Usar la señal de reloj del DS1307

Hola querido lector,

esta entrada es pequeña, prometido.

Como sabrás, el integrado DS1307 es un reloj RTC (Real Time Clock) muy popular entre la comunidad arduino, dada la facilidad de manejo y el amplio soporte, y cuando digo amplio, es AMPLIO, porque hay librerías a carretadas, pero en todas echo algo en falta: poder usar la señal de reloj.
Si te has leído el datasheet del DS1307, sabrás que puede generar una onda cuadrada con un pulso de duración determinada (para más detalles mira la página 5).
En concreto, me voy a centrar en el pulso de 1hz: 1 segundo.
¿Por qué? Porque muchas veces hace falta un contador preciso.
El caso más común es implementar un reloj usando arduino, y cuando digo arduino, digo cualquier otro microcontrolador.
La gracia de usar este pulso de reloj es la estabilidad del mismo, asi como manejarlo en otra clase de circuitos digitales, sin necesidad de utilizar un microcontrolador.

Activar la señal de reloj es muy fácil desde arduino con este código:

Wire.beginTransmission(B1101000);
  Wire.write((byte)0x07);
  Wire.write((byte)B10010000);
Wire.endTransmission();


Sólo hace falta ejecutarlo una vez, salvo que se retire la pila de botón y se pierda toda la configuración, en cuyo caso, hay que volver a ejecutar el código.
¿Manejo? Fácil: el pin 7 del DS1307 tiene la salida de la señal.
En arduino, puedes conectarlo al pin 2 o 3 (interrupción 0 y 1 respectivamente), para manejarlo con una interrupción.
No voy a entrar en muchos detalles, porque está bien documentado, pero un código de ejemplo sería algo asi:


bool pulso_reloj;
void recibe_pulso() {
  // El código a ejecutar en una interrupción debe ser mínimo
  pulso_reloj = true;
}
void setup() {
  Serial.begin(9600);
  pulso_reloj = false;
  attachInterrupt(0, recibe_pulso, RISING);
}

void loop() {
  if (pulso_reloj) {

    Serial.println("Pulso de reloj");
    pulso_reloj = false;
  }
}

Espero que te resulte útil.
¡Hasta la próxima!

4 comentarios:

  1. Pues lo complicado es conseguir el integrado, por lo menos en tenerife, en las palmas se encuentra¿?

    ResponderEliminar
    Respuestas
    1. En las palmas olvídate... puedes buscarlo en bricogeek, sparkfun, adafruit, ebay, y no sé si algún sitio más.
      Recuerda pedir el cristal de 32.768Hz o no va a funcionar el reloj.

      Eliminar
  2. Nas ! siempre me he "cortado" a la hora de pedir cosas al continente (jejejej me encanta la expresión) x causa de la aduana.¿No has/habeis tenido problemas?. Gracias y gracias x compartir tus conocimientos y esfuerzos .
    Edu desde TF

    ResponderEliminar
  3. Hola Edu,

    antes de nada, te agradezco tu interés y tu comentario :)
    En cuanto a aduanas, sólo me han parado pedidos por correos desde Alemania y Península. En la web de correos puedes consultar las tarifas de DUA y demás para paquetes que vengan de Península.
    Fuera de la Unión Europea no he tenido problema alguno (Reino Unido, Canadá, EEUU, China, etc).
    Espero te ayude, y que esta situación desquiciante cambie, porque no hace más que repercutir negativamente a las empresas del país.

    ResponderEliminar