Estoy usando el DS1307 RTC junto con arduino y esta biblioteca http://rweather.github.com/arduinolibs/classDS1307RTC.html
Cuando enciendo el chip directamente desde las salidas de 5V y GND de mi arduino UNO, todo funciona bien.
Cuando enciendo el chip usando un pin digital con salida configurada en ALTO para entrada de voltaje y/o un pin digital con salida configurada en BAJO para GND, la biblioteca no puede leer la hora del RTC.
Esta misma configuración exacta funciona con la biblioteca proporcionada por adafruit http://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/understanding-the-code
Pero me gustaría usar la biblioteca rweather porque proporciona más funciones (como un acceso más fácil a la memoria RAM y una función de conveniencia de alarma), también está mucho mejor escrita y bien documentada.
El siguiente código funciona con ambas bibliotecas, pero solo falla con la biblioteca rweather cuando no se usan 5V y GND directamente. Al comenzar con 5V y luego cambiar a un pin de salida, la biblioteca puede leer la hora, por lo que parece que esto está relacionado con algún tipo de problema de inicio.
#include <Wire.h>
#include <RTC.h>
#include <SoftI2C.h>
#include <DS1307RTC.h>
void setup()
{
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
// provide power for the RTC module
Serial.begin(9600);
Serial.print("Setting output\n");
digitalWrite(7, HIGH);
digitalWrite(6, LOW);
Serial.print("output Set\n");
delay(2000);
Serial.print("delay over\n");
SoftI2C bus(5, 4);
DS1307RTC controller(bus, 3);
Serial.print(controller.isRealTime() ? "controller is realtime" : "controller is simulating");
Serial.println();
RTCTime theTime;
controller.readTime(&theTime);
Serial.print("startup time");
Serial.println();
Serial.print(theTime.hour);
Serial.print(":");
Serial.print(theTime.minute);
Serial.print(":");
Serial.print(theTime.second);
}
void loop()
{
}
Supongo que el pin arduino no puede generar suficiente corriente para el RTC. Intente usar un transistor para controlar la potencia del RTC. Use npn one, conecte el emisor a +5V del arduino, la base al pin de arduino y el colector a +5V del RTC.
Mi sospecha es que el dispositivo está consumiendo una corriente máxima más alta, tal vez al inicio, y esta es la razón de la falla. Hay una manera de probar esto. Simplemente conecte el dispositivo a VCC y enciéndalo. Luego, conéctelo al pin de E/S que proporciona energía, sin permitir que se rompa el riel de alimentación. A ver si eso funciona.
Otra cosa que debe intentar es conectar varias E/S juntas para intentar ver si eso puede permitirle la corriente adicional que necesita. Es posible que se necesiten algunos condensadores de desacoplamiento para estabilizar el dispositivo.
[Editar:] Originalmente no me había dado cuenta de que también estabas ejecutando el suelo desde un pin de E/S. Esto no es necesario y, como dije, hará que la referencia a tierra sea más alta que la del microcontrolador, y tal vez cause una señalización digital marginal que cause problemas.
Transeúnte
If you set analog pin 3 (digital 17) to an OUTPUT and HIGH and analog pin 2 (digital 16) to an OUTPUT and LOW you can power the RTC directly from the pins!
Gustavo Litovsky
Willem D'Haeseleer
Gustavo Litovsky
Gustavo Litovsky
gbarry
Transeúnte
Transeúnte
Willem D'Haeseleer