{"id":288,"date":"2016-02-28T14:06:39","date_gmt":"2016-02-28T14:06:39","guid":{"rendered":"https:\/\/www.kolkataonweb.com\/code-bank\/?p=288"},"modified":"2016-07-27T20:04:55","modified_gmt":"2016-07-27T19:04:55","slug":"ds-1302-rtc-clock-module-for-arduino","status":"publish","type":"post","link":"https:\/\/www.kolkataonweb.com\/code-bank\/arduino\/ds-1302-rtc-clock-module-for-arduino\/","title":{"rendered":"DS-1302 RTC Clock Module for Arduino"},"content":{"rendered":"<p>DS-1302 from Maxim (<a href=\"https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/02\/DS1302.pdf\" target=\"_blank\">data sheet download<\/a>) is a cheap RTC chip. Below are some of the salient features.<\/p>\n<ol>\n<li data-canvas-width=\"36.833740000000006\">Real-Time Clock Counts Seconds,Minutes, Hours, Date of the Month, Month, Day of the Week, and Year with Leap-Year Compensation Valid Up to 2100<\/li>\n<li data-canvas-width=\"36.833740000000006\">Simple 3-Wire Interface<\/li>\n<li data-canvas-width=\"36.833740000000006\">2.0V to 5.5V Full Operation<\/li>\n<li data-canvas-width=\"36.833740000000006\">TTL-Compatible (VCC = 5V)<\/li>\n<li data-canvas-width=\"36.833740000000006\">31 x 8 Battery-Backed General-Purpose RAM<\/li>\n<\/ol>\n<div data-canvas-width=\"36.833740000000006\">There are breakout boards available on ebay, which will be handy to build RTC based projects with Arduino. Look for China based sellers for a cheap price.<\/div>\n<div data-canvas-width=\"36.833740000000006\"><\/div>\n<div data-canvas-width=\"36.833740000000006\"><a href=\"https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/02\/DS-1302-RTC-2.jpg\" rel=\"attachment wp-att-290\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-290 size-thumbnail\" src=\"https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/02\/DS-1302-RTC-2-150x150.jpg\" alt=\"DS-1302 RTC 2\" width=\"150\" height=\"150\" srcset=\"https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/02\/DS-1302-RTC-2-150x150.jpg 150w, https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/02\/DS-1302-RTC-2-300x300.jpg 300w, https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/02\/DS-1302-RTC-2.jpg 500w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a> <a href=\"https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/02\/DS-1302-RTC-1.jpg\" rel=\"attachment wp-att-293\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-293 size-thumbnail\" src=\"https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/02\/DS-1302-RTC-1-150x150.jpg\" alt=\"DS-1302 RTC 1\" width=\"150\" height=\"150\" srcset=\"https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/02\/DS-1302-RTC-1-150x150.jpg 150w, https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/02\/DS-1302-RTC-1-300x300.jpg 300w, https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/02\/DS-1302-RTC-1.jpg 500w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a><a href=\"https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/02\/DS-1302-RTC-3.png\" rel=\"attachment wp-att-291\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-291 size-thumbnail\" src=\"https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/02\/DS-1302-RTC-3-150x150.png\" alt=\"DS-1302 RTC 3\" width=\"150\" height=\"150\" \/><\/a><a href=\"https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/02\/DS-1302-RTC-4.png\" rel=\"attachment wp-att-292\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-292 size-thumbnail\" src=\"https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/02\/DS-1302-RTC-4-150x150.png\" alt=\"DS-1302 RTC 4\" width=\"150\" height=\"150\" \/><\/a><\/div>\n<div data-canvas-width=\"36.833740000000006\">Though there are various modules available but the above two types I found to be working properly.<\/div>\n<pre class='wp-code-highlight prettyprint'>The below board didn't work at all. Notice the PCB trace which indicates the poor quality.Unfortunately there was no way to know this before delivery.\r\n\r\n<a href=\"https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/02\/DS-1302-RTC-Bad.png\" rel=\"attachment wp-att-294\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-294 size-thumbnail\" src=\"https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/02\/DS-1302-RTC-Bad-150x150.png\" alt=\"DS-1302 RTC - Bad\" width=\"150\" height=\"150\" \/><\/a><a href=\"https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/02\/DS-1302-RTC-Bad-2.png\" rel=\"attachment wp-att-295\">  <img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-295 size-thumbnail\" src=\"https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/02\/DS-1302-RTC-Bad-2-150x150.png\" alt=\"DS-1302 RTC - Bad 2\" width=\"150\" height=\"150\" \/><\/a><\/pre>\n<div data-canvas-width=\"36.833740000000006\">For those modules which has two power pins (VCC1 and VCC2), power to be connected to VCC2, VCC1 is connected to battery<\/div>\n<div data-canvas-width=\"36.833740000000006\"><\/div>\n<div data-canvas-width=\"36.833740000000006\">The below code can be used to used to write and read time from the chip. <em>Credit for the DS1302 library used here goes to Matt Sparks<\/em>.\u00a0 The library can be downloaded <a href=\"https:\/\/github.com\/msparks\/arduino-ds1302\" target=\"_blank\">from Github<\/a> and also <a href=\"https:\/\/www.kolkataonweb.com\/code-bank\/wp-content\/uploads\/2016\/02\/arduino-ds1302-master.zip\" target=\"_blank\">from here<\/a> (in case it goes off from Github).<\/div>\n<div data-canvas-width=\"36.833740000000006\"><\/div>\n<div data-canvas-width=\"36.833740000000006\">Below is a code snippet (based on Matt Spark&#8217;s work) for setting time and reading it back easily. <em>Please note for writing to the chip VCC2 needs to be given power (I used 5v).<\/em><\/div>\n<div data-canvas-width=\"36.833740000000006\"><\/div>\n<pre class='wp-code-highlight prettyprint'>\u00a0\u00a0\u00a0 \/\/http:\/\/datasheets.maximintegrated.com\/en\/ds\/DS1302.pdf\r\n\r\n\u00a0\u00a0\u00a0 #include &lt;DS1302.h&gt;\r\n\u00a0\u00a0\u00a0 \/\/#include &lt;SoftwareSerial.h&gt;\r\n\r\n\u00a0\u00a0\u00a0 \/\/SoftwareSerial mySerial(2, 3); \/\/ RX, TX\r\n\r\n\u00a0\u00a0\u00a0 namespace {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Set the appropriate digital I\/O pin connections.\r\n\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 const int kCePin\u00a0\u00a0 = 8;\u00a0 \/\/ Chip Enable (Some calls it Reset)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 const int kIoPin\u00a0\u00a0 = 7;\u00a0 \/\/ Input\/Output\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 const int kSclkPin = 6;\u00a0 \/\/ Serial Clock\r\n\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Create a DS1302 object.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 DS1302 rtc(kCePin, kIoPin, kSclkPin);\r\n\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 String dayAsString(const Time::Day day) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 switch (day) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case Time::kSunday: return \"Sunday\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case Time::kMonday: return \"Monday\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case Time::kTuesday: return \"Tuesday\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case Time::kWednesday: return \"Wednesday\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case Time::kThursday: return \"Thursday\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case Time::kFriday: return \"Friday\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case Time::kSaturday: return \"Saturday\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return \"(unknown day)\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 void printTime() {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Get the current time and date from the chip.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Time t = rtc.time();\r\n\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Name the day of the week.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 const String day = dayAsString(t.day);\r\n\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Format the time and date and insert into the temporary buffer.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 char buf[50];\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 snprintf(buf, sizeof(buf), \"%s %04d-%02d-%02d %02d:%02d:%02d\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 day.c_str(),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 t.yr, t.mon, t.date,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 t.hr, t.min, t.sec);\r\n\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Print the formatted string to serial so we can see the time.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Serial.println(buf);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/mySerial.println(buf);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 }\u00a0 \/\/ end of namespace\r\n\r\n\u00a0\u00a0\u00a0 void setup() {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 Serial.begin(9600);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/mySerial.begin(38400);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Initialize a new chip by turning off write protection and clearing the clock halt flag.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 rtc.writeProtect(false); \/\/should be set to true after writing to prevent accidental writes\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 rtc.halt(false);\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Year month day hour min sec. DOW\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 Time t(2016, 2, 28, 19, 9, 30, Time::kSunday);\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Set the time and date on the chip.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 rtc.time(t);\u00a0 \/\/after writing once, comment\/remove this code to prevent unnecessary\/wrong re-writing of the time\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 \/\/ Loop and print the time every 5 seconds.\r\n\u00a0\u00a0\u00a0 void loop() {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 printTime(); \/\/prints the date and time\r\n\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 delay(5000);\r\n\u00a0\u00a0\u00a0 }<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>DS-1302 from Maxim (data sheet download) is a cheap RTC chip. Below are some of the salient features. Real-Time Clock Counts Seconds,Minutes, Hours, Date of the Month, Month, Day of the Week, and Year with Leap-Year Compensation Valid Up to 2100 Simple 3-Wire Interface 2.0V to 5.5V Full Operation TTL-Compatible (VCC = 5V) 31 x&hellip; <a class=\"more-link\" href=\"https:\/\/www.kolkataonweb.com\/code-bank\/arduino\/ds-1302-rtc-clock-module-for-arduino\/\">Continue reading <span class=\"screen-reader-text\">DS-1302 RTC Clock Module for Arduino<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[36,34,35],"class_list":["post-288","post","type-post","status-publish","format-standard","hentry","category-arduino","tag-arduino-clock","tag-arduino-rtc","tag-ds-1302","entry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/posts\/288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/comments?post=288"}],"version-history":[{"count":7,"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/posts\/288\/revisions"}],"predecessor-version":[{"id":467,"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/posts\/288\/revisions\/467"}],"wp:attachment":[{"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/media?parent=288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/categories?post=288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/tags?post=288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}