44
PSoC ことはじめ (BLE版) Ver.2016.10.28 @tetnoguchi(twitter) / techa.nog(facebook)

PSoC4 ことはじめ -BLE版-

Embed Size (px)

Citation preview

Page 1: PSoC4 ことはじめ -BLE版-

PSoC ことはじめ (BLE版)

Ver.2016.10.28 @tetnoguchi(twitter) / techa.nog(facebook)

Page 2: PSoC4 ことはじめ -BLE版-

PSoCとは。。。Cypress社のSoC

マイコンコア + CPLDなイメージ。

シリーズは4系列あり。

PSoC1: M8C 異色すぎる!!

PSoC3: 8051

PSoC4: ARM CortexM0

PSoC5: ARM CortexM3

CypressのHPから拝借PSoC1 高機能PAL/GALみたいなもん

Page 3: PSoC4 ことはじめ -BLE版-

UDB(Universal Digital Blocks) CPLDみたいなもん(12入力 4出力のPLD)PSoC5には最大24個。 PSoC4は最大4個しかない。

PSoC3 と 5は CPUの違い 8051(8bit) vs CortexM3と 12bit SAR-ADCの有無 がちがうのみPSoc4はCPUは同じでも拡張性が大幅に削減されている

Page 4: PSoC4 ことはじめ -BLE版-

4はアナログ系も大幅に簡略化

Page 5: PSoC4 ことはじめ -BLE版-

PSoC4にもシリーズがあるんだよね….

ほんまに普通のマイコン

OpAMPつけてアナログ強化

OpAMP+UDB Universal Digital Block(UDB)

12入力4出力の PLD * 2とデータパス(簡易ALU)を内蔵した特殊ブロック。簡易版CPLD

要はCPUを介さずに

いろんな処理を行えるようにできる便利ユニットなのだ!

Page 6: PSoC4 ことはじめ -BLE版-

同じPSoC4でも 4100系と4200系では大違い!UDBこそがPSoCらしさそのものなので、必ず4200系を選ぶべし!

PSoC4-4100系 PSoC4-4200系

Page 7: PSoC4 ことはじめ -BLE版-

今回は 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だと高い分だけあってデバッガ機能もあって使いやすいとはおもう。

Page 8: PSoC4 ことはじめ -BLE版-

PSoC4BLE PioneerKitベースボードR-LED P2_6G-LED P3_6B-LED P3_7SW P2_7UART-TX P1_5UART-RX P1_4CapSense P2_1/P2_2/P2_3/P2_4/P2_5F-RAM (0x50) SDA P5_0F-RAM(0x50) SCL P5_1

UARTがKitProgのUARTに接続されているのでKitProgのUSBで即シリアル接続が確認できる。F-RAMはFM24V10(1Mbit=128KB)が接続されている。

PSoC4BLE

R-LED P2_6G-LED P3_6B-LED P3_7

SW P2_7

KitProg(PSoC5LP)

Page 9: PSoC4 ことはじめ -BLE版-

ソフト、つくってみる。。。

Page 10: PSoC4 ことはじめ -BLE版-

PSoC Creater 3.3をベースに使ってみる。

File - New – Project を選んで CY8C5888LTI-LP097を選択して進める

Page 11: PSoC4 ことはじめ -BLE版-

ここまでくれば、あとは挙動を作るのみ。右端にあるコンポーネントを適当にマウスで、配置していく。コンポーネントをダブルクリックすると、設定画面もでてくるので、適宜設定すべし!

Page 12: PSoC4 ことはじめ -BLE版-

スケマティック(回路図)ができたら、設定ファイル( xxx.cydwr )を開き、ピン配置を決める。右にあるピンをドラッグアンド ドロップで配置したいピンに割り付ける。

できたら、いったんビルドする!(ここ重要!!)

Page 13: PSoC4 ことはじめ -BLE版-

関連ソースコードが一気に生成されるので、あとはこれらを使うソースコードを追記していけば

めでたく完成することになる!!

Page 14: PSoC4 ことはじめ -BLE版-

-Work 00-

LEDを点灯しよう!

Page 15: PSoC4 ことはじめ -BLE版-

Schematicの部分にコンポーネントを配置する。SWとLEDなので、LED Digital Output PinSW Digital Input Pin に割り振る。SWはプルアップされていないので、IO定義で内蔵プルアップを有効にしてやる。 Pin_2をダブルクリックして Drive modeをResistive Pull upにする

Page 16: PSoC4 ことはじめ -BLE版-

SWでLEDを制御したいので、配線ツールで、Pin_2 と Pin_1をつなぐ。

スケマティック(回路図)ができたので設定ファイル( xxx.cydwr )を開き、ピン配置を決める。LEDはP2[6] = 赤SWはP2[7]なので、右にあるピンをドラッグアンド ドロップで配置したいピンに割り付ける。

できたら、いったんビルドする!(Build-Builde xxx)

Page 17: PSoC4 ことはじめ -BLE版-

必要なソースコードも準備されたので、Debug – Program で 書き込んでみる。書き終わると自動的に実行されるのでSW を 押して LEDが 変化するのを確かめよう!!

Page 18: PSoC4 ことはじめ -BLE版-

-Work 01-

LEDを調光制御してみる!

Page 19: PSoC4 ことはじめ -BLE版-

調光制御するだけだと面白くないので、SWに連動して各LEDが切り替わるようにしてみる。ついでに、徐々に調光値が変化するように\(^o^)/

青字は気にせず、こんな風に配置してね。

Clockは今回10kHzに。

Page 20: PSoC4 ことはじめ -BLE版-

PWMの設定はこんな感じ。10kHzが投入されているのでPeriod=99で 10ms周期。Compare=50だとDuty50%。わかりやすいね。

