ds3231 arduino circuit pinout proteus library

ds3231 arduino circuit pinout proteus library 13

ds3231 arduino circuit pinout proteus library,ds3231 arduino circuit
[otw_is sidebar=otw-sidebar-1]
I will talk about Ds3231 Arduino Circuit  DS3231 RTC device, main components and application of this module and at the end we will show you how to Interface a DS3231 Real Time Clock device with Arduino.

 

Note on Real Time Clock (RTC):

The DS3231 is a Real Time Clock made by Maxim Integrated American Company. It is a low cost, extremely precise RTC with transmission over I2C Interface. An important feature of DS3231 RTC is that it has integrated crystal oscillator and temperature sense ability and you do not have to attach an external crystal.we need to download it first.

It is accessible in SO16 Package. Although it require only 8 pins in the accessible 16 pins to function, the integration of crystal makes the IC large and it is packed as a 16 pin IC rather than 8 pin IC.

ds3231 arduino circuit pinout proteus library,Note on Real Time Clock (RTC),DS3231 Clock Using Arduino

DS3231  Pin Configuration

ds3231 pinout,DS3231  Pin Configuration,DS3231 Circuit Design

 

Pin No Pin Name Description
1 32KHz 32KHz output
2 Vcc DC pin
3 SQW Square wave output
4 RST Low reset
5-12 NC No Connection
13 GND Ground
14 Vbat Power supply from battery
15 SDA Serial input &output
16 SCL Serial Clock Input

 

Interfacing DS3231 RTC with Arduino

 

I have setup an easy data logging application where the data from a sensor is stored in the SD Card in the sort of a text file.

By integrating a DS3231 in this project, you can keep detect the data log with precise time details. So, interfacing DS3231 RTC device with Arduino has a numerous implementation and advantages.

Components Required

DS3231 Circuit Design

Let’s begin the connections between Arduino and DS3231. The junction between them is I2C, point out the I2C Pins on your Arduino Board. In Arduino, A4 and A5 are SDA and SCL pins. Attach these pins with similar SDA and SCL pins of the DS3231 component. Also, join the Vcc and GND of the RTC component to 5v and GND of Arduino.

Connect the push button with Arduino pin 8 and 9.

To see the output, I am using an LCD component. Join the CS with GND and connect Vcc with CS pin.

you can see how to relay interfacing with arduino in proteus.  my last post is  what is relay 


 

 

DS3231 Proteus Library

ds3231 proteus library,Interfacing DS3231 RTC with Arduino

DS3231 Working

The working of the Arduino DS3231 RTC device is very simple. Arduino first stored the RTC component with its peasant address.

Arduino then upload the internal registers of the RTC with the date and time at which the code is assemble and uploaded to Arduino. The updated date and time can be display on the LCD.

If you want the DS3231 device to keep time even after you disjoin power to Arduino, you can also attach a 3v Battery.

DS3231 Application

  • Servers
  • GPS Module
  • Power Meters

So this is it. I hope you consider this guide helpful. Will meets you guys next time with new topic. Till then take care, have fun.

 

Arduino lcd rtc circuit

Arduino lcd rtc circuit

Arduino lcd rtc circuit

 

 

ds3231 programming

int sw1=8;
int sw2=9;
int sw3=10;
int sw4=11;
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
#include <Wire.h>
const int DS1307 = 0x68; // Address of DS1307 see data sheets
const char* days[] =
{“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”};
const char* months[] =
//{“January”, “February”, “March”, “April”, “May”, “June”, “July”, “August”,”September”, “October”, “November”, “December”};
{“Jan”, “Feb”, “March”, “April”, “May”, “June”, “July”, “August”,”Septem”, “Octobe”, “Novem”, “Decemb”};
// Initializes all values:
byte second = 0;
byte minute = 0;
byte hour = 0;
byte weekday = 0;
byte monthday = 0;
byte month = 0;
byte year = 0;
void setup() {
  Wire.begin();
   lcd.begin(16, 2);
  pinMode(sw1, INPUT_PULLUP);
  pinMode(sw2, INPUT_PULLUP);
  pinMode(sw3, INPUT_PULLUP);
  pinMode(sw4, INPUT_PULLUP);
if(digitalRead(sw1) == LOW){
 delay(100);
  }
  Serial.begin(9600);
  delay(2000); // This delay allows the MCU to read the current date and time.
  Serial.print(“The current date and time is: “);
  printTime();
  Serial.println(“Please change to newline ending the settings on the lower right of the Serial Monitor”);
  Serial.println(“Would you like to set the date and time now? Y/N”);
 /*
  while (!Serial.available()) delay(10);
  if (Serial.read() == ‘y’ || Serial.read() == ‘Y’)
  // This set of functions allows the user to change the date and time
  {
    Serial.read();
    setTime();
    Serial.print(“The current date and time is now: “);
    printTime();
  }
 */
  Serial.println(“Thank you.”);
}
// Continuous function for converting bytes to decimals and vice versa
void loop() {
    printTime();
 delay(500);
chk();
}
void chk(){
  if(digitalRead(sw1) == LOW){
lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print(“enter year setting”);
 delay(500);
while(digitalRead(sw1) == LOW){delay(500); }
while(digitalRead(sw1) == HIGH){delay(500);
if(digitalRead(sw2) == LOW){
year++;
 lcd.setCursor(10, 1);
 lcd.print(year);
delay(300);
}
if(digitalRead(sw3) == LOW){
year–;lcd.setCursor(10, 1);
 lcd.print(year);delay(300);
}}
lcd.clear(); delay(300);
///*
lcd.clear(); lcd.setCursor(0, 0);
 lcd.print(“enter month”);delay(500);
while(digitalRead(sw1) == LOW){delay(500); }
while(digitalRead(sw1) == HIGH){delay(300);
if(digitalRead(sw2) == LOW){
lcd.setCursor(6, 1);
 lcd.print(”           “);
month++; lcd.setCursor(6, 1);
 lcd.print(months[month-1]);delay(100);
}
if(digitalRead(sw3) == LOW){
month–;
lcd.setCursor(6, 1);  lcd.print(”           “);
lcd.setCursor(6, 1);
 lcd.print(months[month-1]);delay(100);
}}
lcd.clear(); delay(300);
lcd.clear(); lcd.setCursor(0, 0);
 lcd.print(“enter date”);delay(500);
while(digitalRead(sw1) == LOW){delay(500); }
while(digitalRead(sw1) == HIGH){delay(300);
if(digitalRead(sw2) == LOW){
lcd.setCursor(6, 1);
 lcd.print(”           “);
monthday++; lcd.setCursor(6, 1);
 lcd.print(monthday);delay(100);
}
if(digitalRead(sw3) == LOW){
monthday–;
lcd.setCursor(6, 1);  lcd.print(”           “);
lcd.setCursor(6, 1);
 lcd.print(monthday);delay(100);
}}
lcd.clear(); lcd.setCursor(0, 0);
 lcd.print(“enter day”);delay(500);
while(digitalRead(sw1) == LOW){delay(500); }
while(digitalRead(sw1) == HIGH){delay(300);
if(digitalRead(sw2) == LOW){
lcd.setCursor(6, 1);
 lcd.print(”           “);
weekday++; lcd.setCursor(6, 1);
 lcd.print(days[weekday-1]);delay(100);
}
if(digitalRead(sw3) == LOW){
weekday–;
lcd.setCursor(6, 1);  lcd.print(”           “);
lcd.setCursor(6, 1);
 lcd.print(days[weekday-1]);delay(100);
}}
lcd.clear(); lcd.setCursor(0, 0);
 lcd.print(“enter hour”);delay(500);
while(digitalRead(sw1) == LOW){delay(500); }
while(digitalRead(sw1) == HIGH){delay(300);
if(digitalRead(sw2) == LOW){
lcd.setCursor(6, 1);
 lcd.print(”           “);
hour++; lcd.setCursor(6, 1);
 lcd.print(hour);delay(100);
}
if(digitalRead(sw3) == LOW){
hour–;
lcd.setCursor(6, 1);  lcd.print(”           “);
lcd.setCursor(6, 1);
 lcd.print(hour);delay(100);
}}
lcd.clear(); lcd.setCursor(0, 0);
 lcd.print(“enter minute”);delay(500);
while(digitalRead(sw1) == LOW){delay(500); }
while(digitalRead(sw1) == HIGH){delay(300);
if(digitalRead(sw2) == LOW){
lcd.setCursor(6, 1);
 lcd.print(”           “);
minute++; lcd.setCursor(6, 1);
 lcd.print(minute);delay(100);
}
if(digitalRead(sw3) == LOW){
minute–;
lcd.setCursor(6, 1);  lcd.print(”           “);
lcd.setCursor(6, 1);
 lcd.print(minute);delay(100);
}}
second=0;
//*/
  // The following codes transmits the data to the RTC
  Wire.beginTransmission(DS1307);
  Wire.write(byte(0));
  Wire.write(decToBcd(second));
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));
  Wire.write(decToBcd(weekday));
  Wire.write(decToBcd(monthday));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));
  Wire.write(byte(0));
  Wire.endTransmission();
  // Ends transmission of data
  }
  }
