Go Down

Topic: DS 3232 not working (Read 580 times) previous topic - next topic

Luca02

Hi!
I have tryed with two different DS 3232 and I got the same problem.
First I download the software SetSerial provided in the IDE and I set ti time but I notice that the measure of the temperature is always 47 C that's impossible.
Then I notice that both DS 3232 loose about 15 minute each day !
Maybe the temperature correction is a problem but I don't understand why I got 47 C !
Thanks for any suggestion.

Regards

pylon

Quote
First I download the software SetSerial provided in the IDE
Please provide a link to that software.

Quote
I set ti time but I notice that the measure of the temperature is always 47 C that's impossible.
What library do you use? Link to it?

Post your code!

Post a wiring diagram!

Luca02

The library is DS3232RTC.h .
Regarding the wiring, apart of +Vcc and GND (that are connected to +5V and GND),
PIN SDA is connected to Arduino PIN A4 and SCL is connected to A5.
This is the code. Thanks a lot.

Quote
// Arduino DS3232RTC Library


// https://github.com/JChristensen/DS3232RTC
// Copyright (C) 2018 by Jack Christensen and licensed under
// GNU GPL v3.0, https://www.gnu.org/licenses/gpl.html
//
// Example sketch to display the date and time from a DS3231
// or DS3232 RTC every second. Display the temperature once per
// minute. (The DS3231 does a temperature conversion once every
// 64 seconds. This is also the default for the DS3232.)
//
// Set the date and time by entering the following on the Arduino
// serial monitor:
//  year,month,day,hour,minute,second,
//
// Where
//  year can be two or four digits,
//  month is 1-12,
//  day is 1-31,
//  hour is 0-23, and
//  minute and second are 0-59.
//
// Entering the final comma delimiter (after "second") will avoid a
// one-second timeout and will allow the RTC to be set more accurately.
//
// No validity checking is done, invalid values or incomplete syntax
// in the input will result in an incorrect RTC setting.
//
// Jack Christensen 08Aug2013

#include <DS3232RTC.h>      // https://github.com/JChristensen/DS3232RTC
#include <Streaming.h>      // http://arduiniana.org/libraries/streaming/

void setup()
{
    Serial.begin(9600);

    // setSyncProvider() causes the Time library to synchronize with the
    // external RTC by calling RTC.get() every five minutes by default.
    setSyncProvider(RTC.get);
    Serial << F("RTC Sync");
    if (timeStatus() != timeSet) Serial << F(" FAIL!");
    Serial << endl;
}

void loop()
{
    static time_t tLast;
    time_t t;
    tmElements_t tm;

    // check for input to set the RTC, minimum length is 12, i.e. yy,m,d,h,m,s
    if (Serial.available() >= 12) {
        // note that the tmElements_t Year member is an offset from 1970,
        // but the RTC wants the last two digits of the calendar year.
        // use the convenience macros from the Time Library to do the conversions.
        int y = Serial.parseInt();
        if (y >= 100 && y < 1000)
            Serial << F("Error: Year must be two digits or four digits!") << endl;
        else {
            if (y >= 1000)
                tm.Year = CalendarYrToTm(y);
            else    // (y < 100)
                tm.Year = y2kYearToTm(y);
            tm.Month = Serial.parseInt();
            tm.Day = Serial.parseInt();
            tm.Hour = Serial.parseInt();
            tm.Minute = Serial.parseInt();
            tm.Second = Serial.parseInt();
            t = makeTime(tm);
            RTC.set(t);        // use the time_t value to ensure correct weekday is set
            setTime(t);
            Serial << F("RTC set to: ");
            printDateTime(t);
            Serial << endl;
            // dump any extraneous input
            while (Serial.available() > 0) Serial.read();
        }
    }

    t = now();
    if (t != tLast) {
        tLast = t;
        printDateTime(t);
        if (second(t) == 0) {
            float c = RTC.temperature() / 4.;
            float f = c * 9. / 5. + 32.;
            Serial << F("  ") << c << F(" C  ") << f << F(" F");
        }
        Serial << endl;
    }
}

// print date and time to Serial
void printDateTime(time_t t)
{
    printDate(t);
    Serial << ' ';
    printTime(t);
}

// print time to Serial
void printTime(time_t t)
{
    printI00(hour(t), ':');
    printI00(minute(t), ':');
    printI00(second(t), ' ');
}

// print date to Serial
void printDate(time_t t)
{
    printI00(day(t), 0);
    Serial << monthShortStr(month(t)) << _DEC(year(t));
}

// Print an integer in "00" format (with leading zero),
// followed by a delimiter character to Serial.
// Input value assumed to be between 0 and 99.
void printI00(int val, char delim)
{
    if (val < 10) Serial << '0';
    Serial << _DEC(val);
    if (delim > 0) Serial << delim;
    return;
}

pylon

Quote
Regarding the wiring, apart of +Vcc and GND (that are connected to +5V and GND),
PIN SDA is connected to Arduino PIN A4 and SCL is connected to A5.
So I guess we're talking about an UNO, aren't we?

How do you power your setup? Is the Vbattery of the RS3232 connected to something?

Is RST pulled high?

How long are the wires between the DS3232 and the UNO? Don't you have external pull-ups?

cattledog

Quote
I notice that the measure of the temperature is always 47 C that's impossible.
Then I notice that both DS 3232 loose about 15 minute each day !
These are two very bad signs, possibly indicating a counterfeit chip which is not working properly.

Are your modules ebay specials for less than the cost of a genuine chip or do they come from a known supplier?

My experience with the Christensen library is that it is rock solid and there are no issues with the temperature readings.


Go Up