Interrupt部でOn Terminal Count Eventにチェックすべし!これで1周期おわりごとに割り込み発生できる。

Page 21: PSoC4 ことはじめ -BLE版-

Timerのほうもこんな感じ。10kHzが投入されているのでPeriod=10 で 1ms周期なのが分かる。Interrupt On TC にチェック!

Page 22: PSoC4 ことはじめ -BLE版-

基本設定が完了したので、いったんビルド!!ソースが自動生成されたので、動作を作成するぞ。

PWMとタイマーの初期化と割り込みベクタの指定

一定間隔で徐々に輝度を上げて上限に達したら徐々に下げていく。下限ならまた上げていく

SWが押し下げられたら、出力LEDを切りかえる

Page 23: PSoC4 ことはじめ -BLE版-

実際の割り込みの処理はこんなかんじ。

PWMの更新周期で次回のDutyを設定する

単純に時間計測用の減算タイマーがあるのみ。

Page 24: PSoC4 ことはじめ -BLE版-

Debug – Program で 書き込んでみる。書き終わると自動的に実行されるのでSW を 押して LEDが 変化するのを確かめよう!!

Page 25: PSoC4 ことはじめ -BLE版-

-Work 02-

LEDを調光制御してみる!その2

Page 26: PSoC4 ことはじめ -BLE版-

PSoCにはきれいに調光するためだけに設計されたPrISMというコンポーネントがある。色は色相環に従って徐々にR->G->Bと遷移するようにしてみる。

SWに連動して各LEDが切り替わるのは同じ。青字は気にせず、こんな風に配置してね。

Wikipediaから抜粋

Page 27: PSoC4 ことはじめ -BLE版-

基本はあまりかわらない。一定時間ごとに色相情報からRGBを生成するだけ。Hは色相だけどSとVはフル値固定。

色相(H)を0~359までぐるぐるまわす

SWが押し下げられたら、出力LEDを切りかえる

Page 28: PSoC4 ことはじめ -BLE版-

割り込み部はタイマーだけ

Page 29: PSoC4 ことはじめ -BLE版-

PrISMに値を与える部分。IはHSVのSと等価のはず。まぁ、今回は関係ないけどね。

Page 30: PSoC4 ことはじめ -BLE版-

HSVRGB変換部。ネットにあったJavaのサンプルほぼそのまま。。。

Page 31: PSoC4 ことはじめ -BLE版-

-Work 03-

LEDを調光制御してみる!その3

Page 32: PSoC4 ことはじめ -BLE版-

BLEを使えるようにしてみる。まずは、BLEのコンポーネントを追加する。

できたら、いったんBuildする!

Page 33: PSoC4 ことはじめ -BLE版-

カスタムプロファイル でGATT Server設定する。

GAP は Peripheral でOK.

Profileタブで 新たに サービス追加。Server部で右クリックして、Custom Serviceを選択すればOK

Page 34: PSoC4 ことはじめ -BLE版-

追加された Custom Serviceを RGB LED Serviceにリネーム(わかりやすくするため)同じく その下の CharacterristicもRGB LED Characterristicにリネームしとく。

標準サンプルを使いたいのでUUIDは16bit 値で CBBB にする。

Page 35: PSoC4 ことはじめ -BLE版-

標準サンプルを使いたいのでUUIDは16bit 値で CBB1 にする。Fields = uint8 array = 4 Read / Write にチェック

Page 36: PSoC4 ことはじめ -BLE版-

Custom Descripterは削除しちゃって、代わりにUser Descriptionを追加!

Page 37: PSoC4 ことはじめ -BLE版-

RGB LED Controlとか、適当に名前をつけとく

Page 38: PSoC4 ことはじめ -BLE版-

BLE 03 とか、適当に名前をつけとくここの名前で、自分の接続先デバイスかどうかを判別するので適当に。。。(できるだけ短くしてね)

Page 39: PSoC4 ことはじめ -BLE版-

Advertisement Packetの項目で

Local NameService UUID

をチェックしとく。

Page 40: PSoC4 ことはじめ -BLE版-

Securityの項目で

No SecurityNo Input No OutputNo Bonding

を設定

これでコンポーネントの設定は終了。

OK で 終了できる

Page 41: PSoC4 ことはじめ -BLE版-

一旦、ビルドするといろいろファイルが付加される。

ただ、肝心のやりとりする部分がないので、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: 書き込み指示があったら更新する。

Page 42: PSoC4 ことはじめ -BLE版-

あとは main.cの初期化部にCyBle_Start( StackEventHandler );

を実装すれば、割り込み処理される!

CyBle_Start( StackEventHandler ); // BLE関連のイベントハンドラを別ファイルに定義for(;;){

CyBle_ProcessEvents(); // BLE ハンドル処理

スマホのCySmartで接続したら、LEDの調光画面がつかえるよ~~

Page 43: PSoC4 ことはじめ -BLE版-

スマホにCySmartアプリを導入して起動すると。。。

UUIDを合わせてあるので、標準アプリのRGB調光部がそのままつかえる

Page 44: PSoC4 ことはじめ -BLE版-

~あとがき~BLE部はかなり端折ってしまってるorzでも、標準のサンプルからもってくればそれほど難しくない。というか、ほかのBLEデバイスにはないくらい、隠蔽してくれている。

BLEデバイス側をつくるには、最小限、これでいいって思えるくらい。Service – Characteristicの部分は、これの延長で、適当にすればなんとかなりそう。

ただ、BLEの部分は割り込みで処理されるので、mainなどの通常処理との間では排他処理など、少し考えないとダメ。

そこらあたりは、おいおい、やりましょー。

お疲れ様でした!

~あとがき~