Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

PSoC4 ことはじめ -BLE版-

4,125 views

Published on

PSoC4BLEを使って、遊んでみよう! 的なWorkshop資料

Published in: Devices & Hardware
  • Be the first to comment

PSoC4 ことはじめ -BLE版-

  1. 1. PSoC ことはじめ (BLE版) Ver.2016.10.28 @tetnoguchi(twitter) / techa.nog(facebook)
  2. 2. PSoCとは。。。 Cypress社のSoC マイコンコア + CPLDなイメージ。 シリーズは4系列あり。 PSoC1: M8C  異色すぎる!! PSoC3: 8051 PSoC4: ARM CortexM0 PSoC5: ARM CortexM3 CypressのHPから拝借PSoC1  高機能PAL/GALみたいなもん
  3. 3. 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. 4. 4はアナログ系も大幅に簡略化
  5. 5. PSoC4にもシリーズがあるんだよね…. ほんまに普通 のマイコン OpAMPつけて アナログ強化 OpAMP+UDB Universal Digital Block(UDB) 12入力4出力の PLD * 2 と データパス(簡易ALU) を内蔵した特殊ブロック。 簡易版CPLD 要はCPUを介さずに いろんな処理を行えるよう にできる 便利ユニットなのだ!
  6. 6. 同じPSoC4でも 4100系と4200系では大違い! UDBこそがPSoCらしさそのものなので、 必ず4200系を選ぶべし! PSoC4-4100系 PSoC4-4200系
  7. 7. 今回は 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だと 高い分だけあって デバッガ機能もあって使いやすいとはおもう。
  8. 8. 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)
  9. 9. ソフト、つくってみる。。。
  10. 10. PSoC Creater 3.3をベースに使ってみる。 File - New – Project を選んで CY8C5888LTI-LP097を選択して進める
  11. 11. ここまでくれば、あとは挙動を作るのみ。 右端にあるコンポーネントを適当にマウスで、配置していく。 コンポーネントをダブルクリックすると、 設定画面もでてくるので、適宜設定すべし!
  12. 12. スケマティック(回路図)ができたら、 設定ファイル( xxx.cydwr )を開き、 ピン配置を決める。 右にあるピンをドラッグ アンド ドロップで 配置したいピンに割り付ける。 できたら、いったんビルドする!(ここ重要!!)
  13. 13. 関連ソースコードが 一気に生成されるので、あとは これらを使うソースコードを追記していけば めでたく完成することになる!!
  14. 14. -Work 00- LEDを点灯しよう!
  15. 15. Schematicの部分にコンポーネントを配置する。SWとLEDなので、 LED  Digital Output Pin SW  Digital Input Pin に割り振る。 SWはプルアップされていないので、IO定義で内蔵プルアップを 有効にしてやる。  Pin_2 をダブルクリックして Drive modeをResistive Pull upにする
  16. 16. SWでLEDを制御したいので、配線ツールで、 Pin_2 と Pin_1 をつなぐ。 スケマティック(回路図)ができたので 設定ファイル( xxx.cydwr )を開き、 ピン配置を決める。 LEDはP2[6] = 赤 SWはP2[7] なので、 右にあるピンをドラッグ アンド ドロップで配置したいピンに割り付ける。 できたら、いったんビルドする!(Build-Builde xxx)
  17. 17. 必要なソースコードも準備されたので、 Debug – Program で 書き込んでみる。書き終わると自動的に実行されるので SW を 押して LEDが 変化するのを確かめよう!!
  18. 18. -Work 01- LEDを調光制御してみる!
  19. 19. 調光制御するだけだと面白くないので、 SWに連動して各LEDが切り替わるようにし てみる。 ついでに、徐々に調光値が変化するように\ (^o^)/ 青字は気にせず、こんな風に 配置してね。 Clockは今回10kHzに。
  20. 20. PWMの設定はこんな感じ。 10kHzが投入されているので Period=99で 10ms周期。 Compare=50だとDuty50%。 わかりやすいね。 Interrupt部で On Terminal Count Event にチェックすべし! これで1周期おわりごとに割り込み 発生できる。
  21. 21. Timerのほうもこんな感じ。 10kHzが投入されているので Period=10 で 1ms周期なのが分かる。 Interrupt On TC にチェック!
  22. 22. 基本設定が完了したので、 いったんビルド!! ソースが自動生成された ので、動作を作成するぞ。 PWMとタイマーの初期化と 割り込みベクタの指定 一定間隔で徐々に輝度を上げて上限に達したら 徐々に下げていく。下限ならまた上げていく SWが押し下げられたら、出力LEDを切りかえる
  23. 23. 実際の割り込みの処理はこんなかんじ。 PWMの更新周期で 次回のDutyを設定する 単純に時間計測用の 減算タイマーがあるのみ。
  24. 24. Debug – Program で 書き込んでみる。書き終わると自動的に実行されるので SW を 押して LEDが 変化するのを確かめよう!!
  25. 25. -Work 02- LEDを調光制御してみる! その2
  26. 26. PSoCにはきれいに調光するためだけに 設計されたPrISMというコンポーネントがある。 色は色相環に従って徐々にR->G->Bと遷 移するようにしてみる。 SWに連動して各LEDが切り替わ るのは同じ。 青字は気にせず、こんな風に 配置してね。 Wikipediaから抜粋
  27. 27. 基本はあまりかわらない。 一定時間ごとに色相情報から RGBを生成するだけ。 Hは色相だけど SとVはフル値固定。 色相(H)を0~359までぐるぐるまわす SWが押し下げられたら、出力LEDを切りかえる
  28. 28. 割り込み部はタイマーだけ
  29. 29. PrISMに値を与える部分。 IはHSVのSと等価のはず。 まぁ、今回は関係ないけどね。
  30. 30. HSVRGB変換部。 ネットにあったJavaのサンプル ほぼそのまま。。。
  31. 31. -Work 03- LEDを調光制御してみる! その3
  32. 32. BLEを使えるようにしてみる。 まずは、BLEのコンポーネントを追加する。 できたら、いったんBuildする!
  33. 33. カスタムプロファイル で GATT Server設定する。 GAP は Peripheral でOK. Profileタブで 新たに サービス追加。 Server部で右クリックして、 Custom Service を選択すればOK
  34. 34. 追加された Custom Service を RGB LED Service にリネーム(わかりやすくするため) 同じく その下の Characterristicも RGB LED Characterristic にリネームしとく。 標準サンプルを使いたいので UUIDは16bit 値で CBBB にする。
  35. 35. 標準サンプルを使いたいので UUIDは16bit 値で CBB1 にする。 Fields = uint8 array = 4 Read / Write にチェック
  36. 36. Custom Descripter は削除しちゃって、 代わりに User Descriptionを 追加!
  37. 37. RGB LED Controlとか、適当に名前をつけとく
  38. 38. BLE 03 とか、適当に名前をつけとく ここの名前で、自分の接続先デバイスかどうかを判別するので 適当に。。。(できるだけ短くしてね)
  39. 39. Advertisement Packetの項目で Local Name Service UUID をチェックしとく。
  40. 40. Securityの項目で No Security No Input No Output No Bonding を設定 これでコンポーネントの設定は終了。 OK で 終了できる
  41. 41. 一旦、ビルドするといろいろファイルが付加される。 ただ、肝心のやりとりする部分がないので、 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: 書き込み指示があったら更新する。
  42. 42. あとは main.cの初期化部に CyBle_Start( StackEventHandler ); を実装すれば、割り込み処理される! CyBle_Start( StackEventHandler ); // BLE関連のイベントハンドラを別ファイルに定義 for(;;) { CyBle_ProcessEvents(); // BLE ハンドル処理 スマホのCySmartで接続したら、 LEDの調光画面がつかえるよ~~
  43. 43. スマホにCySmartアプリを導入して起動すると。。。 UUIDを合わせてあるので、 標準アプリのRGB調光部がそのまま つかえる
  44. 44. ~あとがき~ BLE部はかなり端折ってしまってるorz でも、標準のサンプルからもってくればそれほど難しくない。 というか、ほかのBLEデバイスにはないくらい、隠蔽してくれている。 BLEデバイス側をつくるには、最小限、これでいいって思えるくらい。 Service – Characteristic の部分は、これの延長で、適当にすればなんとかなりそう。 ただ、BLEの部分は割り込みで処理されるので、 mainなどの通常処理との間では排他処理など、少し考えないとダメ。 そこらあたりは、おいおい、やりましょー。 お疲れ様でした! ~あとがき~

×