Electoday 2025

ไมโครคอนโทรลเลอร์ => Microchip PIC => Topic started by: zombies on February 03, 2017, 02:07:49 AM

Title: เวลาของ RTC DS1307 ไม่ตรงต้องทำยังไงค่ะ
Post by: zombies on February 03, 2017, 02:07:49 AM
อันนี้เป็นโค้ด DS1307 ไม่รู้เขียนผิดในส่วนไหน เวลามันไม่ตรงกับเวลาปัจจุบันค่ะ


void   DS1307Int()
{
   send_ds1307(0x07,0x91);
   read_sec();
   read_min();
   read_hour();
   read_date();
   read_mount();
   read_year();
}

void   send_ds1307(int ad,int data)
{
   
   i2c_start();
   i2c_write(0xD0);
   i2c_write(ad);
   i2c_write(data);
   i2c_stop();

}

int    read_ds1307(int ad)
{
   int   x;
   
   i2c_start();
   i2c_write(0xD0);
   i2c_write(ad);
   i2c_start();
   i2c_write(0xD1);
   x=i2c_read(0);
   i2c_stop();
   return(x);
}

void   read_sec()
{
   int   x;
      x=read_ds1307(0x00);
      DS_SEC=(x/0x10)*10;
      DS_SEC+=(x%0x10);
     
}

void   read_min()
{
   int   x;
      x=read_ds1307(0x01);
      DS_MIN=(x/0x10)*10;
      DS_MIN+=(x%0x10);
     
}
void   read_hour()
{
   int   x;
      x=read_ds1307(0x02);
      DS_HOUR=(x/0x10)*10;
      DS_HOUR+=(x%0x10);
}
void   read_day()
{
   int   x;
      x=read_ds1307(0x03);
      DS_DAY=x;
}
void   read_date()
{
   int   x;
      x=read_ds1307(0x04);
      DS_DATE=(x/0x10)*10;
      DS_DATE+=(x%0x10);
}
void   read_mount()
{
   int   x;
      x=read_ds1307(0x05);
      DS_MOUNT=(x/0x10)*10;
      DS_MOUNT+=(x%0x10);
}
void   read_year()
{
   int   x;
      x=read_ds1307(0x06);
      DS_YEAR=(x/0x10)*10;
      DS_YEAR+=(x%0x10);//+2000;
      TH_YEAR=DS_YEAR+2543;
}
void   Ds1307_read()
{
   read_day();
   read_sec();
   read_min();
   read_hour();
   read_date();
   read_mount();
   read_year();
}

void   save_day(int x)
{
   send_ds1307(0x03,x);
}
void   save_date(int x)
{
   int y;
   
   y=((x/10)<<4);
   y|=x%10;
   send_ds1307(0x04,y);
}
void   save_mount(int x)
{
   int y;
   
   y=((x/10)<<4);
   y|=x%10;
   send_ds1307(0x05,y);
}
void   save_year(int x)
{
   int y;
   
   y=((x/10)<<4);
   y|=x%10;
   send_ds1307(0x06,y);
}
void   save_sec(int x)
{
   int y;
   
   y=((x/10)<<4);
   y|=x%10;
   send_ds1307(0x00,y);
}

void   save_min(int x)
{
   int y;
   
   y=((x/10)<<4);
   y|=x%10;
   send_ds1307(0x01,y);
}
void   save_hour(int x)
{
   int y;
   
   y=((x/10)<<4);
   y|=x%10;
   send_ds1307(0x02,y);
}

void  set_time_ds(int   hh,int mm,int ss)
{
   save_hour(hh);
   save_min(mm);
   save_sec(ss);
}
void  set_date_ds(int   dd,int mm,int yy)
{
   save_date(dd);
   save_mount(mm);
   save_year(yy);
}

//31  // 1 3 5 7 8 10 12
//30 // 4 6 9 11
Title: Re: เวลาของ RTC DS1307 ไม่ตรงต้องทำยังไงค่ะ
Post by: JENG on February 03, 2017, 09:47:48 AM
ตั้งใหม่ซิคับ ใช้สอง function นี้ เพื่อเขียนเวลาปัจจุบันให้ RTC


void  set_time_ds(int   hh,int mm,int ss)
{
   save_hour(hh);
   save_min(mm);
   save_sec(ss);
}
void  set_date_ds(int   dd,int mm,int yy)
{
   save_date(dd);
   save_mount(mm);
   save_year(yy);
}
Title: Re: เวลาของ RTC DS1307 ไม่ตรงต้องทำยังไงค่ะ
Post by: CruzDoyle on June 05, 2018, 12:01:15 PM
แจ๋วเลยครับ ถามความรู้เพิ่มเติมครับ ถ้าเป็นเวลาประเทศอื่นทำยังไงหรอครับ
Title: Re: เวลาของ RTC DS1307 ไม่ตรงต้องทำยังไงค่ะ
Post by: mcusysdev on June 10, 2018, 05:09:11 PM
Quote from: CruzDoyle on June 05, 2018, 12:01:15 PM
แจ๋วเลยครับ ถามความรู้เพิ่มเติมครับ ถ้าเป็นเวลาประเทศอื่นทำยังไงหรอครับ

บวก UTC time เข้าไปครับ
Title: Re: เวลาของ RTC DS1307 ไม่ตรงต้องทำยังไงค่ะ
Post by: Zinnuouh1 on September 06, 2018, 02:51:20 PM
เกมส์ผ่อนคลายแก้เหงา sbobet  (http://sbobet.richbet99.com/)หรือ แทงบอลออนไลน์  (http://sbobet.richbet99.com/)