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 Kommentare 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, wie deine Kommentardaten verarbeitet werden.