NXP'nin PCF85063A RTC entegresini kullanıyorum. Mikroişlemcim ise M032SG8AE. 10 gündür çalışıyordu elektronik kartım. Bugün baktığımda RTC'den okuduğum saat bilgisinin gerçek zamana göre 3 dakika ileride olduğunu gördüm. Bu benim için sıkıntı çıkaracak bir durum. Datasheeti okuduğumda offset registerının varlığını gördüm. Doğruluğu ayarlamak için kullanabileceğim yazıyor. Fakat daha önce hiç yapmadım. O yüzden şuan doğruluğu ayarlamayı tam olarak nasıl yapacağımı anlamaya çalışıyorum. Datasheette 8.2.3.3. başlıkta offset calibration workflow anlatılmış.
Ben de bu workflow'u baz alarak bir fonksiyon yazdım.
Bu da offset registerı.
Merak ettiğim öncelikle doğru bir yolda mı gidiyorum ? Bu fonksiyonu nerede nasıl kullanmam gerektiğini de tam anlamadım çünkü elektronik kartıma gerçek zaman bilgisi bir yerden gelmeyecek sadece RTC entegrem var. Her türlü yoruma ve tavsiyeye açığım.
Ben de bu workflow'u baz alarak bir fonksiyon yazdım.
C:
#define CRYSTAL_VALUE 32768.48
void offset_calibration()
{
uint8_t offsetValue;
float frequency,deviationPpm,period,differenceToIdealPeriod;
frequency = CRYSTAL_VALUE;
period = (1 / CRYSTAL_VALUE);
differenceToIdealPeriod = (1 / 32768) - period;
deviationPpm = (1000000 * differenceToIdealPeriod) / period;
offsetValue = I2C_ReadByteOneReg(I2C0,I2CADDR,RTC_OFFSET);
if((offsetValue & 0x80))
{
offsetValue = deviationPpm / 4.34;
}
else if((offsetValue & 0x80) == 0)
{
offsetValue = deviationPpm / 4.069;
}
I2C_WriteByteOneReg(I2C0,I2CADDR,RTC_OFFSET,offsetValue);
}
Bu da offset registerı.
Merak ettiğim öncelikle doğru bir yolda mı gidiyorum ? Bu fonksiyonu nerede nasıl kullanmam gerektiğini de tam anlamadım çünkü elektronik kartıma gerçek zaman bilgisi bir yerden gelmeyecek sadece RTC entegrem var. Her türlü yoruma ve tavsiyeye açığım.