Gelöst: DS3231 Libary Reference

Gibt es irgendwo eine ausführliche Reference für den DS3231. Ich würde gerne eine Interupts ausführen, sobald eine neue Sekunde anbricht.

Für den Chip gibt es das Datenblatt: http://datasheets.maximintegrated.com/en/ds/DS3231.pdf

Oder meinst du eine C Lib?

Du musst dafür den Square-Wave Ausgang auf 1 Hz einstellen. Siehe Seite 13. RS1 und RS0 auf 0. Dann INTCN auf 0. Das sind Bits 2, 3 und 4 im Control Register 0xeh.

Jedenfalls was ich so auf die Schnelle sehe...

Gibt es irgendwo eine ausführliche Reference für den DS3231.

Das Datenblatt.

Grüße Uwe

	RTC.squareWave(1);
	pinMode(sqw, INPUT);
	attachInterrupt(sqw, rtc_interrupt, RISING);

Mir geht es um die Funktion RTC.squareWave, welchen Wert erwartet er hier? Er erwartet byte freq

Ich rate mal und sage es ist der Binärwert der zwei Bits. Demnach müsstest du 0 machen. 1 wäre demnach ca. 1 kHz

Lass halt eine LED im Interrupt blinken. Dann merkst du schon wie schnell es ist :)

EDIT: Oder 0 ist aus, 1 = 1 Hz, 2 = 1 kHz, 3 = 4 kHz, 4 = 8 kHz

rtc_interrupt gibt mir die millis aus, sobald ein interupt eintrifft. Hab gerade keine Led griffbereit und led13 ist von einem Shield bedeckt.

Es kommt aber gerade noch nichts. Habe das Ds3231 Modul über die üblichen 4 Pins angekommt und INT/SQW geht auf den Interrupteingang 2.

/*----------------------------------------------------------------------*
 * Enable or disable the square wave output.                            *
 * Use a value from the SQWAVE_FREQS_t enumeration for the parameter.   *
 *----------------------------------------------------------------------*/
void DS3232RTC::squareWave(byte freq)
{
    uint8_t controlReg;

    controlReg = readRTC(RTC_CONTROL);
    if (freq >= SQWAVE_NONE) {
        controlReg |= _BV(INTCN);
    }
    else {
        controlReg = (controlReg & 0xE3) & ~_BV(INTCN) | (freq  << RS1);
    }
    writeRTC(RTC_CONTROL, controlReg);
}


//Square-wave output frequency (TS2, RS1 bits)
enum SQWAVE_FREQS_t {SQWAVE_1_HZ, SQWAVE_1024_HZ, SQWAVE_4096_HZ, SQWAVE_8192_HZ, SQWAVE_NONE};

Habe auch schon versucht über

	Wire.beginTransmission(0x68);
	Wire.write(0x0E);
	Wire.write(0b00000011);
	Wire.endTransmission();

die Bits zu setzen. Leider auch erfolglos.

sschultewolter: Es kommt aber gerade noch nichts. Habe das Ds3231 Modul über die üblichen 4 Pins angekommt und INT/SQW geht auf den Interrupteingang 2.

Hast Du denn das Datenblatt inzwischen gelesen?

"This open-drain pin requires an external pullup resistor"? (Wobei "external pullup" für den DS3231 "external" meint und durchaus der "internal pullup" des angeschlossenen Arduinos sein könnte, den man per Software aktivieren kann.)

Ja, habe zwischen Vcc und dem Interupt Pin 10,8k Ohm.

Also bei dem enum: enum SQWAVE_FREQS_t {SQWAVE_1_HZ, SQWAVE_1024_HZ, SQWAVE_4096_HZ, SQWAVE_8192_HZ, SQWAVE_NONE};

Ist 0 = 1 Hz

Das enum sollte aber auch in deiner Lib bekannt sein: RTC.squareWave(SQWAVE_1_HZ);

Bei der geringen Frequenz kann man das auch mit einem Multimeter messen

SQWAVE_1_HZ wird akzeptiert. Messen kann ich gerade nicht, hab meine Fluke in der Firma liegen gelassen.

Hast du bedacht, dass das attachInterrupt(0, ...) für Pin 2 sein muss?

Nein :0

Da war der Fehlerteufel.

Port open
************************************
* Chronos WS2812B   Letztes Update *
* von sschultewolter    17.12.2013 *
************************************
Sync erfolgreich!

817
1818
2819
3819
4819
5820
6820
7821
8821
9824
10824
11824
12825
13826
14827
15827
16828
17828
18828
19829
20829

Nun gehts ;) Danke

Yay \o/

Schwere Geburt :slight_smile:

Serenifly: Yay \o/

Schwere Geburt :)

Ja, wenn man den Fehler an der falschen Stelle sucht, hätte mir dann doch einiges ersparen können, wenn ich den Sketch vorab kleiner und online gestellt hätte.