byte decToBcd(byte val) {
  return ((val/10*16) + (val%10));
}
byte bcdToDec(byte val) {
  return ((val/16*10) + (val%16));
}
// This set of codes is allows input of data
void setTime() {
  Serial.print(“Please enter the current year, 00-99. – “);
  year = readByte();
  Serial.println(year);
  Serial.print(“Please enter the current month, 1-12. – “);
  month = readByte();
  Serial.println(months[month-1]);
  Serial.print(“Please enter the current day of the month, 1-31. – “);
  monthday = readByte();
  Serial.println(monthday);
  Serial.println(“Please enter the current day of the week, 1-7.”);
  Serial.print(“1 Sun | 2 Mon | 3 Tues | 4 Weds | 5 Thu | 6 Fri | 7 Sat – “);
  weekday = readByte();
  Serial.println(days[weekday-1]);
  Serial.print(“Please enter the current hour in 24hr format, 0-23. – “);
  hour = readByte();
  Serial.println(hour);
  Serial.print(“Please enter the current minute, 0-59. – “);
  minute = readByte();
  Serial.println(minute);
  second = 0;
  Serial.println(“The data has been entered.”);
  // The following codes transmits the data to the RTC
  Wire.beginTransmission(DS1307);
  Wire.write(byte(0));
  Wire.write(decToBcd(second));
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));
  Wire.write(decToBcd(weekday));
  Wire.write(decToBcd(monthday));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));
  Wire.write(byte(0));
  Wire.endTransmission();
  // Ends transmission of data
}
byte readByte() {
  while (!Serial.available()) delay(10);
  byte reading = 0;
  byte incomingByte = Serial.read();
  while (incomingByte != ‘\n’) {
    if (incomingByte >= ‘0’ && incomingByte <= ‘9’)
      reading = reading * 10 + (incomingByte – ‘0’);
    else;
    incomingByte = Serial.read();
  }
  Serial.flush();
  return reading;
}
void printTime() {
  char buffer[3];
  const char* AMPM = 0;
  readTime();
  Serial.print(days[weekday-1]);
  Serial.print(” “);
  Serial.print(months[month-1]);
  Serial.print(” “);
  Serial.print(monthday);
  Serial.print(“, 20”);
  Serial.print(year);
  Serial.print(” “);
  if (hour > 12) {
    hour -= 12;
    AMPM = ” PM”;
  }
  else AMPM = ” AM”;
  Serial.print(hour);
  Serial.print(“y:”);
  sprintf(buffer, “%02d”, minute);
  Serial.print(buffer);
  Serial.println(AMPM);
  lcd.setCursor(0, 0);
  lcd.print(hour);
  lcd.print(“:”);
  lcd.print(buffer);
  lcd.print(AMPM);
 lcd.print(” “);
lcd.print(days[weekday-1]);
 lcd.setCursor(0, 1);
  lcd.print(monthday);
 lcd.print(months[month-1]);
 lcd.print(“20”);
  lcd.print(year);
}
void readTime() {
  Wire.beginTransmission(DS1307);
  Wire.write(byte(0));
  Wire.endTransmission();
  Wire.requestFrom(DS1307, 7);
  second = bcdToDec(Wire.read());
  minute = bcdToDec(Wire.read());
  hour = bcdToDec(Wire.read());
  weekday = bcdToDec(Wire.read());
  monthday = bcdToDec(Wire.read());
  month = bcdToDec(Wire.read());
  year = bcdToDec(Wire.read());
}

 

 

 

