Skip to content

Instantly share code, notes, and snippets.

@ichilton
Created November 4, 2011 22:27
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ichilton/1340653 to your computer and use it in GitHub Desktop.
Save ichilton/1340653 to your computer and use it in GitHub Desktop.
MCP79410 RTC Arduino Code
# From: http://web.icedsl.hu/enicke/mcprtc/mcpcode.html
#include <Wire.h>
void setup()
{
Serial.begin(9600);
Wire.begin();
}
void loop(){
WriteRTCByte(0,0); //STOP RTC
WriteRTCByte(1,0x18); //MINUTE=18
WriteRTCByte(2,0x08); //HOUR=8
WriteRTCByte(3,0x09); //DAY=1(MONDAY) AND VBAT=1
WriteRTCByte(4,0x28); //DATE=28
WriteRTCByte(5,0x02); //MONTH=2
WriteRTCByte(6,0x11); //YEAR=11
WriteRTCByte(0,0x80); //START RTC, SECOND=00
delay(100);
while(1){
Serial.print("20"); //year beginning with 20xx
DisplayRTCData(6,8);
Serial.print(".");
DisplayRTCData(5,5);
Serial.print(".");
DisplayRTCData(4,6);
Serial.print(" ");
DisplayRTCData(2,6);
Serial.print(":");
DisplayRTCData(1,7);
Serial.print(":");
DisplayRTCData(0,7);
Serial.println();
delay(1000);
}
}
unsigned char ReadRTCByte(const unsigned char adr){
unsigned char data;
Wire.beginTransmission(0x6f);
Wire.send(adr);
Wire.endTransmission();
Wire.requestFrom(0x6f,1);
while (Wire.available()) data=Wire.receive();
return data;
}
void WriteRTCByte(const unsigned char adr, const unsigned char data){
Wire.beginTransmission(0x6f);
Wire.send(adr);
Wire.send(data);
Wire.endTransmission();
}
void DisplayRTCData(const unsigned char adr, const unsigned char validbits){
unsigned char data;
data=ReadRTCByte(adr);
data=data & 0xff>>(8-validbits);
if (data<10) Serial.print("0"); //leading zero
Serial.print(data,HEX);
}
@priyank
Copy link

priyank commented Mar 17, 2013

perfect, can you add alarms also.

@ankitvadi
Copy link

please share wire.h file.i require as soon as possible.

@ricmf89
Copy link

ricmf89 commented Jul 2, 2015

Hi!
Thank's for you share your code!
You saved my day!

@ricmf89
Copy link

ricmf89 commented Jul 2, 2015

Release...

Wire.send is now Wire.write
Wire.receive is now Wire.read

@Anandnitrate
Copy link

Hey,
Can't we set the second value???
Because, RTC is running only if i set seconds=0x80!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment