5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IoTLT (IoTや電子工作ネタなど)Advent Calendar 2024

Day 6

推しマイコンPSoCの紹介

Last updated at Posted at 2024-12-05

※間違いがあればコメント等でご指摘ください。

はじめに

PSoCは良いマイコンと思っていますが、あまり知られていないので紹介します。

自分はPSoC好きだったのですが、PSoCを販売していたCypressがInfinionに買収され、秋月電子など日本のパーツ屋から段々在庫が少なくなり、そろそろ積みボードかと思っていたのですが、検索してみると、なんとRSコンポーネンツ等で売っているではないですか。それもディスコンではなく! ということで紹介しておきます。
今回は簡単に使えるPSoC開発ボードのCY8CKIT-59を紹介します。と言っても10年ぐらい前の開発キットでQiitaにも記事書いていたので思い出しながら、また現状を調査しながら書きます。
image.png

PSoCとは

有名なのは初代iPodで、PSoCのCap Sense(静電容量スイッチ)がタッチセンサーとして利用されたことでしょうか。
オペアンプが使えると、増幅器や比較器が実現できますよね。それをリアルタイムで変化させるためには、外付けの抵抗の値を変えます。でも多分、IC内部で抵抗を変えるのって難しいですよね。多分、抵抗って電圧/電流なので電圧もしくは電流を変化させれば良いですよね。そこで電流を変化させるためにスイッチドキャパシタを搭載したのがPSoC(現在のPSoC1:廃盤?)です。ちなみに、今回紹介するPSoC5LPはデジタルフィルターになっています。

普通のマイコンと何が違うの

一般的にPSoCは、デジタルユニットとアナログユニットを搭載したマイコンと言われていますが、個人的見解は、PSoCはセンサーを創るマイコンです。(創る---自由な発想でないものを作り出します。)
センサーを創るためには、入力、演算、出力(PCやマイコンとのインターフェイス)が必要です。特にデジタルユニット、アナログユニットはCPUの能力に依存せず、できるのが魅力です。

現在のPSoC

昔あったPSoC1や3は廃止みたいで、現在は以下の10シリーズみたいです。PSoC3なども、まだ売っているみたいですが、実質PSoC4,5,6みたいですね。

  • 32ビット PSoC 4 (Cortex-M0)
  • 32ビット PSoC 4 Automotive (Cortex-M0/M0+)
  • 32ビット PSoC 4 HV (Cortex-M0+)
  • 32ビット PSoC 5 LP (Cortex-M3)
  • 32ビット PSoC 6 (Cortex-M4/M0+)
  • 32ビット PSoC車載用Multitouch (Cortex-M0)
  • 32ビット PSoC Fingerprint (Cortex-M0+)
  • 32ビット PSoC Analog Coprocessor (Cortex-M0+ MCU)
  • 32ビット PSoC Edge (Cortex Multicore)
  • 32ビット PSoC Control (Cortex-M33 MCU)

生き残っている開発ボードは以下の製品みたいです。(DigiKey調べ)

型番 品名 価格 シリーズ 備考
CY8CKIT-030A CY8C3866AXI-040 EVAL BRD 15,825 PSoC3 レガシー製品
CY8CKIT-040 PSoC 4000パイオニアキット 10,493 PSoC4 CY8C40xx
CY8CPROTO-040T PSoC 4000T CAPSENSE 3,313 PSoC4
CY8CKIT-040T PSOC 4000T CAPSENSE EVAL BRD 5,448 PSoC4 PSoC 4000T
CY8CKIT-149 PSoC 4100S Plus試作キット 6,509 PSoC4
CY8CKIT-147 PSoC 4100PS試作キット 3,315 PSoC4
CY8CKIT-041S-MAX PSOC 4100S MAX PIONEER KIT 15,878 PSoC4 PSoC 4100S
CY8CKIT-043 PSOC 4200M EVAL BRD 3,315 PSoC4 PSoC4200M
CY8CKIT-146 PSoC 4200DS試作キット 3,315 PSoC4
CY8CKIT-045S PSoC 4500S Pioneer Kit 10,493 PSoC4 PSoC 4500S
CY8CKIT-145-40XX PSoC 4 Sシリーズ試作キット 6,509 PSoC4
CY8CKIT-042 PIONEER CY8C4245AXI EVAL BRD 6,509 PSoC4 CY8C4245AXI
CY8CKIT-044 PSoC 4 Mシリーズ パイオニアキット 4,119 PSoC4 PSoC 4200M
CY8CKIT-046 PSoC 4 Lシリーズ パイオニアキット 2,719 PSoC4 PSoC 4200L
CY8CKIT-050B CY8C5868AXI-LP035 EVAL BRD 15,825 PSoC5LP CY8C5868AXI-LP035
CY8CKIT-059 CY8C58LP EVAL BRD 3,315 PSoC5LP CY8C58LP
CY8CPROTO-062S3-4343W PSoC 62S3 Wi-Fi BT試作キット 10,493 PSoC6
CY8CKIT-062S2-AI PSOC 6 AI EVAL BOARD 6,220 PSoC6