ds3231 arduino circuit pinout proteus library

CHECK THIS LINK Arduino Simulator 

 

13 Comments

  1. Wow, awesome blog format! How long have you ever been running a blog for?

    you made blogging look easy. The total look of
    your web site is magnificent, as neatly as the content material!
    You can see similar here sklep

  2. hеllo theгe and thank you for үour info –
    І hаᴠe dеfinitely picked ᥙp anytһing
    new from гight here. I dіd hߋwever expertise ѕeveral
    technical issues սsing this web site, ѕince Ι experienced tⲟ reload tһe site many timeѕ previous to I
    could gеt іt to load correctly. І had beеn wondering if үour web host іѕ
    OK? Nοt thаt I’m complaining, but sluggish loading instances tіmеs will often affect yoᥙr placement
    іn google and can damage yoᥙr һigh-quality
    score іf ads and marketing ᴡith Adwords. Αnyway Ι’m adding tһis RSS to my
    email and can ⅼooҝ oᥙt foг a lоt mоre of your respective fascinating content.
    Ensure that уou update tһіs again soon.

    my рage sbobetfix – Nestor

  3. F᧐r newest іnformation you hɑᴠe to visit the web and on web I found this web
    pаge аs a moѕt excellent website for ⅼatest updates.

    my blog post :: sbobetame

  4. It’s enormous tһat y᧐u are getting thougһts from
    thiѕ post aѕ well as from our dialogue mаde at this place.

    Feel free to visit mу web page :: sbobetdoom

  5. Ԍenerally Ӏ do not read post on blogs, however Ι ԝish to say that thіs wrіte-up
    very compelled mе to takе a looк at ɑnd do it! Your writing taste һas
    been surprised mе. Тhank үoս, ԛuite nice article.

    Take а look at mу webpage … ecunderen

  6. Нello it’ѕ me, I am also visiting this web site on a regular basis, this web ρage is іn fact pleasant
    ɑnd tһе visitors ɑrе reallү sharing pleasant thoᥙghts.

    Review my website: sbobok – http://sbobok.Com

  7. It’s remarkable in support of me to have
    a web page, which is beneficial in favor of my knowledge.
    thanks admin

    Take a look at my web page: vpn special

  8. Amazing! This blog looks just like my old one! It’s on a totally different topic but it has
    pretty much the same page layout and design. Great choice of colors!

    Here is my page :: vpn special code

  9. Hello! Do you know if they make any plugins to assist with SEO?
    I’m trying to get my website to rank for some targeted keywords but I’m not
    seeing very good results. If you know of any please share.
    Appreciate it! You can read similar text here: Auto Approve List

  10. Hi! Do you know if they make any plugins to assist with SEO?
    I’m trying to get my website to rank for some targeted keywords but I’m not seeing very
    good success. If you know of any please share.
    Many thanks! I saw similar blog here: AA List

  11. Simply desire to say your article is as astonishing. The clearness to your publish is just great and i can assume you’re knowledgeable in this subject.
    Well with your permission allow me to grasp your RSS feed to stay up to date with imminent post.
    Thank you 1,000,000 and please keep up the enjoyable work.

    My webpage … vpn special

  12. It’s an remarkable post in favor of all the web users; they
    will take benefit from it I am sure.

    My site; vpn special coupon code 2024

Leave a Reply

Your email address will not be published. Required fields are marked *