PSoCをはじめよう

2005/01/01? 〜
K.I

Index


概要


[top]

PSoCライタ

インベンションボード上の CY8C27443を使った方が簡単で良いんだけど、今度は手持ちのCY8C27443を単体で動かしたいので、PSoCライタを用意しよう。

→10Pのフラットケーブルの片側だけ使って接続する。

書込み方法

インベンションボードを書込み機として使う。

書き込みに使用するport1-0とport1-1を使わないようにすれば、ライタを繋いだままでデバック出来るから凄く便利だ。

もちろん、InventionボードにはPSoCが載ってるから、Externalをチェックしなければ、そのまま書込み可能だ。


1実は以前はこれを知らなかったので、いちいちUSBケーブル抜いてました。。。

[top]

実験基板について

→訂正:本当は水晶の両端に付いてる容量はVcc側に接続します。

インベンションボードだけでも大丈夫

こう書くと、もしかすると実験基板は絶対必要と思っちゃうといけないので、一応書いておきます。


[top]

サンプルを動かしてみよう

作成した実験基板で、はじめてのPSoCのサンプルを、ざっと試してみた。

LED点滅

この章はデザイナの使いかたの説明なので、

すんなり動きました。実験基板の配線は大丈夫だな。

LED正弦波ドライブ

この章は、BPFの設計が肝みたい。 これは、PSoC Designerと一緒にインストールされるExcelファイルで計算出来る。

GPIO

この章はデジタル入出力と割り込みの説明。以前は結構苦労したけど。

温度計

テストオシレータ

感想

一気に5章までのサンプルを作ってみて、 あらためてPSoCの能力と使いやすさを感じることが出来た。

欲を言えば、機能別に説明されたリファレンス的な本も欲しいかも。



[top]

ロータリーエンコーダ

サンプルだけ動かしていてもつまらないので、いろいろやってみよう。さて、何をしようかなぁ。

やってみましたが、どちらに回しても全然動かない。これは、まぁしょうが無いよね。


おかしなロータリーエンコーダ

実はロータリーエンコーダは、最初うまく動作しなかった。つまらない失敗だったけど反省のために、記録。。。

あぁ、勘違い

いろんな方法で、やってみたんだけど、やっぱり安定動作にならない。この際、ディレイでも付けるかと思ったけど、秋月のキットではちゃんと動作してるんだよなぁ。どうしてるんだろ。

タイマ割込みで

テストオシレータは、元々タイマ割込みでスイッチを読み込んでいる。

割り込みなしで

I/Oの割り込みで動かす

set_freq内で、LCD表示せずmainで表示するようにして3、以下のようにI/O割り込みで動かしてみる。

        #pragma interrupt_handler PSoC_GPIO_ISR()       →boot.asmにも割込みベクタが必要

        void PSoC_GPIO_ISR()
        {
                unsigned char cdat;

                cdat = PRT0DR;

                if ((~cdat & SW_DOWN) && (cdat & SW_UP)) {
                  cfreq = (cfreq-1+ NUM_FREQ) % NUM_FREQ;        // count down!
                }
                if ((~cdat & SW_UP) && (cdat & SW_DOWN)) {
                  cfreq = (cfreq+1) % NUM_FREQ;                  // count up!
                }
                set_freq(cfreq);
        }

                :
                略
                :
        INT_MSK0=INT_MSK0_GPIO;        // I/O割込み許可

結局、元々のオリジナルのタイマ割込みが一番良さそう。



2if文以外は、オリジナルのままです。カウントUPDOWNのやり方は自分流に書き換えたけど。まぁ意味なし。
3LCD表示は時間が掛かるから、速く回した時に、追い付かなくなる。

[top]

外部水晶発振

PICだと、 最初にコンフィグレーションレジスタに発振回路の選択を書き込むだけなので簡単に考えていた。

英文マニュアルを読んで、自分なりに理解したこと。(間違ってるかも)

ECOの起動手順

ECOの起動手順としては、

  1. 起動時は、ILOで動作を開始する。
  2. ECO_EXビットをセットして、外部に水晶が接続されていることを指定。
  3. OSC_CR0の Sleep時間の設定
  4. OSC_CR0の 32kSelectビットをセット
  5. 3で設定したスリープ時間で、 外部水晶発振回路が動作を開始して切り替わる。スリープの間は、ILOも動き続ける。
  6. PLLモードの場合は、IMOがロックするまで待つようにする。

水晶の接続

動かしてみよう

また、テストオシレータの回路で、試してみることにした。

PSoCデザイナで設定すれば、 そんなことしなくても良いみたい。

Global Resource
32K_Select External
PLL_Mode Ext Lock

X'talの接続されている端子は以下のように設定。

Port Select Drive
P1[0]XtalOutHigh Z
P1[1]XtalIn High Z

また何か間違ってるのかなぁ。。。

PSoCのクロックってどうなってるの?



最初は見逃していたけど、 CY8C27XXXのpdfにもクロック系統の図があった。でも、 これを見てもいまいち分からない。というか疑問に思うことが多い。

もしかすると、 PSoCデザイナの設定では出来ないような接続が存在するのかなぁ。








うーん。分かんないことだらけだ。。。




水晶を付け替えてみる

32k_Selectと PLL_modeの設定と、水晶の組合せを調べ直してみた。

テストオシレータの出力を 10kHzに設定した場合の出力周波数。

32k_SelectPLL_mode32kHz水晶40kHz水晶水晶なし

External
 
Ext_Lock 8.51kHz 8.51kHz 8.51kHz
Disable 10.05kHz 10.05kHz 10.04kHz

Internal
 
Ext_Lock 8.51kHz 8.51kHz 8.51kHz
Disable 10.04kHz 10.04kHz 10.05kHz

水晶発振の接続自体は簡単なので、間違いなさそうなんだけど、、、

もしかすると

ここまで書いてみて、ちょっと大事なことに気が付いた。


4古い仕様の方が読み易いんじゃないかなぁ。新しい仕様は回りくどい書き方のような。。。
5じゃ、32k_Select→external、PLL_mode→Disableは意味あるのかなぁ。

[top] [電気工作に戻る]
Bluefish Webpage by K.I

blog comments powered by Disqus