Hallo liebe Community,
zuerst einmal: Ich bin noch ein blutiger Anfänger, also habt erbarmen mit mir.
Ich verzweifel im Moment etwas am RCT Modul (DS3231), welches mit dem UNO - Kit geliefert wird. Ich dachte die Funktionsweise wäre mir klar, aber scheinbar war ich doch etwas zu guter Dinge.
Folgendes Problem:
Ich möchte einfach nur mit dem DS3231 einen Interrupt zu einer bestimmten Uhrzeit an den Arduino senden. Alarm einstellen etc. klappt wunderbar. Aber aus dem SQW pin des Moduls kommt ein dauerhaftes Sinussignal, auch wenn die vorgegebene Uhrzeit noch nicht erreicht ist (ich kann an den Anschluss direkt eine LED anschließen, diese blinkt selbst ohne Code dauerhaft im Sinussignal). So wie ich das verstanden habe, soll dieses doch erst auftreten, wenn der Alarm getriggert wird oder verstehe ich das Modul jetzt komplett falsch?
Folgender Code wird genutzt (sollte keinen Fehler haben, da dies der Standartcode aus der Bibliothek ist und nicht von mir programmiert wurde). Die Verschaltung habe ich auch hochgeldaden.
Beste Grüße,
Olliwaa
/*
DS3231: Real-Time Clock. Alarm simple
Read more: www.jarzebski.pl/arduino/komponenty/zegar-czasu-rzeczywistego-rtc-DS3231.html
GIT: https://github.com/jarzebski/Arduino-DS3231
Web: http://www.jarzebski.pl
(c) 2014 by Korneliusz Jarzebski
*/
#include <Wire.h>
#include <DS3231.h>
DS3231 clock;
RTCDateTime dt;
boolean isAlarm = false;
boolean alarmState = false;
int alarmLED = 4;
void alarmFunction()
{
Serial.println("*** INT 0 ***");
isAlarm = true;
}
void setup()
{
Serial.begin(9600);
// Initialize DS3231
Serial.println("Initialize DS3231");;
clock.begin();
// Disarm alarms and clear alarms for this example, because alarms is battery backed.
// Under normal conditions, the settings should be reset after power and restart microcontroller.
clock.armAlarm1(false);
clock.armAlarm2(false);
clock.clearAlarm1();
clock.clearAlarm2();
// Manual (Year, Month, Day, Hour, Minute, Second)
clock.setDateTime(2014, 4, 25, 0, 0, 0);
// Set Alarm1 - Every 20s in each minute
// setAlarm1(Date or Day, Hour, Minute, Second, Mode, Armed = true)
clock.setAlarm1(0, 0, 0, 10, DS3231_MATCH_S);
// Attach Interrput 0. In Arduino UNO connect DS3231 INT to Arduino Pin 2
attachInterrupt(0, alarmFunction, FALLING);
// Setup LED Pin
pinMode(alarmLED, OUTPUT);
}
void loop()
{
dt = clock.getDateTime();
Serial.println(clock.dateFormat("d-m-Y H:i:s - l", dt));
if (isAlarm)
{
digitalWrite(alarmLED, alarmState);
alarmState = !alarmState;
clock.clearAlarm1();
}
delay(1000);
}
DS3231_intalarm.ino (1.52 KB)