Saturday, 27 May 2017

How to set timing on RTC

Lets assume that you bought a RTC for irrigation or any other project and you wish to add the correct day and year, time as well . so here is how to do that

Thats the  RTC unit that you can buy for less than 2 $ from Ebay

  http://www.ebay.com/itm/Small-DS3231-AT24C32-IIC-High-Precision-Real-Time-Clock-Module-Arduino-/282248813661?hash=item41b7571c5d:g:Df8AAOSwHMJYIffZ

The wiring




Here is the code


#include "Wire.h"
#include <LiquidCrystal.h>
#define DS1307_ADDRESS 0x68
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int button_pin = 12;           // YOU ADD HIGH AT THIS PIN TO SETUP THE TIME
int buttonState = 0;

byte set_second = 0;                 //YOU ADD THE CURRENT DAY, TIME ETC
byte set_minute = 06;
byte set_hour = 18;
byte set_day = 7;
byte set_date = 27;
byte set_month = 5;
byte set_year = 17;

byte read_second;
byte read_minute;
byte read_hour;
byte read_day;
byte read_date;
byte read_month;
byte read_year;

byte bcd_to_Dec(byte val)
{
  return ( (val / 16 * 10) + (val % 16) );
}

byte dec_to_bcd(byte val)
{
  return ( (val / 10 * 16) + (val % 10) );
}

void setup() {
  Wire.begin();
  Serial.begin(9600);
  pinMode(button_pin, INPUT);
  buttonState = digitalRead(button_pin);

  if (buttonState == HIGH) {
    Wire.beginTransmission(DS1307_ADDRESS);
    Wire.write(0);
    Wire.write(dec_to_bcd(set_second));
    Wire.write(dec_to_bcd(set_minute));
    Wire.write(dec_to_bcd(set_hour));
    Wire.write(dec_to_bcd(set_day));
    Wire.write(dec_to_bcd(set_date));
    Wire.write(dec_to_bcd(set_month));
    Wire.write(dec_to_bcd(set_year));
    Wire.endTransmission();
  } else {}

 lcd.begin(16, 2);
 lcd.clear();

}

void loop() {
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(0); // set DS3231 register pointer to 00h
  Wire.endTransmission();
  Wire.requestFrom(DS1307_ADDRESS, 7);
  read_second = bcd_to_Dec(Wire.read());
  read_minute = bcd_to_Dec(Wire.read());
  read_hour = bcd_to_Dec(Wire.read());
  read_day = bcd_to_Dec(Wire.read());
  read_date = bcd_to_Dec(Wire.read());
  read_month = bcd_to_Dec(Wire.read());
  read_year = bcd_to_Dec(Wire.read());

  lcd.clear();
  Serial.println();

  lcd.setCursor(0, 0);
  if (read_hour < 10)
  {
    lcd.print("0");
    Serial.print ("0");
  }
  lcd.print(read_hour);
  Serial.print (read_hour);
  lcd.print(":");
  Serial.print(":");

  if (read_minute < 10)
  {
    lcd.print("0");
    Serial.print ("0");
  }
  lcd.print(read_minute);
  Serial.print (read_minute);
  lcd.print(":");
  Serial.print(":");


  if (read_second < 10)
  {
    lcd.print("0");
    Serial.print ("0");
  }
  lcd.print(read_second);
  Serial.print (read_second);
  Serial.println();

if (  read_day == 1)
  {
    lcd.print("Sun");
    Serial.print ("Sun");
  }
if (  read_day == 2)
  {
    lcd.print("Mon");
    Serial.print ("Mon");
  }

if (  read_day == 3)
  {
    lcd.print("Tue");
    Serial.print ("Tue");

  }

if (  read_day == 4)
  {
    lcd.print("Wed");
    Serial.print ("Wed");
  }
if (  read_day == 5)
  {
    lcd.print("Thu");
    Serial.print ("Thu");
  }

if (  read_day == 6)
  {
    lcd.print("Fri");
    Serial.print ("Fri");
  }

if (  read_day == 7)
  {
    lcd.print("Sat");
    Serial.print ("Sat");

  }
   
    Serial.println();
  lcd.setCursor(0, 1);
  lcd.print(read_date);
  Serial.print (read_date);
  lcd.print("/");
  Serial.print("/");
  lcd.print(read_month);
  Serial.print (read_month);
  lcd.print("/");
  Serial.print("/");
  lcd.print(read_year);
  Serial.print (read_year);



  delay(1000);
}