Top > PSoC > DELSIG8

PSoC/DELSIG8

AD変換割り込みタイミング計測。 割り込み処理の中でトグルしてみた。 AD入力クロックは2MHz。

DELSIG8_AD割り込み_CLK2MHz時.PNG
約228us間隔(4.39kHz)で割り込みが発生していることがわかった。これは、データシート上あっているのか?

ADサンプリング周波数は次式による。

SR=DataClock÷(4×デシメーションレート)

で、デシメーションレートは DELSIGは64固定となっていることから SR=2MHz÷(4×64)=7812.5=7.8125kHz=128usだぞ。

あれー。まさかーオシロのソフトが?とおもってアナログオシロでみてみたけれど、これが現実。 どうしてこの差がでてきたんだ?

(^^) でクロック辺りの設定をみなおした。

VC2をクロックとして使っている。

SysClock=24MHz
VC1=SysClock÷2=12MHz
VC2=VC1/6=2MHz

だよねぇ。あってそうな感じもするんだけどなぁ。 アナログモジュール、デジタルモジュールのどちらにも同じVC2が接続されてるしなぁ。

遅いクロックでやってみようかぁ。VC3のSourceはSysClock/1で÷26の設定だから、24MHz÷26=923.07kHz=1.083usになるはずだなぁ。

サンプルソフトで割り込み周期を測定してみた。

  • ベースソフトは DELSIG8NPTEST PSoCマイコントレーニングに付属しているものだ。
  • これに割り込み関数の中に 信号をトグルさせる処理を追加。 &ref(): File not found: "DELSIG8_AD割り込み_delsig8nptest.PNG" at page "PSoC/DELSIG8";
    これをみると、770us間隔で割り込みが入っている。

理想的には このサンプルプログラムは以下のように動作しているはず。 VC2をクロックとして使っている。

SysClock=24MHz
VC1=SysClock÷8=3MHz
VC2=VC1/9=333.333kHz

SR=333.333kHz÷(4×64)=1302.08=1.302kHz=768usだね。

これはぴったりだぁ。

いたずらその1

サンプルソフトのVCクロック設定を2MHzになるようにしてみた。 &ref(): File not found: "DELSIG8_AD割り込み_delsig8nptest_CLK2MHz.PNG" at page "PSoC/DELSIG8";
128us間隔で割り込みが入っている。

ということは・・・ サンプリングクロックの考え方はあっているんだなぁ。 接続がまずいのかなぁ。

アナログブロックとデジタルブロックの接続みなおし

delsig8nptest_DeviceEditor.PNG
ひえー^^;; ってこれを見てもよくわかんなーーい。しかしずっと疑問だったんだが、カウンタの出力がアナログブロックに入っていて、でも使われていない。んー。これが原因か?
delsig8nptest_DeviceEditor_01.PNG
疑問なのは、ここ。DBB00の入力が上から入ってきてる。これがカウンタの出力なんだが、これがアナログモジュールにつながってない。んー。これは何かありそう。

んじゃ、またまたいたずら。

DBB00につながっている配線を、DBB01にしてみた。ここで影響がでるならば、使われているということだ。ちなみに、DBB01は何もモジュールとしてマッピングされていない。
=>結果は、同じ割り込みが確認された。これは関係ないのか?

じゃぁなによ?と思ってみたら、グローバルリソースがすこし違う。~

項目サンプルうまく行っていない自分のProj
CPU ClockSysClock/1SysClock/8

ほんじゃぁサンプルのCPU ClockをSysClock/8にしてみるべ。 &ref(): File not found: "DELSIG8_AD割り込み_delsig8nptest_CLK2MHz_CPUCLKp8.PNG" at page "PSoC/DELSIG8";
変化あり! 228us間隔になった。さらに、割り込みが安定しなくなった^^;;

そっかぁ、CPU_Clockの設定の影響もでてくるのかぁ。まぁ確かになぁ。 じゃぁサンプリング周波数はどうなるんだ?

ADサンプリング周波数は次式による。

SR=DataClock÷(4×デシメーションレート)

って書いてあった。 CPU_Clock=SysClock/1だと この式で当てはまる。 CPU_Clock=SysClock/8だと この式で当てはまらない。

どのぐらい当てはまらないかというと、 SysClock/1 = 128us SysClock/8 = 228us 単純に 8倍変わっているわけでは無さそう。

データシートを確認してみた。

ん?きになる記述を発見。
delsig8_DataSheet.PNG

  • ADC割り込みルーチンは『190 CPU Cycle必要』で、
  • 自分の場合はCPU_Clockの設定がSysClock/8だから 単純に言うと 190 CPU Cycle×8の時間がかかるっていうことかな。 190Clock の時は 128us 1520Clock の時は 228us /8すると 1.78倍かぁ。 この数字はどういう風にかんがえるんだろー。

DataClock = 2MHzにしている。 DataClock = SampleRate×256 なので、SampleRate = 7812.5 CPUOverhead = 190×SampleRate/CPU_CLOCK = 0.743×DataClock/CPUClock = 190×7812.5/(24MHz/8) = 190×7812.5/3MHz = 49.4%

でも納得いかないなぁ。CPUClockがかわったとしても、割り込みに要する時間はながくなったとしても、A/Dのサンプリング周波数がかわるはずないよねぇ?? ん?かわっちゃうの??

とりあえず、0.56倍(4.39kHz/7.8125kHz)になるとおもって、コーディングするか。

原因は結局!

この後、やっぱり気になって調査を続行した。やっとわかったよー^^;;
高速なクロック(今回は2MHz)を入れている。で、割り込み処理の中にちょっとした処理を入れると、その割り込み処理中にさらに次のデータがきちゃって、多重割り込み状態で、データを取りきれて居なかった。
DELSIG8のクロック源として、今回はそんなに高いレートを求めているわけではないので、クロック生成Counterモジュールを追加。そこでclockを生成し、DELSIG8のアナログモジュールとデジタルモジュールに供給するようにした。そうしたところ、CPU_Clock=SysClock/1でも、SysClock/8でも、期待通りに割り込みが発生するようになった。
一言でいうならば、私はかわいいPSoCちゃんに、『AD取り込みはかなり高速にやってちょ。データを上げてきてもらった後に、私が処理をいれてるから呼んでね。』とお願いしている割には、『CPU_Clock=SysClock/8という、脳みそを8分の1で動かしていたから、まにあわなくなったー。』ということになる。んー おばか^^;;; あはははは^^@@


どぞー!


Reload     Front page List of pages Search Recent changes Backup   Help   RSS of recent changes
Last-modified: Tue, 27 Dec 2016 19:33:18 JST (2671d)