RTC3231 Aufbau

Rechteck 1Hz (+-2ppm) ausgeben mit dem RTC DS3231 und dem Arduino

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

3 Gedanken zu „Rechteck 1Hz (+-2ppm) ausgeben mit dem RTC DS3231 und dem Arduino

  1. Pingback: Von der RTC DS3231 die Temperatur auslesen mit dem Arduino | Shelvin – Elektronik ausprobiert und erläutert

  2. nlohr

    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

    Antworten
  3. Pingback: Mit RTC DS3231 Schaltung ein mal pro Tag ein/ausschalten | wer bastelt mit?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.