NXP JN516X (TWELITE) をプログラミングする(ADC)

ADCは簡単だと思っていたがかなり苦戦してしまった。SDKに問題があるらしく機能の組み合わせ方で誤動作してしまうのだ。

最初に試したのは、ADC with DMA というDMA転送機能であるがマルチソース機能が便利かなと思って試して見たら見事にドツボにハマる。とにかく不安定というかソースを複数組み合わると変換結果がおかしくなる。暫く悪戦苦闘してみたがラチがあかないのでこの機能は問題外として綺麗さっぱり忘れることに。DMA転送を使ったシンプルな連続サンプリングも便利かなとは思ったけど肝心のADCが遅いしなと考えたら必要ないかもと思ってしまった。

さらに平均化処理のためのマルチサンプリング機能や連続変換モードも変換結果がおかしかったり永久に変換完了にならなかったりする。マルチソースやマルチサンプリング、連続変換機能はソフトウェア実装していてそのロジックがバグバグしてるんだろうと思う。

ということで普通にシンプルなシングルショット変換しか使えないということがわかったがマルチソースやマルチサンプリング機能はないよりもあったほうが良いと思うので独自実装してみた。特にマルチソースに関してはソース毎に全ての変換パラメタを変更できるようにしたので凄く便利に使えるはず。一つだけ気になるのは内部温度センサーだ。安定はしているがデータシートがウソっぽく見えるほどの誤差というか個体差によるバラツキが激しいようなので内部温度センサーは使えないと思った方がいいだろう。

ちなみに、変換完了にならなかった経験から変換完了を判断するためのbAHI_AdcPoll()は怪しすぎて使う気になれなかったのでデータシートから変換に必要なクロック数を計算しその時間経過したら変換完了としている。変換完了の判定処理まで自作することになるなんて初めての経験だ。(-_-;)

変換時間は最速で9.5usなので割り込みを使って連続変換すると他のコードが動かなくなる可能性があることから割り込みは使っていない。

あと、マルチソース機能はバックグラウンド処理(yield)を利用して連続変換していることに注意しよう。

【マルチソースのサンプル】

【ライブラリ】

次回は、Comparatorの予定。

【関連投稿】
NXP JN516X (TWELITE) をプログラミングする(開発環境の構築)
NXP JN516X (TWELITE) をプログラミングする(メイン・ルーチン)
NXP JN516X (TWELITE) をプログラミングする(TICKTIMER)
NXP JN516X (TWELITE) をプログラミングする(UART)
NXP JN516X (TWELITE) をプログラミングする(SYSTEM)
NXP JN516X (TWELITE) をプログラミングする(GPIO)
NXP JN516X (TWELITE) をプログラミングする(TIMER)
NXP JN516X (TWELITE) をプログラミングする(ALARM)
NXP JN516X (TWELITE) をプログラミングする(WAKETIMER)
NXP JN516X (TWELITE) をプログラミングする(WATCHDOG)
NXP JN516X (TWELITE) をプログラミングする(I2C)
NXP JN516X (TWELITE) をプログラミングする(SPI)
NXP JN516X (TWELITE) をプログラミングする(ADC)
NXP JN516X (TWELITE) をプログラミングする(COMPARATOR)
NXP JN516X (TWELITE) をプログラミングする(CLOCK)
NXP JN516X (TWELITE) をプログラミングする(BROWNOUT)
NXP JN516X (TWELITE) をプログラミングする(PULSCOUNTER)
NXP JN516X (TWELITE) をプログラミングする(INFRARED)
NXP JN516X (TWELITE) をプログラミングする(RANDOM-GENERATOR)
NXP JN516X (TWELITE) をプログラミングする(FLASH)
NXP JN516X (TWELITE) をプログラミングする(EEPROM)
NXP JN516X (TWELITE) をプログラミングする(WPAN)
NXP JN516X (TWELITE) をプログラミングする(Eclipse-CDT+MWSTAGE)
NXP JN516X (TWELITE) をプログラミングする(乗算と除算)
NXP JN516X (TWELITE) をプログラミングする(マルチタスク)
NXP JN516X (TWELITE) をプログラミングする(フラッシュ・プログラマー)
NXP JN516X (TWELITE) をプログラミングする(OTA UPDATE)
NXP JN516X (TWELITE) をプログラミングする(TWELITE CUE/MC3630)
NXP JN516X (TWELITE) をプログラミングする(LED)
NXP JN516X (TWELITE) をプログラミングする(AES)
NXP JN516X (TWELITE) をプログラミングする(Downloads)