Die RTC DS3231 kann auch ein sehr genaues Rechtecksignal ausgeben am SQW Ausgang. Dazu wird das Control Register entsprechend gesetzt.
Diese 4 Frequenzen sind einstellbar: 1Hz, 1024Hz, 4096Hz, 8192Hz. Die Signale sind symmetrisch und die Amplitude entspricht fast VCC (also 3,3V oder 5V)
Zusätzlich stehen am 32kHz Pin immer 32768Hz zur Verfügung. Dieses Signal ist aber nicht symmetrisch (ca. 1/3 An und 2/3 Aus).
Die hohe Genauigkeit des RTC3231 bleibt dabei erhalten. Dadurch werden diese Frequenzen mit nur +-2ppm Abweichung ausgegeben.
Hier das Programm mit den 4 Funktionen
// RTC DS3231 SQW Ausgang auf 1 Hz einstellen mit +-2ppm. // Optional können auch 1,024kHz, 4,096kHz, 8,192kHz // ausgegeben werden. // // Matthias Busse 8.11.2016 Version 1.0 #include "Wire.h" #define DS3231_ADDRESSE 0x68 void setup() { Wire.begin(); Serial.begin(38400); sqw1HzDS3231(); } void loop() { // nix zu tun } void sqw1HzDS3231() { // 1 Hz Rechteck ausgeben am SQW Ausgang Wire.beginTransmission(DS3231_ADDRESSE); Wire.write(0x0e); // DS3231 Register zu 0Eh Wire.write(B01100011); // Register schreiben Wire.endTransmission(); } void sqw1024HzDS3231() { // 1024 Hz Rechteck ausgeben am SQW Ausgang Wire.beginTransmission(DS3231_ADDRESSE); Wire.write(0x0e); // DS3231 Register zu 0Eh Wire.write(B01101011); // Register schreiben Wire.endTransmission(); } void sqw4096HzDS3231() { // 4096 Hz Rechteck ausgeben am SQW Ausgang Wire.beginTransmission(DS3231_ADDRESSE); Wire.write(0x0e); // DS3231 Register zu 0Eh Wire.write(B01110011); // Register schreiben Wire.endTransmission(); } void sqw8192HzDS3231() { // 8192 Hz Rechteck ausgeben am SQW Ausgang Wire.beginTransmission(DS3231_ADDRESSE); Wire.write(0x0e); // DS3231 Register zu 0Eh Wire.write(B01111011); // Register schreiben Wire.endTransmission(); }
Die Verkabelung des ZS-042 ist hier beschrieben.
Am SQW Ausgang steht nun zusätzlich das Rechtecksignal zur Verfügung.
Anmerkung für den Selbstbau: Der IC Ausgang selbst hat einen open collector, sodass hier zwischen SQW und VCC noch ein 5 kOhm Widerstand eingefügt werden muß.
Das ist bei meiner fertigen Platine nicht notwendig.
Verwendet wurden:
RTC3231 ZS-042 Modul
Arduino 1.6.5 Software
Arduino Uno Board
Von Matthias Busse
Weitere Beiträge zum DS3231:
– Den Arduino Quarztakt auf 3ppm genau bestimmen mit der DS3231 RTC
– Von der RTC DS3231 die Temperatur auslesen mit dem Arduino
– Die Uhrzeit des RTC DS3231 Modul vom Arduino einstellen
– Die Uhrzeit des RTC DS3231 Modul vom Arduino auslesen
Pingback: Von der RTC DS3231 die Temperatur auslesen mit dem Arduino | Shelvin – Elektronik ausprobiert und erläutert
Instead of adding a (Hardware-)Resistor between PD2 and VCC (+5V) it’s also possible to pull-up the signal per software:
void setup()
pinMode(2, INPUT_PULLUP); // Pin 2 = INT0
//INT/SQW is „Open-Drain“, so needs to be pulled-up, here activating the internal „PullUp“ (on Arduino-Chip) per software
Pingback: Mit RTC DS3231 Schaltung ein mal pro Tag ein/ausschalten | wer bastelt mit?