Estoy intentando usar una versión editada de la biblioteca que se encuentra en este enlace . Básicamente, cambié parte del archivo incluido y parte de la función modificada de la biblioteca wire.h. Aunque no soy un programador hardcore, de alguna manera siempre puedo usar alguna biblioteca existente. Hice un código de muestra, solo para establecer el tiempo en DS1337 y leerlo. A continuación se muestra el código
#include <DS1337.h>
#include <Wire.h>
#include <avr/power.h>
#include <avr/sleep.h>
int i;
DS1337 RTC = DS1337();
void setup(){
Serial.begin(9600);
if(!RTC.time_is_set())
{
Serial.println("Clock did not set, wtf? Check that its oscillator is working.");
}
RTC.start();
RTC.setSeconds(00);
RTC.setMinutes(00);
RTC.setHours(05);
RTC.setDays(06);
RTC.setMonths(3);
RTC.setYears(2014);
RTC.writeTime();
}
void loop(){
int i;
for(i=0;i<=5;i++){
RTC.readTime(); // update RTC library's buffers from chip
printTime(0);
delay(5000);
Serial.print("\n");
}
}
void printTime(byte type)
{
// Print a formatted string of the current date and time.
// If 'type' is non-zero, print as an alarm value (seconds thru DOW/month only)
// This function assumes the desired time values are already present in the RTC library buffer (e.g. readTime() has been called recently)
if(!type)
{
Serial.print(int(RTC.getMonths()));
Serial.print("/");
Serial.print(int(RTC.getDays()));
Serial.print("/");
Serial.print(RTC.getYears());
}
else
{
//if(RTC.getDays() == 0) // Day-Of-Week repeating alarm will have DayOfWeek *instead* of date, so print that.
{
Serial.print(int(RTC.getDayOfWeek()));
Serial.print("th day of week, ");
}
//else
{
Serial.print(int(RTC.getDays()));
Serial.print("th day of month, ");
}
}
Serial.print(" ");
Serial.print(int(RTC.getHours()));
Serial.print(":");
Serial.print(int(RTC.getMinutes()));
Serial.print(":");
Serial.print(int(RTC.getSeconds()));
}
Sin embargo, este código me da esta salida.
Yconestasalidaesbastanteclaroquemiosciladornofunciona,aunquepuedoconfigurarlafechaylahora(peroesetiemponoaumenta).Aquíestáelesquemadecableadoqueutilicé
No puedo entender lo que estoy haciendo mal. Actualmente no estoy usando las capacidades de alarma del DS1337, básicamente para lo que se usa el DS1337.
Necesito ayuda con esto.
Nota: Según el resultado de búsqueda de Google, mantuve el VCC para DS1337 a 3.3 V. Aunque también probé con 5V, pero no funcionó.
Edición 1: Tuve algunos registros inicializados en el archivo DS1337.h que son los siguientes
#define DS1337_SP 0x0E
#define DS1337_SP_EOSC B00000000
#define DS1337_SP_RS2 B00010000
#define DS1337_SP_RS1 B00001000
#define DS1337_SP_INTCN B00000000
#define DS1337_SP_A2IE B00000010
#define DS1337_SP_A1IE B00000001
Ahora enlace página 10 dice algo diferente:
Bit 7: habilitar el oscilador (EOSC). Este bit activo bajo cuando se establece en lógica 0 inicia el oscilador. Cuando este bit se establece en la lógica 1, el oscilador se detiene. Este bit está habilitado (lógica 0) cuando se aplica la alimentación por primera vez.
Bits 4 y 3: Selección de frecuencia (RS2 y RS1). Estos bits controlan la frecuencia de la salida de onda cuadrada cuando se ha habilitado la onda cuadrada. La siguiente tabla muestra las frecuencias de onda cuadrada que se pueden seleccionar con los bits RS. Estos bits se establecen en la lógica 1 (32 kHz) cuando se aplica la alimentación por primera vez.
Bit 2: Control de interrupción (INTCN). Este bit controla la relación entre las dos alarmas y los pines de salida de interrupción. Cuando el bit INTCN se establece en la lógica 1, una coincidencia entre los registros de hora y los registros de alarma 1 l activa el pin INTA (siempre que la alarma esté habilitada) y una coincidencia entre los registros de hora normal y los registros de alarma 2 activa el SQW / Pin INTB (siempre que la alarma esté habilitada). Cuando el bit INTCN se establece en lógica 0, se emite una onda cuadrada en el pin SQW / INTB. Este bit se establece en 0 lógico cuando se aplica la alimentación por primera vez.
Bit 1: Activación de interrupción de alarma 2 (A2IE). Cuando se establece en la lógica 1, este bit permite que el indicador de alarma 2 (A2F) en el registro de estado afirme INTA (cuando INTCN = 0) o afirme SQW / INTB (cuando INTCN = 1). Cuando el bit A2IE se establece en lógica 0, el bit A2F no inicia una señal de interrupción. El bit A2IE se desactiva (lógica 0) cuando se aplica la alimentación por primera vez.
Bit 0: Activación de interrupción de alarma 1 (A1IE). Cuando se establece en la lógica 1, este bit permite que el bit de indicador de alarma 1 (A1F) en el registro de estado afirme INTA. Cuando el bit A1IE se establece en lógica 0, el bit A1F no inicia la señal INTA. El bit A1IE se desactiva (lógica 0) cuando se aplica la alimentación por primera vez.
Para 32.768 KHz, INTCN, RS2, RS1 deben ser 0,1,1. No estoy seguro de enmascarar un poco aquí.
¿Alguien puede ayudarme en eso?