NXP'nin PCF85063A RTC entegresini kullanacağım. İnternette arattığımda Arduino için yazılmış bir kütüphane yazıldığını gördüm. Ben Nuvoton'un M031 işlemcisini kullanıyorum. Bu kütüphaneyi adım adım Nuvoton tarafına dönüştürmeye çalışıyorum. Fakat bir nokta kafama takıldı.
Özellikle read işlemleri için entegrenin datasheetinin 8.4'ü kısmına bakılması gerektiğini söylüyor. Arduino için zamanı okumak adına şöyle bir kod yazmış arkadaş.
Daha önce Arduino ile hiç uğraşmadım malesef. O yüzden birebir bu kodu doğru mu kullandım emin olamadım. Benim kodum şu şekilde.
Öncelikle yazdığım kod doğru mudur?
Datasheet 8.4 dediğim kısım okuma yöntemi ile ilgili şu şekilde:
Özellikle read işlemleri için entegrenin datasheetinin 8.4'ü kısmına bakılması gerektiğini söylüyor. Arduino için zamanı okumak adına şöyle bir kod yazmış arkadaş.
Kod:
void PCF85063A::readTime()
{
Wire.beginTransmission(I2C_ADDR);
Wire.write(RTC_SECOND_ADDR); // datasheet 8.4.
Wire.endTransmission();
Wire.requestFrom(I2C_ADDR, 7);
while( Wire.available() )
{
second = bcdToDec( Wire.read() & 0x7F ); // ignore bit 7
minute = bcdToDec( Wire.read() & 0x7F );
hour = bcdToDec( Wire.read() & 0x3F ); // ignore bits 7 & 6
day = bcdToDec( Wire.read() & 0x3F );
weekday = bcdToDec( Wire.read() & 0x07); // ignore bits 7,6,5,4 & 3
month = bcdToDec( Wire.read() & 0x1F); // ignore bits 7,6 & 5
year = bcdToDec( Wire.read()) + 1970;
}
}
Daha önce Arduino ile hiç uğraşmadım malesef. O yüzden birebir bu kodu doğru mu kullandım emin olamadım. Benim kodum şu şekilde.
Kod:
void PCF85063A::read_time()
{
uint8_t readData[7];
I2C_ReadMultiBytesOneReg(I2C0,I2CADDR,RTC_SECOND_ADDR,readData,1);
second = bcdToDec(readData[0]);
minute = bcdToDec(readData[1]);
hour = bcdToDec(readData[2]);
day = bcdToDec(readData[3]);
weekday = bcdToDec(readData[4]);
month = bcdToDec(readData[5]);
year = bcdToDec(readData[6]);
}
Öncelikle yazdığım kod doğru mudur?
Datasheet 8.4 dediğim kısım okuma yöntemi ile ilgili şu şekilde: