2013/02/24からのアクセス回数 6321
今週も大野さんの本に8章を勉強します。 簡単だと高をくくっていたのですが、アナログブロックとカウンターの接続にはまりました。
8章のレッスン2には、以下の図*1のブザーの音をAM変調を使って再現する例が紹介されています。
本文には記載されていませんが、このブザーのsin波の様な外形が50Hzのようです。
最初はよく分からなかったのですが、元の信号に変調信号を反転増幅するとAM変調した波形が、 出力されるのことが以下の図をみて理解できました。
AM変調を意識してなのか、SCブロック(タイプC)の内部構造*2 は以下の様になっています。
AM変調を使った串団子のような波形は、元の信号として50Hzのsin波、変調信号として1kHzを使用します。
オリジナルは、BPF2を2個使ったBPF4を使ってsin波を生成していますが、 ここでは練習としてBPF2を1個だけでsin波を出力してみます。
PSoCのFilter DesignフォルダーのBPF2 Design.xlsを起動して
ユーザモジュールの「BPF2_V5R5_2 ポール バンドパス フィルタのデータシート.pdf」によるとクロック周波数は、サンプルレートの4倍と記載されているので、フィルター設計で求められた2000Hzの4倍の8000Hzがフィルターの入力クロックの周波数となります。*3
例題のブロック図
でBPF4_1をBPF2_1に変更してプロジェクトを作成します。
最初にグローバルセッティングを以下の様にセットします。
グローバルセッティングについては、桑野さんの ユーザモジュールの配置とグローバルリソースの設定 に説明があって助かりました。
大野さんのプロジェクトの設定では、
となっていましたが、デフォルトのままでも動作しました。しかし、レッスン3のスピーカーへの出力ではこの設定が必要になるのかも知れません。
次にユーザブロックを配置します。
Counter8を3個デジタルブロックを以下の様に配置します。
同様にアナログブロックに、PGAを3個、BPF2、SCBlockを以下の様に配置します。
Counter8のパラメータは、以下の様にします。
PGAのパラメータも以下の様にします。
BPF2は、先のフィルター設計の値を以下の様にセットします。
SCBLOCKは、大野さんの設定の通りとしました。
アナログの配線では、BPF2_1のクロックをDBB00から取ります。
main関数は、以下の様にセットします。
void main(void) { // M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts Counter8_1_Start(); Counter8_2_Start(); Counter8_3_Start(); PGA_1_Start(PGA_1_HIGHPOWER); PGA_2_Start(PGA_2_HIGHPOWER); PGA_3_Start(PGA_3_HIGHPOWER); BPF2_1_Start(BPF2_1_HIGHPOWER); SCBLOCK_1_Start(SCBLOCK_1_HIGHPOWER); AMD_CR0 |= 0x20; // データシート13.2.11参照 }
8章のレッスン2の最大のポイントは、SCBLOCKの入力に1kHzのクロックと重ね合わせる部分ですが、 この部分はプログラムで制御しなくてなりません。
データシートの13.2.11にAMD-CR0のアナログ変調制御の設定方法が記載されています。 これからGOE0を選択するには、AMD_CR0の6-4bitを、010にセットします。 それで、AMD_CR0の設定が、
AMD_CR0 |= 0x20;
となります。
デジタル回路のカウンターの接続を間違えて、正しいクロックを供給できていませんでした。
クロックはピンに出力しておけば、テスターで簡単に確認できるので次回からはチェックしながら進めたいと思います。
PGAのパラメータ設定で「未設定」項目があったのに気づかず、アナログ回路から出力がでなくて悩みました。
ユーザブロックのStartコマンドをmain関数に入れ忘れてどうして、動かないのか悩みました。
皆様のご意見、ご希望をお待ちしております。