SlideShare a Scribd company logo
1 of 44
Download to read offline
PSoC ことはじめ (BLE版)
Ver.2016.10.28 @tetnoguchi(twitter) / techa.nog(facebook)
PSoCとは。。。
Cypress社のSoC
マイコンコア + CPLDなイメージ。
シリーズは4系列あり。
PSoC1: M8C  異色すぎる!!
PSoC3: 8051
PSoC4: ARM CortexM0
PSoC5: ARM CortexM3
CypressのHPから拝借PSoC1  高機能PAL/GALみたいなもん
UDB(Universal Digital Blocks) CPLDみたいなもん(12入力 4出力のPLD)
PSoC5には最大24個。 PSoC4は最大4個 しかない。
PSoC3 と 5は CPUの違い 8051(8bit) vs CortexM3
と 12bit SAR-ADCの有無 がちがうのみ
PSoc4はCPUは同じでも拡張性が大幅に削減されている
4はアナログ系も大幅に簡略化
PSoC4にもシリーズがあるんだよね….
ほんまに普通
のマイコン
OpAMPつけて
アナログ強化
OpAMP+UDB Universal Digital
Block(UDB)
12入力4出力の PLD * 2
と
データパス(簡易ALU)
を内蔵した特殊ブロック。
簡易版CPLD
要はCPUを介さずに
いろんな処理を行えるよう
にできる
便利ユニットなのだ!
同じPSoC4でも 4100系と4200系では大違い!
UDBこそがPSoCらしさそのものなので、
必ず4200系を選ぶべし!
PSoC4-4100系 PSoC4-4200系
今回は PSoC4BLE搭載の CY8CKIT-042-BLE-Aで進める。。。
PSoC初心者なら
PSoC5LP PrototypingKit CY8CKIT-059 http://akizukidenshi.com/catalog/g/gM-09432/
がおすすめ。 1500円でデバッガ付きで格安だから。USBもちゃんとついてるし。
慣れたら、PSoC4にいくもヨシ。 こちらは600円だし。http://akizukidenshi.com/catalog/g/gM-08446/
標準デバッガは MiniProg3 (CY8CKIT-002)だが、サイプレス直販で$89。
RSやマルツでは12000円ほどする。
(http://japan.cypress.com/documentation/development-kitsboards/cy8ckit-002-psoc-miniprog3-program-and-debug-kit)
必ず MiniProg3であること。(秋月にはMiniProg1はあるけど、PSoC1用なので注意!)
CY5682 などの同梱キットをかえば7000円程度で入手可。
https://store.macnica.co.jp/products/cypress_cy5682
でも、当面はCY8KIT-059のデバッガで十分。
今回つかう CY8CKIT-042-BLEだと
高い分だけあって
デバッガ機能もあって使いやすいとはおもう。
PSoC4BLE PioneerKit ベースボード
R-LED P2_6
G-LED P3_6
B-LED P3_7
SW P2_7
UART-TX P1_5
UART-RX P1_4
CapSense P2_1/P2_2/P2_3/P2_4/P2_5
F-RAM (0x50) SDA P5_0
F-RAM(0x50) SCL P5_1
UARTがKitProgのUARTに接続されているので
KitProgのUSBで即シリアル接続が確認できる。
F-RAMはFM24V10(1Mbit=128KB)が接続され
ている。
PSoC4BLE
R-LED P2_6
G-LED P3_6
B-LED P3_7
SW P2_7
KitProg(PSoC5LP)
ソフト、つくってみる。。。
PSoC Creater 3.3をベースに使ってみる。
File - New – Project を選んで CY8C5888LTI-LP097を選択して進める
ここまでくれば、あとは挙動を作るのみ。
右端にあるコンポーネントを適当にマウスで、配置していく。
コンポーネントをダブルクリックすると、
設定画面もでてくるので、適宜設定すべし!
スケマティック(回路図)ができたら、
設定ファイル( xxx.cydwr )を開き、
ピン配置を決める。
右にあるピンをドラッグ アンド ドロップで
配置したいピンに割り付ける。
できたら、いったんビルドする!(ここ重要!!)
関連ソースコードが
一気に生成されるので、あとは
これらを使うソースコードを追記していけば
めでたく完成することになる!!
-Work 00-
LEDを点灯しよう!
Schematicの部分にコンポーネントを配置する。SWとLEDなので、
LED  Digital Output Pin
SW  Digital Input Pin
に割り振る。
SWはプルアップされていないので、IO定義で内蔵プルアップを
有効にしてやる。
 Pin_2 をダブルクリックして Drive modeをResistive Pull upにする
SWでLEDを制御したいので、配線ツールで、
Pin_2 と Pin_1 をつなぐ。
スケマティック(回路図)ができたので
設定ファイル( xxx.cydwr )を開き、 ピン配置を決める。
LEDはP2[6] = 赤
SWはP2[7]
なので、
右にあるピンをドラッグ アンド ドロップで配置したいピンに割り付ける。
できたら、いったんビルドする!(Build-Builde xxx)
必要なソースコードも準備されたので、
Debug – Program
で 書き込んでみる。書き終わると自動的に実行されるので
SW を 押して LEDが 変化するのを確かめよう!!
-Work 01-
LEDを調光制御してみる!
調光制御するだけだと面白くないので、
SWに連動して各LEDが切り替わるようにし
てみる。
ついでに、徐々に調光値が変化するように\
(^o^)/
青字は気にせず、こんな風に
配置してね。
Clockは今回10kHzに。
PWMの設定はこんな感じ。
10kHzが投入されているので
Period=99で 10ms周期。
Compare=50だとDuty50%。
わかりやすいね。
Interrupt部で
On Terminal Count Event
にチェックすべし!
これで1周期おわりごとに割り込み
発生できる。
Timerのほうもこんな感じ。
10kHzが投入されているので
Period=10 で 1ms周期なのが分かる。
Interrupt On TC にチェック!
基本設定が完了したので、
いったんビルド!!
ソースが自動生成された
ので、動作を作成するぞ。
PWMとタイマーの初期化と
割り込みベクタの指定
一定間隔で徐々に輝度を上げて上限に達したら
徐々に下げていく。下限ならまた上げていく
SWが押し下げられたら、出力LEDを切りかえる
実際の割り込みの処理はこんなかんじ。
PWMの更新周期で
次回のDutyを設定する
単純に時間計測用の
減算タイマーがあるのみ。
Debug – Program
で 書き込んでみる。書き終わると自動的に実行されるので
SW を 押して LEDが 変化するのを確かめよう!!
-Work 02-
LEDを調光制御してみる!
その2
PSoCにはきれいに調光するためだけに
設計されたPrISMというコンポーネントがある。
色は色相環に従って徐々にR->G->Bと遷
移するようにしてみる。
SWに連動して各LEDが切り替わ
るのは同じ。
青字は気にせず、こんな風に
配置してね。
Wikipediaから抜粋
基本はあまりかわらない。
一定時間ごとに色相情報から
RGBを生成するだけ。
Hは色相だけど
SとVはフル値固定。
色相(H)を0~359までぐるぐるまわす
SWが押し下げられたら、出力LEDを切りかえる
割り込み部はタイマーだけ
PrISMに値を与える部分。
IはHSVのSと等価のはず。
まぁ、今回は関係ないけどね。
HSVRGB変換部。
ネットにあったJavaのサンプル
ほぼそのまま。。。
-Work 03-
LEDを調光制御してみる!
その3
BLEを使えるようにしてみる。
まずは、BLEのコンポーネントを追加する。
できたら、いったんBuildする!
カスタムプロファイル で
GATT Server設定する。
GAP は Peripheral でOK.
Profileタブで 新たに サービス追加。
Server部で右クリックして、
Custom Service
を選択すればOK
追加された Custom Service
を RGB LED Service
にリネーム(わかりやすくするため)
同じく その下の Characterristicも
RGB LED Characterristic
にリネームしとく。
標準サンプルを使いたいので
UUIDは16bit 値で CBBB にする。
標準サンプルを使いたいので
UUIDは16bit 値で CBB1 にする。
Fields = uint8 array = 4
Read / Write にチェック
Custom Descripter
は削除しちゃって、
代わりに
User Descriptionを
追加!
RGB LED Controlとか、適当に名前をつけとく
BLE 03 とか、適当に名前をつけとく
ここの名前で、自分の接続先デバイスかどうかを判別するので
適当に。。。(できるだけ短くしてね)
Advertisement Packetの項目で
Local Name
Service UUID
をチェックしとく。
Securityの項目で
No Security
No Input No Output
No Bonding
を設定
これでコンポーネントの設定は終了。
OK で 終了できる
一旦、ビルドするといろいろファイルが付加される。
ただ、肝心のやりとりする部分がないので、
Cypressのサンプルから、ファイルをもってくる。
(BLE_Handler.c)
割り込み応答用の関数
void StackEventHandler( uint32 eventCode, void *eventParam )
で、状態を判定できるので、全部入りがうれしい。
このファイルを、プロジェクトに追加する。
(今回は、それなりに用意。)
 ソースは別途みてね。
void StackEventHandler( uint32 eventCode, void *eventParam )
のなかで、
CYBLE_EVT_GATT_DISCONNECT_IND
接続断の場合の処理を追加。
CYBLE_EVT_GATTS_WRITE_REQ:
書き込み指示があったら更新する。
あとは main.cの初期化部に
CyBle_Start( StackEventHandler );
を実装すれば、割り込み処理される!
CyBle_Start( StackEventHandler ); // BLE関連のイベントハンドラを別ファイルに定義
for(;;)
{
CyBle_ProcessEvents(); // BLE ハンドル処理
スマホのCySmartで接続したら、
LEDの調光画面がつかえるよ~~
スマホにCySmartアプリを導入して起動すると。。。
UUIDを合わせてあるので、
標準アプリのRGB調光部がそのまま
つかえる
~あとがき~
BLE部はかなり端折ってしまってるorz
でも、標準のサンプルからもってくればそれほど難しくない。
というか、ほかのBLEデバイスにはないくらい、隠蔽してくれている。
BLEデバイス側をつくるには、最小限、これでいいって思えるくらい。
Service – Characteristic
の部分は、これの延長で、適当にすればなんとかなりそう。
ただ、BLEの部分は割り込みで処理されるので、
mainなどの通常処理との間では排他処理など、少し考えないとダメ。
そこらあたりは、おいおい、やりましょー。
お疲れ様でした!
~あとがき~

More Related Content

What's hot

What's hot (20)

Intel TSX 触ってみた 追加実験 (TTAS)
Intel TSX 触ってみた 追加実験 (TTAS)Intel TSX 触ってみた 追加実験 (TTAS)
Intel TSX 触ってみた 追加実験 (TTAS)
 
OVPの等価回路モデル
OVPの等価回路モデルOVPの等価回路モデル
OVPの等価回路モデル
 
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
 
xv6 + mist32 + mruby
xv6 + mist32 + mrubyxv6 + mist32 + mruby
xv6 + mist32 + mruby
 
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
 
Ras piでrt linux
Ras piでrt linuxRas piでrt linux
Ras piでrt linux
 
本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown
 
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
 
Intel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86optiIntel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86opti
 
Cpu pipeline basics
Cpu pipeline basicsCpu pipeline basics
Cpu pipeline basics
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
 
REFERENCEの等価回路モデル
REFERENCEの等価回路モデルREFERENCEの等価回路モデル
REFERENCEの等価回路モデル
 
Kiso sekkei 01rev03
Kiso sekkei 01rev03Kiso sekkei 01rev03
Kiso sekkei 01rev03
 
LTspiceを活用したスタートアップ機能の等価回路モデル
LTspiceを活用したスタートアップ機能の等価回路モデルLTspiceを活用したスタートアップ機能の等価回路モデル
LTspiceを活用したスタートアップ機能の等価回路モデル
 
Pynqでカメラ画像をリアルタイムfastx コーナー検出
Pynqでカメラ画像をリアルタイムfastx コーナー検出Pynqでカメラ画像をリアルタイムfastx コーナー検出
Pynqでカメラ画像をリアルタイムfastx コーナー検出
 
OpenCM IDE、OpenCM 485 EXPを用いてのDynamixel Xシリーズの制御
OpenCM IDE、OpenCM 485 EXPを用いてのDynamixel Xシリーズの制御OpenCM IDE、OpenCM 485 EXPを用いてのDynamixel Xシリーズの制御
OpenCM IDE、OpenCM 485 EXPを用いてのDynamixel Xシリーズの制御
 
高位合成ツールVivado hlsのopen cv対応
高位合成ツールVivado hlsのopen cv対応高位合成ツールVivado hlsのopen cv対応
高位合成ツールVivado hlsのopen cv対応
 
20161120_HPCでFPGAを使ってみたい_fpgastartup
20161120_HPCでFPGAを使ってみたい_fpgastartup20161120_HPCでFPGAを使ってみたい_fpgastartup
20161120_HPCでFPGAを使ってみたい_fpgastartup
 
Twitter for PC-G850
Twitter for PC-G850Twitter for PC-G850
Twitter for PC-G850
 
TensorFlow XLA とハードウェア
TensorFlow XLA とハードウェアTensorFlow XLA とハードウェア
TensorFlow XLA とハードウェア
 

Viewers also liked

Fuji sakuraでmbedを!
Fuji sakuraでmbedを!Fuji sakuraでmbedを!
Fuji sakuraでmbedを!
Tetsuya Noguchi
 
【18-C-7】GPUコンピューティングが世界を変える~GPGPUで開発をはじめるために知っておくべき10個のこと
【18-C-7】GPUコンピューティングが世界を変える~GPGPUで開発をはじめるために知っておくべき10個のこと【18-C-7】GPUコンピューティングが世界を変える~GPGPUで開発をはじめるために知っておくべき10個のこと
【18-C-7】GPUコンピューティングが世界を変える~GPGPUで開発をはじめるために知っておくべき10個のこと
Developers Summit
 

Viewers also liked (9)

手抜き大好きPSoC
手抜き大好きPSoC手抜き大好きPSoC
手抜き大好きPSoC
 
MDK-ARMでPSoC開発
MDK-ARMでPSoC開発MDK-ARMでPSoC開発
MDK-ARMでPSoC開発
 
Fuji sakuraでmbedを!
Fuji sakuraでmbedを!Fuji sakuraでmbedを!
Fuji sakuraでmbedを!
 
使ってもらうための小型超音波集束装置
使ってもらうための小型超音波集束装置使ってもらうための小型超音波集束装置
使ってもらうための小型超音波集束装置
 
超音波を利用した先端研究 ~集束超音波による非接触作用力の応用展開について~
超音波を利用した先端研究 ~集束超音波による非接触作用力の応用展開について~超音波を利用した先端研究 ~集束超音波による非接触作用力の応用展開について~
超音波を利用した先端研究 ~集束超音波による非接触作用力の応用展開について~
 
Arduino / ArduBlock の簡単なプログラムと回路の例
Arduino / ArduBlock の簡単なプログラムと回路の例Arduino / ArduBlock の簡単なプログラムと回路の例
Arduino / ArduBlock の簡単なプログラムと回路の例
 
ブレッドボードの使い方と Arduino に簡単な回路をつける例
ブレッドボードの使い方と Arduino に簡単な回路をつける例ブレッドボードの使い方と Arduino に簡単な回路をつける例
ブレッドボードの使い方と Arduino に簡単な回路をつける例
 
Arduino 入門
Arduino 入門Arduino 入門
Arduino 入門
 
【18-C-7】GPUコンピューティングが世界を変える~GPGPUで開発をはじめるために知っておくべき10個のこと
【18-C-7】GPUコンピューティングが世界を変える~GPGPUで開発をはじめるために知っておくべき10個のこと【18-C-7】GPUコンピューティングが世界を変える~GPGPUで開発をはじめるために知っておくべき10個のこと
【18-C-7】GPUコンピューティングが世界を変える~GPGPUで開発をはじめるために知っておくべき10個のこと
 

PSoC4 ことはじめ -BLE版-