2020年7月30日木曜日

おしゃべり時計withUSB開発日誌(5)、RTCC_キャリブレーションコーディング

今まできちんと時間計測の部分をコーディングしてこなかったので、おしゃべり時計とはいっても時計の機能がキチンとしていなかった。

しかしながら、PIC32MX250F128BはRTCC(Real Time Clock and Calendar)のモジュールが付いているので、MCCでこいつを有効にすれば動き始める。
最近のMCCの設定は、おしゃれで簡単にRTCCの設定が行える。


それで、このRTCCのモジュールには、キャリブレーション機能が付いていて、月差±0.66秒までRTCCの進み具合を調整できるのだ。これは使わない手はない。 


しかしながら、このキャリブレーションはRTCCONレジスタのCALビットに値を格納するのだが、これが 10bitsのサイン付きインテジャーで値は+511~ー512を設定する。マイナス側は補数表記である。



この設定にハタと困った。 10bits の値についてどうやって足し引きしたらよいのか?
c言語では、charは8bits, shortは16bits, longは32bitsである。 10bitsの型なんて無い。
色々と悩んだすえ、shortの変数に6bitsシフトして入れて、足し引きしたのち、6bitsシフト戻してRTCCONbits.CAL にセットする事にした。


//*****************************************************************
// add RTCC Drift Calibration bits
//*****************************************************************
void vRTCC_CalAdd(
short value
)
{
    short cal;

    cal = RTCCONbits.CAL << 6;
    cal = cal + (value << 6);
    
    RTCCONbits.CAL = cal >> 6;
}

//*****************************************************************
// subtract RTCC Drift Calibration bits
//*****************************************************************
void vRTCC_CalSub(
short value
)
{
    short cal;

    cal = RTCCONbits.CAL << 6;
    cal = cal - (value << 6);
    
    RTCCONbits.CAL = cal >> 6;
}

20200730(+1.0h)




0 件のコメント:

コメントを投稿

KT0913 FMラジオの作成(8) 出来上がったPCB基板にミスあり。

  FusionPCB から基板がとどきました。20240121. 1月11日に発注したので10日で出来上がって届きました。 早速組み立てましたがが、イヤホンジャックのフットプリントが裏返っており、痛恨のミス。。。 しかしながら、他にも問題が無いか一通り組み立ててチェックしました...