Yes - Sorry - I thought his book was better known. Tho following code is my amended version of his project 57 - main changes to how the data is sent to the serial printer.
[code] // Written by John Boxall from http://tronixstuff.com
#include "Wire.h" // Allows I2C to talk to board
//------------------------------------------------
#define DS3231_I2C_ADDRESS 0x68
// -------Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val){ return( (val/1016) + (val%10) );}
// --------Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val){ return( (val/1610) + (val%16) );}
//-------------------------------------------------
void setup(){ // =====================
Wire.begin();
Serial.begin(9600);
// set the initial time here:
// DS3231 seconds, minutes, hours, day, date, month, year
setDS3231time(0,0,0,2,5,7,24);
} //==================================
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year){ //++++++++++++++++++++++++
// sets time and date data to DS3231
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); //set next input to start at the seconds register
// Wire.write(0x0E); // select register
// Wire.write(0b00011100); // write register bitmap, bit 7 is /EOS
Wire.write(decToBcd(second)); // set seconds
Wire.write(decToBcd(minute)); // set minutes
Wire.write(decToBcd(hour)); // set hours
Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
Wire.write(decToBcd(month)); // set month
Wire.write(decToBcd(year)); // set year (0 to 99)
Wire.endTransmission();
} //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void readDS3231time(byte second,
byte minute,
byte hour,
byte dayOfWeek,
byte dayOfMonth,
byte month,
byte year){ //***********************************
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set DS3231 register pointer to 00h
Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
// request seven bytes of data from DS3231 starting from register 00h
second = bcdToDec(Wire.read() & 0x7f);
minute = bcdToDec(Wire.read());
hour = bcdToDec(Wire.read() & 0x3f);
dayOfWeek = bcdToDec(Wire.read());
dayOfMonth = bcdToDec(Wire.read());
month = bcdToDec(Wire.read());
year = bcdToDec(Wire.read());
} //********************************************
void displayTime(){ //~~~~~~~~~~~~~~~~~~~~~~~~~~~
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
&year);
// send it to the serial monitor
if (dayOfMonth<10) { Serial.print("0");}
Serial.print(dayOfMonth, DEC);
Serial.print(":");
if (month<10) { Serial.print("0");}
Serial.print(month, DEC);
Serial.print(":");
Serial.print("20");
Serial.print(year, DEC);
Serial.print(" ");
if (hour<10) { Serial.print("0"); }
Serial.print(hour, DEC);
// convert the byte variable to a decimal number when displayed
Serial.print(":");
if (minute<10) { Serial.print("0"); }
Serial.print(minute, DEC);
Serial.print(":");
if (second<10) { Serial.print("0"); }
Serial.print(second, DEC);
Serial.println(); // to create new line
} //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void loop(){ //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
displayTime(); // display the real-time clock data on the Serial Monitor,
delay(5000); // every 5 seconds
} //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[/code]
I hope I've inserted the code correctly.