![]()

RX8900は高精度 DXCXOを搭載して 月差を10秒位になっている

![]()
プログラム
AVRマイコンのI2C通信設定を行う
#define RTC_ADDR_WRITE 0x64;
#define RTC_ADDR_READ 0X65;
/---------------------------------------------
// SCL=10M/(16+ 2*100*1)=50kHz
TWBR=47; //92
TWSR=0x00; //ビット速度値
TWCR=0b00000100; // TWI SCL/SDA で使用する
//---------------------
読み取りプログラム下記になる
//---- READ TIME -------------
void READ_TIME(void)
{
int i;
RTC_RS();
for(i=0;i<12;i++){
RTC_RE();
rtc_rdat[i]=ans;
}
RTC_STOP();
dsec=rtc_rdat[0] & 0x7F;
dmin=rtc_rdat[1] & 0x7F;
dhour=rtc_rdat[2] & 0x3F;
dday=rtc_rdat[4] & 0x3F;
dweek=rtc_rdat[3] & 0x07;
dmonth=rtc_rdat[5]& 0x1F;
dyear=rtc_rdat[6]& 0xFF;
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
//----------リード初期値-------------------
void RTC_RS(void)
{
/* 開始条件送出*/
TWCR = (1<<TWINT)|(1<<TWSTA) |(1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
TWDR=RTC_ADDR_WRITE; //64
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
TWDR=0x00;
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
TWCR = (1<<TWINT)|(1<<TWSTA) |(1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
TWDR=RTC_ADDR_READ; //65
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
}
ーーーーーーーーーーーーー
読みだす前の アドレス設定である
その後は 連続して読みだす
//-----------リード連続----------
void RTC_RE(void)
{
/*DATA データ読込 */
TWCR = (1<<TWINT) | (1<<TWEA) | (1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
ans=TWDR; //データを取得
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
![]()