CY8CKIT-059について

本体とライターがつながった状態で売られています。切り離して使うことも可能です。
✳︎ライターもPSoCなので不要の場合は他の用途に利用可能です。
https://www.infineon.com/cms/jp/product/evaluation-boards/cy8ckit-059/
image.png

チップは CY8C5888LTI-LP097が載っています。

開発ツールのダウンロード

PSoC5は、PSoC Creator(Windowsのみ)を使用して開発をします。
PSoC4とPSoC6は、ModusToolboxを使用して開発するようになったみたいです。
なおPSoC1はPSoC Desinerという開発ツールを利用していました。今回紹介するCY8CKIT-059は、PSoC5シリーズなのでPSoC Creatorを利用して開発を進めます。
ダウンロード:https://www.infineon.com/cms/jp/design-support/tools/sdk/psoc-software/psoc-creator/
※Infinionにユーザ登録が必要なようです。

PSoC Creatorについて

ダウンロードしたファイルをダブルクリックでインストールできます。
インストールタイプはとりあえずTypicalでよいでしょう。
image.png
起動すると以下のような画面です。registorのダイアログが表示されますが、登録できなのでlaterをクリックします。
image.png
メニューの[File]→[Code example]にサンプルがあります。

PSoc Programmerについて

Programmerのバージョンが古いと書き込めないので最新に更新します。

  1. CY8CKIT-059をPCに接続します(基板のUSB端子の方です)。
  2. スタートメニューからCypress -> PSoC Programmerを起動します。
    image.png
  3. プログラマーを選択します。エラーが出た場合はFirmwareの更新が必要です。
    image.png
    image.png
    エラーが出た場合は、Utilityタブに変更しUpdateします。
    image.png
  4. PSoC Creatorから書き込みできるので、Programmerは閉じます。

CY8CKIT-059でLチカ

PSoC(CY8CKIT-059)でのLチカは3通りの方法があります。まだ他にもあるかもしれません。

  • CPUを使う方法
  • デジタルユニットのクロックを使う方法
  • デジタルユニットのPWMを使う方法

CY8CKIT-059開発キットのハードウェア

User Button

P2_2ピンに接続されています。押すとGNDですね。
image.png

User LED

P2_1ピンに接続されています。他に2つのLEDが載っていますが、あまりプログラムと関係ないので省略
image.png

コンデンサ

マニュアルに従って進めるためにモノですが、結構じゃま。ピンを気を付けましょう。
image.png

プログラムを書くまでの準備(プロジェクトの作成)

[File]->[New]->[Project]で新規プロジェクトを作ります。
Target deviceで[PsoC 5LP] [CY8C58LP]を選択します。
image.png
Select project Templateは、最初から作るので[Empty schematic]を選択します。
image.png
Generate Projectは問題なければ[Next]で良いでしょう。
こんな画面になると思います。
image.png

デバイスの詳細選択
最初のProjectを作成するときはシリーズしか選べられなかったので詳細デバイスを指定します。
[Project]-->[Device Selector...]を選択します。
image.png

"CY8C5888LTI-LP097"を選択します。
image.png

CPUを使ったLチカ

定義

