PSoC5 CY8C5888LTI-LP097 OPamp (オペアンプ)

PSoCの大きな特徴の一つとしてOPamp (オペアンプ)モジュール
が在ります、どの程度可能なのか大きな期待を寄せていた私が
バカでした、抵抗だのコンデンサだのは外付けしなければなりません
複雑なオペアンプ回路をプログラムで組むことは出来ませんので
逆にソフトウェアで何所まで代替出来るのかという発想の転換が
必要になってきます、それはそれ後にします。

取り敢えず内部正弦波発振回路とDACとオペアンプを使って
正弦波をパルスにする実験をしてみました、要はオペアンプを
コンパレーターとして使い閾値をDACで制御すれば出力はパルスに
成りますよね、その実験です、あんまり意味無いです。

取り敢えず回路図
WaveDAC8_1 が正弦波発振器です Pin2-0に出力してモニタします
VDAC8_1 がDACで閾値を決めています
オペアンプをコンパレーターとして動かして出力は Pin3-6です
bandicam 2019-02-17 08-59-43-119

Pin配置
bandicam 2019-02-17 08-59-33-827

WaveDAC8_1 のパラメーター
bandicam 2019-02-17 09-00-04-236
VDAC8_1のパラメーター
bandicam 2019-02-17 09-00-12-031
オペアンプのパラメーター
bandicam 2019-02-17 09-00-21-375

main.c の抜粋
    WaveDAC8_1_Start();
    VDAC8_1_Start();
    Opamp_1_Start();
これ起動させないと当然ですが動かない回路図書いて安心して居るとダメ
それぞれ起動しただけ for ループ内は何も無し

bandicam 2019-02-17 09-00-42-036

出力波形
ちゃんとコンパレーターが働いて居ます
DSCN0728

一見してきれいですよね、だけど私は信用していません
拡大してみました
DSCN0729
*** 雑感 ***

まぁこんなもんですよ

発振器はDACに決まってますからどうしてもギザギザ波形です
良く考えてみるとアナログ回路がデジタル回路に埋め込まれている
訳ですから周囲からのインターフェアは無い筈が無い、例えれば

メモリープレーヤーにAMラジオが付いていても音が濁っているのは
デジタルノイズが入ってくるからで、それと同じことがPSoCについても
言えると言うことですよね、「いやいや動けばそれでいいんだから」
そういう用途には向いています、が、極小電圧、電流を扱う回路には

使えませんノイズレベルで-120dBmぐらいなら良いんですけどね
期待するのが間違っています。

それと笑われそうですが・・・・
・回路図を書きました
・パラメーターを設定しました
・Pin配置を決めました

・main.c に対してプログラミングを開始しました

あれ? なんか変だぞ?・・・・
Op って書き始めると候補が次々と出てくるハズなのに何も出て来ない
Opamp****とかオートフィルが出てくるのに、なんでかなぁ、まぁいいや
と書き始めてスペルをチェックしてOK、なのに左側に赤いエラーマーク
が出てくる、なんで?

原因は
回路図書いたら一度その画面でコンパイルしなければならないんですね
それを行わなかった為にエラーマークが出ていた訳です
・回路図書いてコンパイル
・main.c 書いてコンパイル
これで動きました、という初歩的なミス、ちゃんと勉強しないで
行き成り使い始めるとこうなるのですね。

PSoC5 CY8C5888LTI-LP097 Lチカ PWM

PSoC第二弾 LチカでPWMです
ビジュアルで簡単にPWM出力が得られるんですね、流石PSoCです
これをPICマイコンでやろうとすると、然かもアセンブラだと
結構面倒です、出力ピンも限定されているし。
bandicam 2019-02-15 15-46-27-989

簡単にプログラミング出来たのですが、なんと動かなかったんです
プログラムは単純だしスペルの間違いも書いて居ると色々辞書候補
の様に出てくるから大文字小文字も間違う事はあんまりなさそうですが
出力設定がダメで出力しませんでした。
HW connection のチェックボックスです。
bandicam 2019-02-15 15-47-00-647

