2016年5月15日日曜日

PSoC 4 Prototyping Kitを外部クロックで動かす。

動作クロックの精度を上げるために、PSoC 4 Prototyping Kitを外部クロックで動作させてみた。

ATMega(88V、 328P)やPSoC 5LP Prototyping Kitは水晶振動子を外付けすればよかったが、PSoC4はクロック信号を与えないといけないようだ。P0_6にクロックを入力する。

24MHzの水晶発信器を使う


ブレッドボード図


Top Design

TopDesignに配置したコンポーネントはPSoC 4 Prototyping Kitのお約束のBootloadble(参考「PSoC 4 Pioneer Kit用のProjectをPSoC 4 Prototyping Kitで使う方法 (PSoC Creator 3.3)」)とCPUの駆動クロックのSYSCLKを出力するPINだ。

PSoC 4ではクロックを直接Output Pinに繋げないのでこうしている(参考「PSoC4のClockとTimerを調べる

クロックの設定は*.cydwrのクロック・タブで以下のように設定。


EXTCLKが24MHzでそのままSYSCLKにつながる。

PSoC4の場合PSoC 5LPとは違ってPLLで逓倍して外部クロックより高い周波数を使う、ということはできないようだ。

「PLL1_Sel」とかPLLが使えそうに思えるがよくわからない。そもそもPLLが何かということもよくわかっていない(^q^;

main.c

#include <project.h>

int main()
{
    CyGlobalIntEnable; /* Enable global interrupts. */

    /* Place your initialization/startup code here (e.g. MyInst_Start()) */

    for(;;)
    {
        /* Place your application code here. */
        // タン・タ・タンのLチカ
        Pin_LED_Write(1u);
        CyDelay(100);
        Pin_LED_Write(0u);
        CyDelay(500);
        Pin_LED_Write(1u);
        CyDelay(100);
        Pin_LED_Write(0u);
        CyDelay(100);
        Pin_LED_Write(1u);
        CyDelay(100);
        Pin_LED_Write(0u);
        CyDelay(500);
    }
}


PSoC4 Prototyping KitはプログラミングするときにUserボタンを押しながらUSBにつないで、青色LEDがチカチカすると「書き込みモードでつながりました」という合図になるので、普通に書き込んだプログラムが動作している状態を表すために「タン・タ・タン」というタイミングで青色LEDがチカチカするようにしてみた。

どっちのモードでつながってるかはまあまあわかりやすいと思う(^q^;

クロック出力(PSoC4の内蔵クロックで動作させた場合)



ch1:24MHzの水晶発信器の出力 ch2:PSoC4のSYSCLK

クロック出力(水晶発信器のクロックで動作させた場合)



ch1:24MHzの水晶発信器の出力 ch2:PSoC4のSYSCLK

外部クリスタルをEXTCLKとして使うと、きっちり同期して24MHzで動作しているようだ。

12MHzの水晶とロジックICを使って発振回路を作ってみる


74HCU04(アンバッファ・インバータ)と水晶振動子を使って発振回路を作ってPSoC4に入力してみた

ブレッドボード図


水晶からGNDに落としているCは22pF、水晶と並列に入れているRは1MΩにした。(ブレッドボード図のカラーコードは直し忘れました)

クロックの出力

ch1:12MHzの水晶回路の出力 ch2:PSoC4のSYSCLK

PSoCのプログラムは変更していないが、12MHzで動作しているようだ。


48MHzで動作させる


PSoC4の最大駆動周波数は48MHzなので48MHzの水晶発振器に差し替えればすぐに動くかと思ったが、そうでもなかった。

1) ブレッドボードからクロック源(水晶発振器等)を取り去って、PSoC4を内蔵クロックで48MHz駆動にするように設定して動作確認。

2) 外部クロックの48MHzを使うように設定してプログラム。

3) USBを引っこ抜く

4) 48MHzの発振器をブレッドボード上に設置してPSoC4のP0_6に接続

5) 全体に電源を供給

という手順でやっと動いてくれた。



ch1:P0_6(ext_clkの入力) ch2:P0_0(SYSCLKの出力)


メモ:


DIP28PinのARM Cortex-M0のLPCが秋月で値上がりしてディスコンになるかもしれないという情報。

mbedは使えないけどPSoC4 Prototyping KitもCortex-M0で、まだ600円@秋月。

水晶発振器を間違えて上下逆刺ししたらめちゃくちゃ発熱した(@@; しばらく触れないぐらい。生きてただけありがたい