まずピンを定義する必要があります。LEDはP2_1です。
右の[Ports and Pins]の中の[Digital Output Pin]を選択し真ん中にドラッグ&ドロップします。
image.png
image.png
ドラッグした部品をダブルクリックします。Nameをわかりやすいように[LED]にしましょう。CPUで制御するので[HW Connection]のチェックは外します。他はそのままで良いでしょう。[OK]を押します。
image.png
左のPinsをダブルクリックします。
image.png
PORTにP2[1]を選択します。これでPin名と物理ピンが関連付け出来ました。
image.png

Design Build

[Build]->[Build Design01]でデザインのビルドをします。これをすることで、プログラムのためのヘッダーファイル等が出来ます。
main.cを追記します。Arduinoに似てますよね。出来たら[Build]->[Genarate Application]でBuildします。

#include "project.h"

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

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

    for(;;)
    {
        /* Place your application code here. */
        
        LED_Write(1);
        CyDelay(2000);
        LED_Write(0);
        CyDelay(1000);        
    }
}

書込み

[Debug]-->[Program]を選択すると書き込んで実行します。
もしデバイスが違うと言われたら「Project]-->[Device Selector]でデバイスを変更します。

クロックを使ったLチカ

すこしPSoCらしい使い方に変更しましょう。

TopDesign.cyshをダブルクリックして回路図を表示します
image.png
回路図のLEDをダブルクリックして、HW Connectionにチェックを入れます。
image.png
[SYSTEM]の中の[Clock]をドラッグ&ドロップします。
image.png
ドラッグしたClockをダブルクリックして、Sourceを[ILO]、Specityを[1Hz]にします。
image.png
回路図左のimage.pngでClockとLEDを接続します。
image.png
さっきと同様に[Build]-->[Build Design01]でプログラムの準備をします。
main.cを以下の様に書きます。今回は内部のハードを動かすだけなので”Clock_1_Start();”の1行です。(つまりCPUは殆ど使用しません)

#include "project.h"

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

    /* Place your initialization/startup code here (e.g. MyInst_Start()) */
       Clock_1_Start();
    for(;;)
    {
        /* Place your application code here. */ 
    }
}

デジタルユニットのPWMを使ったLチカ

ClockだとONとOFFの時間が一緒になってしまいますね。PWMを用いて自由に変化できるようにしてみましょう。

Projectの作成

プログラムを書くまでの準備(プロジェクトの作成)に沿って新規のProjectを作成し、LEDを置きます。LEDの"HW Connection"はチェックを入れてください。
image.png
PinsでLEDをP2[1]に接続してください。
ここまではさっきと一緒です。

ハードウエア

PWM

TopDesign画面で、[Digital]->[Function]->[PWM]を回路画面にドラッグ&ドロップします。
image.png
image.png

ドラッグしたPWMをダブルクリックし、設定画面を表示します。
image.png
Implementationは"Fixed Function"を選択します。Fixed Functionは専用演算モジュールで、UDBはuniversal digital blocksです。universal digital blocksは自由に使えるので、専用演算モジュールがある時はそちらを利用した方が良いです。
Periodを100にします。100Hzの信号で動かすと1Hzで光ります。
CMP Value1は 25ぐらいで良いでしょう。50でDuty50%
規格表でいう所のココのモジュールを使用します。
image.png
端子が少し変わりました。PWMにはkillとClockが必要そうです。
image.png
kill端子はロジックの0を入れると良さそうなのでそれを回路図に入れます。
[Digital]->[Logic]->[Logic Low'0']をドラッグ&ドロップします。
image.png

[System]->[Clock]をドラッグ&ドロップします。
image.png
回路図のClockをダブルクリックし、設定画面を表示します。今回はSourceは、お任せ(Auto)で周波数のみ100Hzにします。
image.png

配線します。
image.png

Buildします。メニューから選んでも良いですが、ボタンでも良いです。
image.png

ソフトウエア

main.cを開きます。今回もハード依存なのでモジュールをスタートさせるだけです。for行の前の2行を追加します。

#include "project.h"

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

    /* Place your initialization/startup code here (e.g. MyInst_Start()) */
    Clock_1_Start();
    PWM_1_Start();
    for(;;)
    {
        /* Place your application code here. */
    }
}

実行

Programボタンを押すとコンパイルして書き込んで、実行がはじまります。
image.png

おわりに

もしかしたら日本の小売りとInfineonとの契約が難しくて去って行ったのかな。
アナログも載っているマイコンPSoCに興味を持っていただけたら幸いです。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?