外国人のYouTube視てて判りました。
HW connection は Hard Ware Connection の意味なんですね
ここにチェックボックスを入れないと出て来なかったこれで随分
時間を無駄にしました。

PWM設定はほぼデフォルトで動きますが Clock だけ周波数を
変えましたデフォルトでは12MHzでしたが10KHzに下げました。
bandicam 2019-02-15 15-46-43-371

bandicam 2019-02-15 15-56-35-638

未だ未だ沢山のモジュールが在るのでこれは相当奥が深いのですね
いやぁ、無理、出来そうにないなぁ・・・。

ソースファイル
/* ========================================
*
* Copyright YOUR COMPANY, THE YEAR
* All Rights Reserved
* UNPUBLISHED, LICENSED SOFTWARE.
*
* CONFIDENTIAL AND PROPRIETARY INFORMATION
* WHICH IS THE PROPERTY OF your company.
*
* ========================================
*/
#include "project.h"
int main(void)
{
CyGlobalIntEnable; /* Enable global interrupts. */
/* Place your initialization/startup code here (e.g. MyInst_Start()) */
uint8 i;
PWM_Start();
for(;;)
{
/* Place your application code here. */
i--;
CyDelay(5);
PWM_WriteCompare1(i);
}
}
/* [] END OF FILE */
//*HW connectionは、チップ内の回路接続用の端子のこと PWM ではチェックボックスを入れないと出て来ない、これで引っかかった。*/
やっていて思ったんですが基板にはUSBコネクターが大小二つ付いていますが
小さい方はただの電源だけなんですね。

PSoC5 CY8C5888LTI-LP097 Lチカ

数年前に秋月電子から購入したスターターキット
Cypress Smiconductor CY8CKIT-059 PSoC 5LP Prototyping Kit
部品箱の肥やしに成って居たのを見つけていじってみました
先ずは定番の Lチカ です。

電源はDC5Vで、USBから給電出来るので便利、且つ
PICマイコンの様に書き込みツールのPICKIT3とか不要です
取り敢えずネットから PSoC Creator\4.2 をダウンロード
但しID登録が必要なのがちょっと面倒くさいです
それと一度インストールすると日々アップデートのダイアログ
が出て来て結構鬱陶しいもので、アンインストールしてしまって
更にPSoCから遠のいていました

最初にインストールしてプログラミングしようとして戸惑ったのは
CPUが見つからない、というか何所を探せば出てくるのよ!!
って少し イラッ としたのですがちゃんと用意されていました
bandicam 2019-02-15 10-59-46-169

bandicam 2019-02-15 10-57-18-428

で、ポートを一個何所でも良いので出力に設定するために
ドラッグ・アンド・ペースト、こんな感じでナンカ間抜けです
bandicam 2019-02-15 10-56-32-558

bandicam 2019-02-15 10-57-04-122

これで動くのかよ、って感じですよね、でも動きました
プログラムは main.c ってファイルで行います
bandicam 2019-02-15 10-56-45-224

ソースファイルです、恐ろしく単純で恥ずかしいです。

/* ========================================
*
* Copyright YOUR COMPANY, THE YEAR
* All Rights Reserved
* UNPUBLISHED, LICENSED SOFTWARE.
*
* CONFIDENTIAL AND PROPRIETARY INFORMATION
* WHICH IS THE PROPERTY OF your company.
*
* ========================================
*/
#include "project.h"
int main(void)
{
CyGlobalIntEnable; /* Enable global interrupts. */
/* Place your initialization/startup code here (e.g. MyInst_Start()) */
for(;;)
{
Pin_1_Write(1);
CyDelay(222); //wait
Pin_1_Write(0);
CyDelay(222); //wait
/* Place your application code here. */
}
}
/* [] END OF FILE */

Pin_1_Write(1); これが出力Hight
CyDelay(222); これがタイマー(ms)
Pin_1_Write(0); これが出力Low

さて、ここまでは簡単ですが問題はここから先、何をやってみようか・・・。