トラ技2019年5月号のPSoC基板 [PSoC]
トラ技5月号にPSoC基板が付録で付いているので購入してみました。
PSoCは「独自言語 picle on PIC24FJ」の記事のコメントに書いたpicle言語の開発スタイルとは真逆でGUIの設定で内部の機能ブロックの初期化や外部ピン接続等の初期化Cのソースを生成でき、内部レジスタの構成等を考える必要がありません。
また、「バットディテクター(Bat Detector)の製作」の記事のコメントの最後の方に書いたようにアナログブロックを使って通過周波数をソフトで変更できるバンドパスフィルタの実現等が可能で、その素晴らしさに驚きましたが、この時はCコンパイラ環境が無かったので継続して使用することはありませんでした。
今回、パソコン電子ブロックというキャッチフレーズでPSoC4(CY8C4146LQI_S433)基板がトラ技に付録になっていたので久々にPSoCで遊んでみました。
PSoCの開発環境である「PSoC Creator」は下図のような感じでGUI設定によりコード生成可能で相当な力を入れて開発しているという印象を受けます。
今回は最初にアナログ入力値に応じてduty比を変えてLEDを点灯するような簡単なものを作りたいと思います。
Clock_1は下図のような設定で1024kHzを生成し、PWM機能ブロックのクロックとしています。
PWMの設定は下図のとおりで周期を1024にして入力クロックが1024kHzなのでPWMの周期は1kHzになります。
信号の結線は下図のようにしました。
まずはPWMブロックの周期での割込み動作を確認してみました。ソースは下記のとおりです。
割込みテスト
PWMの出力を確認すると想定通り約1kHzの矩形波が出ています。
しかし、PWM周期での割込みでトグル操作しているinLEDの信号は下図のようになり、244kHzの矩形波で想定した2kHzではありませんorz
割込み要求が解除されずに連続して割込み処理が動作しているような感じです・・
ISRの割込みタイプをDERIVEDからRISIN_EDGEに設定し直すと、PSoC4ではエッジ対応していないようで「Generate Application」操作でコード生成する際にエラーになり、失敗します。
こうなるとハードを隠遁しGUI操作でコード生成するこの環境ではすぐには解決方法が判りません・・・
★2019/04/27 追記
サンプルソースを探し出し、割込みフラグクリア(上記ソースの水色部分)を追加することで解決しました。
PSoC4ではオペアンプ程度しかアナログブロックが無く(今時はPICでもオペアンプ入りのものがある)PSoCが出たての頃のようにアナログブロックがいろいろ有り、周辺のアナログ回路を詰め込める方が面白かったなぁというのが率直な感想です。
PSoCは「独自言語 picle on PIC24FJ」の記事のコメントに書いたpicle言語の開発スタイルとは真逆でGUIの設定で内部の機能ブロックの初期化や外部ピン接続等の初期化Cのソースを生成でき、内部レジスタの構成等を考える必要がありません。
また、「バットディテクター(Bat Detector)の製作」の記事のコメントの最後の方に書いたようにアナログブロックを使って通過周波数をソフトで変更できるバンドパスフィルタの実現等が可能で、その素晴らしさに驚きましたが、この時はCコンパイラ環境が無かったので継続して使用することはありませんでした。
今回、パソコン電子ブロックというキャッチフレーズでPSoC4(CY8C4146LQI_S433)基板がトラ技に付録になっていたので久々にPSoCで遊んでみました。
付録のPSoC基板で実験 |
|
PSoCの開発環境である「PSoC Creator」は下図のような感じでGUI設定によりコード生成可能で相当な力を入れて開発しているという印象を受けます。
PSoC Creator |
|
今回は最初にアナログ入力値に応じてduty比を変えてLEDを点灯するような簡単なものを作りたいと思います。
ブロック図 |
|
Clock_1は下図のような設定で1024kHzを生成し、PWM機能ブロックのクロックとしています。
Clock_1の設定 |
|
PWMの設定は下図のとおりで周期を1024にして入力クロックが1024kHzなのでPWMの周期は1kHzになります。
PWMの設定 |
|
信号の結線は下図のようにしました。
信号のピンアサイン |
|
まずはPWMブロックの周期での割込み動作を確認してみました。ソースは下記のとおりです。
|
PWMの出力を確認すると想定通り約1kHzの矩形波が出ています。
PWMの出力 |
|
しかし、PWM周期での割込みでトグル操作しているinLEDの信号は下図のようになり、244kHzの矩形波で想定した2kHzではありませんorz
割込み要求が解除されずに連続して割込み処理が動作しているような感じです・・
ISRの割込みタイプをDERIVEDからRISIN_EDGEに設定し直すと、PSoC4ではエッジ対応していないようで「Generate Application」操作でコード生成する際にエラーになり、失敗します。
こうなるとハードを隠遁しGUI操作でコード生成するこの環境ではすぐには解決方法が判りません・・・
★2019/04/27 追記
サンプルソースを探し出し、割込みフラグクリア(上記ソースの水色部分)を追加することで解決しました。
PWM割込み処理の出力 |
|
PSoC4ではオペアンプ程度しかアナログブロックが無く(今時はPICでもオペアンプ入りのものがある)PSoCが出たての頃のようにアナログブロックがいろいろ有り、周辺のアナログ回路を詰め込める方が面白かったなぁというのが率直な感想です。