2017年12月11日月曜日
PSoC5LP で USB-HIDデバイスでもしてみるか。。。( PSoC Advent Calender2017 )
PSoC Advent Calender 2017 の 記事の2こめです。
PSoC5LPにはUSB がついています。
これ、案外USB UARTくらいしかつかっていないんですが
普通にHIDデバイスとしても作ることができます。
今回はMouseにしてみます。
といっても、マウスなら、ちゃんとサンプルが用意されているんですよね。
スケマティックにUSBFSを配置して、右クリックメニューから出る
Find Code Example ...
を実行します。
すでにUSBFSが選ばれているので、関連するものがでてますね。
今回はとりあえず
USBFS_HID
を選択します。
3-Button mouseって書いてあるので、大丈夫そうですね。
よければ、Create Project を押します。
ん!エラー? はぁ???
このメッセージわかりにくいよね。まったく。
要はこれは
『そのままではインポートされていないので、Webからとってきてね!』
というメッセージ。じゃ、どうするの?ってなるんだけど、
左はしの地球のアイコンをクリックすると、勝手にダウンロードされてくるので
そのままプロジェクトをつくります。
できたプロジェクトはデバイスが PSoC3になっているので
利用するPSoC5の型番に変更します。
PrototypingKitでは、CY8C5888LTI-LP097ですね。
WorkSpace Explorerの Project部で右クリックして
Device Selecter
を出し、ここで選択しなおします。
できたら、ビルドします。
スケマティックをみても、USBFSしか配置されていないので、基本は
これでエラーもでないはずです。
自動でピン配置もUSBピンはセレクトされているはずなので
大丈夫なはず。
添付のPDFの最後のところに
================================
Expected Results
You should see that the device is recognized as a 3-button mouse. The mouse is continuously moving back and forth horizontally.
================================
ってなっているので、マウスになってカーソルを水平移動でうごかすよ。
ってよめますね。
うごきましたか?
で、この設定、どこできまるんだ?ってことなんですが
一番わかりにくいのは HID Report Descriptersなんですよね。
なんじゃそら、と。
Device Class Definition for HID 1.11 (PDF)
を参照してみてください。
page81 (表題ページ番号71)にマウスの定義サンプルが挙げられています。
ね、このとおりの定義を書いてるだけですね。
あとは 3バイト用意して、一定のタイミングで
値をセットしておくりかえせばいいんですね。
このやりかたをしっておくと、JoyStickもキーボードもつくれますね!
ラベル:
Advent Calender,
HID,
PSoC,
USB
2017年12月5日火曜日
Uartのボーレートチェンジを実装してみる( PSoC Advent Calender2017 )
とうとうこんな季節になってしまった。
いまだに炎上案件抱えてひーひーゆうてるのに。
PSoC Advent Calender 2017 の 記事を!って頼まれたのでそれをば。
さて、PSoC のUARTってコンポーネント、ポンっ!ってかんじで
いいので、とっても簡単なんですがね、ほかのマイコンなら
途中でボーレートチェンジ!なんて簡単にできるのに

この部分はAPIとしてはParityは公開されているけれど、
肝心の速度は公開されてないので、なんともならない。
きっかけは MonoWirelessのTWELiteの書き込みがPSoCからしたいよね!的な
ところから始まったんだけど。
PC <--USB--> PSoC <--UART-->TWELite
っていう感じでつかって、モード変更で書き込み対応したいとか。
で、やってみた。
Design Wide Resources (.cydwr)をひらいて Clockタブを見てみる。
やっぱり、UART_1_IntClockを引き込んでいる。
今回は115200bps = 115.2kHzがほしい設定なので
サンプリングを8倍した 921.6kHzを生成してるわけですね。(最下行)
この921.6kHzを生成するのに、64MHzを69分周して近似の
927.536kHzを出してるというのはわかる。
ということなら
このDividerを変更したらよくね?
UART_1のコードの下に、UART_1_IntClock.cというのができてる。
このなかに SetDividerRegister()関数という、もうそのままのネーミングの
関数あるじゃんと。
これをよべばよさげですよね。
===================================
===================================
ぼくの場合だと
#define HS115200 69
#define HS57600 139
#define HS38400 208
#define HS19200 417
#define HS9600 833
ってかんじですかね。
ここらは計算でする方法もあるし、あるていど決め打ちでもいいかも
ですね。
64000(kHz) / (欲しい周波数(kHz) * 8) = divider
ってかんじですね。
いまだに炎上案件抱えてひーひーゆうてるのに。
PSoC Advent Calender 2017 の 記事を!って頼まれたのでそれをば。
さて、PSoC のUARTってコンポーネント、ポンっ!ってかんじで
いいので、とっても簡単なんですがね、ほかのマイコンなら
途中でボーレートチェンジ!なんて簡単にできるのに
この部分はAPIとしてはParityは公開されているけれど、
肝心の速度は公開されてないので、なんともならない。
きっかけは MonoWirelessのTWELiteの書き込みがPSoCからしたいよね!的な
ところから始まったんだけど。
PC <--USB--> PSoC <--UART-->TWELite
っていう感じでつかって、モード変更で書き込み対応したいとか。
で、やってみた。
Design Wide Resources (.cydwr)をひらいて Clockタブを見てみる。
やっぱり、UART_1_IntClockを引き込んでいる。
今回は115200bps = 115.2kHzがほしい設定なので
サンプリングを8倍した 921.6kHzを生成してるわけですね。(最下行)
この921.6kHzを生成するのに、64MHzを69分周して近似の
927.536kHzを出してるというのはわかる。
ということなら
このDividerを変更したらよくね?
UART_1のコードの下に、UART_1_IntClock.cというのができてる。
このなかに SetDividerRegister()関数という、もうそのままのネーミングの
関数あるじゃんと。
これをよべばよさげですよね。
===================================
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void setBitRate(uint32 rate) | |
{ | |
uint16 div; | |
switch( rate ){ | |
case 57600: div = HS57600; break; | |
case 38400: div = HS38400; break; | |
case 19200: div = HS19200; break; | |
case 9600: div = HS9600; break; | |
case 115200: | |
default: | |
div = HS115200; | |
break; | |
} | |
UART_1_Stop(); | |
UART_1_IntClock_SetDividerRegister(div, 1); // 設定変更+リスタート | |
UART_1_Start(); | |
} | |
===================================
ぼくの場合だと
#define HS115200 69
#define HS57600 139
#define HS38400 208
#define HS19200 417
#define HS9600 833
ってかんじですかね。
ここらは計算でする方法もあるし、あるていど決め打ちでもいいかも
ですね。
64000(kHz) / (欲しい周波数(kHz) * 8) = divider
ってかんじですね。
ラベル:
Advent Calender,
PSoC,
UART,
ボーレートチェンジ
2017年10月11日水曜日
TWELite-RED
久々に更新。
MonoWirelessのTWELiteに高出力版のREDが追加されました。
うちもいろいろと使っているので、
『どのくらい変化するんかな?』
というのが、気になるところ。
うちの場合、双方向でバリバリ通信したい!ってのは少なくて
デバイス側からデータをとにかく送りたい!的な用途なので
距離が伸びてくれるのはありがたいんだけど、
まだ、TWELiteのチップだけ、ってのは発売されてない。
とりあえず、TWELiteDIPでテストしてみた。
MonoStick-RED <---- TWELiteDIP-RED ざっくり50mくらい
MonoStick-RED <---- TWELite(CHIP) + BLUE ざっくり20mくらい
という印象。
REDxREDの組み合わせで、おおお!ってなるくらい飛ぶのは
ある意味予測していたけれど、スティック側だけREDにしても5~6mは
距離が延びるのはちょっと意外。
しかも、RED自体の処理が安定している印象で、
BLUEだと離れるにしたがって受信がギコギコするような感じになるのに
REDだとほぼ安定状態が継続する、というかんじで、安心感がある。
すくなくとも、MonoStick側だけでもREDにする価値はありそう。
で、REDがラインナップに追加されたのにともない、
開発ツール類も TWESDKからMWSDKに変更になっている。
まぁ、TWEってのをMWにしたくらいしか見た目は変わりない。
ただ、問題は、MWSDKで提供されるファーム群のコンパイルは
そのままではTWESDKとなんら変わりなく、RED用にはならないこと。
ぼくのばあいは、ほとんど独自にファームを改変しているので
これは結構困る。。。
で、M社のO氏に教えてもらって、なんとかRED用ファームを
つくることができるようになったので、その備忘録として、
記録しておく。
1.Eclipseは
c:\MWSDK\ECLIPSE.cmd
を実行することで、おこなう!(これ重要)
2.Wks_TWELITEフォルダをワークスペースにする。
3.生成したいプロジェクトをひらく。
4.生成したいプロジェクトの右クリックでプロパティをひらき
(1) C/C++ ビルド => ビルドコマンド[ビルダー設定]を
make TWELITE=RED APP_UART_CONFIG=CONFIG_NORMAL
にする。BLUEの場合は
make TWELITE=BLUE APP_UART_CONFIG=CONFIG_NORMAL
(2) C/C++ ビルド => ビルドコマンド[振る舞い]で
Enable parallel build
のチェックをはずす。
(3) C/C++ ビルド => 環境 で
PATH
をえらんで、削除ボタンをおす。
すると、値の部分が新たに設定される。
ここまでできていればOKなのであとは、プロジェクトにもどって
ビルドすれば、xxx-REDというバイナリ(BLUEの場合はそれなり)が生成される。
ねー。めんどくさい。
モノワイヤレスさん、もうすこし、親切にしてほしいなぁ(笑)
MonoWirelessのTWELiteに高出力版のREDが追加されました。
うちもいろいろと使っているので、
『どのくらい変化するんかな?』
というのが、気になるところ。
うちの場合、双方向でバリバリ通信したい!ってのは少なくて
デバイス側からデータをとにかく送りたい!的な用途なので
距離が伸びてくれるのはありがたいんだけど、
まだ、TWELiteのチップだけ、ってのは発売されてない。
とりあえず、TWELiteDIPでテストしてみた。
MonoStick-RED <---- TWELiteDIP-RED ざっくり50mくらい
MonoStick-RED <---- TWELite(CHIP) + BLUE ざっくり20mくらい
MonoStick-BLUE <---- TWELite(CHIP) + BLUE ざっくり15mくらい
という印象。
REDxREDの組み合わせで、おおお!ってなるくらい飛ぶのは
ある意味予測していたけれど、スティック側だけREDにしても5~6mは
距離が延びるのはちょっと意外。
しかも、RED自体の処理が安定している印象で、
BLUEだと離れるにしたがって受信がギコギコするような感じになるのに
REDだとほぼ安定状態が継続する、というかんじで、安心感がある。
すくなくとも、MonoStick側だけでもREDにする価値はありそう。
で、REDがラインナップに追加されたのにともない、
開発ツール類も TWESDKからMWSDKに変更になっている。
まぁ、TWEってのをMWにしたくらいしか見た目は変わりない。
ただ、問題は、MWSDKで提供されるファーム群のコンパイルは
そのままではTWESDKとなんら変わりなく、RED用にはならないこと。
ぼくのばあいは、ほとんど独自にファームを改変しているので
これは結構困る。。。
で、M社のO氏に教えてもらって、なんとかRED用ファームを
つくることができるようになったので、その備忘録として、
記録しておく。
1.Eclipseは
c:\MWSDK\ECLIPSE.cmd
を実行することで、おこなう!(これ重要)
2.Wks_TWELITEフォルダをワークスペースにする。
3.生成したいプロジェクトをひらく。
4.生成したいプロジェクトの右クリックでプロパティをひらき
(1) C/C++ ビルド => ビルドコマンド[ビルダー設定]を
make TWELITE=RED APP_UART_CONFIG=CONFIG_NORMAL
にする。BLUEの場合は
make TWELITE=BLUE APP_UART_CONFIG=CONFIG_NORMAL
(2) C/C++ ビルド => ビルドコマンド[振る舞い]で
Enable parallel build
のチェックをはずす。
(3) C/C++ ビルド => 環境 で
PATH
をえらんで、削除ボタンをおす。
すると、値の部分が新たに設定される。
ここまでできていればOKなのであとは、プロジェクトにもどって
ビルドすれば、xxx-REDというバイナリ(BLUEの場合はそれなり)が生成される。
ねー。めんどくさい。
モノワイヤレスさん、もうすこし、親切にしてほしいなぁ(笑)
ラベル:
IEEE802.15.4,
MonoWireless,
MWSDK,
TWELite,
モノワイヤレス
2016年12月9日金曜日
ToF型測距センサ VL53L0Xをつかってみる。
ちょうど、仕事で STマイクロの ToF型測距センサ VL53L0Xをつかう機会が
あったので、その報告をば。
昨年ETのときかな?にSTマイクロのブースでみつけて
いいなー、と思っていたデバイスなんで、
ことしのET Westで、これのNUCLEO Packをもらってきたん。
たしかに、応答性がよくて、取り回しも便利。
自分で実装できるパッケージじゃないのと、内部用に2.8Vが必要という
めんどくささ、も我慢できるかなーー、というのはあったんだけど
問題は、I2Cデバイスであるにも関わらず、利用するための
内部のアドレス情報がまーーーったく開示されておらず
STM32のNUCLEO用のサンプルから自分用にポーティングしないとどうしようもない
というイケてないデバイスで、つかうのを躊躇してたんですよね。
今年のETで、STの担当者にこの件、きいてみたら
『これの前のデバイスで、アドレス情報など、サポートにじゃんじゃん質問がきたから
データシートへの記載、やめてるんですよねー』
とか。
それ、あかんやろ(>_<)
で、躊躇してたんだけど、Pololuで、このデバイスボードを発見!
https://www.pololu.com/product/2490
しかも、だいぶ簡素化された状態で、Arduino用のライブラリもgitに上がっているという
なんとまぁ、うれしい状態。
で、これをPSoCでつかいたいので、これをCの形式に変換しなおしてつかってみた。
PSoCもGCCをつかっているので、本来C++が使えるはずなんだけど
現状ではCオンリーなので、しかたない。
ソースはここ。
VL53L0X.C
VL53L0X.H
[<====ソース抜粋====>]
[<==== ここまで ====>]
VL53L0Xの先頭部でI2Cへのアクセス関数部を別名定義してる。
PSoCの場合 PSoC5やPSoC4で、I2Cへのアクセス関数名がそれなりに変化しちゃって
固定してると、結構めんどくさい感じになりやすいので
VL53L0XでつかうI2Cの関数を、指定できるようにしてみた。
ほんとはClassがつかえれば、いいだろうし、Cであっても
関数ポインタつかえばできるのも理解してるけど、
なんとなく可読性がおちちゃうのが気になって、こういうベタなやり方にしてみた。
あと、タイムアウトを判定するために外部で
uint32_t timeout_start_ms ; // 経過時間の観測変数
を減算してやる必要があります。
main.cなどでタイマーを利用してるソースの先頭に
extern uint32_t timeout_start_ms ;
を定義して、1msのタイマーの中で
if ( timeout_start_ms ) timeout_start_ms--;
としてください。
[<====ソースサンプル====>]
[<==== ここまで ====>]
みたいなかんじかな。
標準状態だとサンプルが30ms間隔で行われるので、
それ以上は待ってやったほうが、いい、ってかんじですね。
観測早いし確実なのはいいなぁ。
超音波はつかいにくいし。
あったので、その報告をば。
昨年ETのときかな?にSTマイクロのブースでみつけて
いいなー、と思っていたデバイスなんで、
ことしのET Westで、これのNUCLEO Packをもらってきたん。
たしかに、応答性がよくて、取り回しも便利。
自分で実装できるパッケージじゃないのと、内部用に2.8Vが必要という
めんどくささ、も我慢できるかなーー、というのはあったんだけど
問題は、I2Cデバイスであるにも関わらず、利用するための
内部のアドレス情報がまーーーったく開示されておらず
STM32のNUCLEO用のサンプルから自分用にポーティングしないとどうしようもない
というイケてないデバイスで、つかうのを躊躇してたんですよね。
今年のETで、STの担当者にこの件、きいてみたら
『これの前のデバイスで、アドレス情報など、サポートにじゃんじゃん質問がきたから
データシートへの記載、やめてるんですよねー』
とか。
それ、あかんやろ(>_<)
で、躊躇してたんだけど、Pololuで、このデバイスボードを発見!
https://www.pololu.com/product/2490

しかも、だいぶ簡素化された状態で、Arduino用のライブラリもgitに上がっているという
なんとまぁ、うれしい状態。
で、これをPSoCでつかいたいので、これをCの形式に変換しなおしてつかってみた。
PSoCもGCCをつかっているので、本来C++が使えるはずなんだけど
現状ではCオンリーなので、しかたない。
ソースはここ。
VL53L0X.C
VL53L0X.H
[<====ソース抜粋====>]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ================ 関数名の振り替え | |
#define IIC_MasterSendStart( x, y ) EZI2C_1_I2CMasterSendStart( x, y ) | |
#define IIC_MasterStop() EZI2C_1_I2CMasterSendStop() | |
#define IIC_MasterClearStatus() EZI2C_1_I2CMasterClearStatus() | |
#define IIC_MasterWriteByte(x) EZI2C_1_I2CMasterWriteByte( x ) | |
#define IIC_MasterStatus() EZI2C_1_I2CMasterStatus() | |
#define IIC_MasterReadBuf(x, y, z, f) EZI2C_1_I2CMasterReadBuf(x, y, z, f) | |
#define IIC_MasterWriteBuf(x, y, z, f) EZI2C_1_I2CMasterWriteBuf(x, y, z, f) | |
#define IIC_MSTR_NO_ERROR EZI2C_1_I2C_MSTR_NO_ERROR | |
#define IIC_MODE_COMPLETE_XFER EZI2C_1_I2C_MODE_COMPLETE_XFER | |
#define IIC_MODE_REPEAT_START EZI2C_1_I2C_MODE_REPEAT_START | |
#define IIC_MSTAT_RD_CMPLT EZI2C_1_I2C_MSTAT_RD_CMPLT | |
#define IIC_MSTAT_XFER_INP EZI2C_1_I2C_MSTAT_XFER_INP | |
// =============== I2C のアクセス関数 | |
extern uint32 EZIIC_MasterStop(void); | |
extern uint32 EZI2C_1_I2CMasterStatus(void); | |
extern uint32 EZI2C_1_I2CMasterClearStatus(void); | |
extern uint32 EZI2C_1_I2CMasterWriteBuf(uint32 slaveAddress, uint8 * wrData, uint32 cnt, uint32 mode); | |
extern uint32 EZI2C_1_I2CMasterReadBuf(uint32 slaveAddress, uint8 * rdData, uint32 cnt, uint32 mode); | |
extern uint32 EZI2C_1_I2CMasterGetReadBufSize(void); | |
extern uint32 EZI2C_1_I2CMasterGetWriteBufSize(void); | |
extern void EZI2C_1_I2CMasterClearReadBuf(void); | |
extern void EZI2C_1_I2CMasterClearWriteBuf(void); | |
extern uint32 EZI2C_1_I2CMasterSendStart(uint32 slaveAddress, uint32 bitRnW); | |
extern uint32 EZI2C_1_I2CMasterSendRestart(uint32 slaveAddress, uint32 bitRnW); | |
extern uint32 EZI2C_1_I2CMasterSendStop(void); | |
extern uint32 EZI2C_1_I2CMasterWriteByte(uint32 theByte); | |
extern uint32 EZI2C_1_I2CMasterReadByte(uint32 ackNack); | |
// 外部参照 | |
uint32_t timeout_start_ms ; // 経過時間の観測変数 |
[<==== ここまで ====>]
VL53L0Xの先頭部でI2Cへのアクセス関数部を別名定義してる。
PSoCの場合 PSoC5やPSoC4で、I2Cへのアクセス関数名がそれなりに変化しちゃって
固定してると、結構めんどくさい感じになりやすいので
VL53L0XでつかうI2Cの関数を、指定できるようにしてみた。
ほんとはClassがつかえれば、いいだろうし、Cであっても
関数ポインタつかえばできるのも理解してるけど、
なんとなく可読性がおちちゃうのが気になって、こういうベタなやり方にしてみた。
あと、タイムアウトを判定するために外部で
uint32_t timeout_start_ms ; // 経過時間の観測変数
を減算してやる必要があります。
main.cなどでタイマーを利用してるソースの先頭に
extern uint32_t timeout_start_ms ;
を定義して、1msのタイマーの中で
if ( timeout_start_ms ) timeout_start_ms--;
としてください。
[<====ソースサンプル====>]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extern uint32_t timeout_start_ms ; // 経過時間の観測変数 | |
extern uint8_t VL53L0X_init(uint8_t io_2v8 ); //= TRUE); | |
extern void VL53L0X_startContinuous(uint32_t period_ms ); //= 0); | |
extern void VL53L0X_stopContinuous(void); | |
extern uint16_t VL53L0X_readRangeContinuousMillimeters(void); | |
extern uint16_t VL53L0X_readRangeSingleMillimeters(void); | |
extern uint8_t VL53L0X_setSignalRateLimit(float limit_Mcps); | |
extern uint8_t VL53L0X_setVcselPulsePeriod(enum vcselPeriodType type, uint8_t period_pclks); | |
extern uint8_t VL53L0X_setMeasurementTimingBudget(uint32_t budget_us); | |
extern uint8_t VL53L0X_timeoutOccurred(void); | |
// Timer1ms | |
CY_ISR( timer_isr ) | |
{ | |
static int32 led_c = 0; | |
static int led_w = 0; | |
Timer_1_STATUS; // TCビットをクリアするためにSTATUSを空読みしておく | |
if ( timeout_start_ms) timeout_start_ms--; | |
} | |
void main(){ | |
uint16 pdist = 0; | |
CyGlobalIntEnable; /* Uncomment this line to enable global interrupts. */ | |
isr_Timer1_StartEx( timer_isr ); // タイマーの割り込みを関連づけ | |
Timer_1_Start(); // タイマースタート | |
EZI2C_1_Start(); //D6T用 I2C スタート | |
// イニシャライズ | |
VL53L0X_init( 1 ); //2.8Vモードで初期化 | |
VL53L0X_startContinuous(0); // 連続動作 | |
CyDelay(50); // 周辺デバイスの立ち上がり待ち | |
for(;;){ | |
pdist = VL53L0X_readRangeContinuousMillimeters(); // 連続読み出し | |
CyDelay(50); | |
} | |
} | |
[<==== ここまで ====>]
みたいなかんじかな。
標準状態だとサンプルが30ms間隔で行われるので、
それ以上は待ってやったほうが、いい、ってかんじですね。
観測早いし確実なのはいいなぁ。
超音波はつかいにくいし。
2016年11月30日水曜日
PSoC4 BLE について(PSoC Advent Calender)
あー、もう1年もほったらかし。
ごめんなさい m( _ _ )m
なんだか無線系も結構いろいろやったし、USBもいろいろでてきたけど
決定的なのはルネサス系の石の採用レートが下がってきたかなぁ、って。
PSoC押しなので、仕方ないけど、あんまり無理強いもしてないけれど、
やっぱり、じり貧なかんじは否めないなぁ。
TOCOS MonoWireless も単体のファームだとなかなか小難しいかんじで
使いにくいけど、省電力行くなら仕方ない!って続けてるけどね。
そろそろ出力増強版がでてくるらしいので、それを機に、
サイトも含めてきちんと整理して、わかりやすくしてほしいなぁ。
閑話休題。
Advent Calender for PSoC が立ち上がっちゃったので
仕方なく、なんか書かなくちゃ、ってことで。
ちょうど、仲間うちでの簡易ワークショップの資料をつくっていたので
それを公開。
BLE以前に、PSoC、っていう知名度のなさもあって、最初の部分の
つまづくのを回避できれば、っていう意図で、何回か、ワークショップも
開いてきたんだけど。まぁ、BLEの資料って案外ないし、
『どうだかなぁ。。。』
って躊躇してる人も多いかもしれず、ってわけで、書いてみた。
最後の肝心のBLE周りは端折ってる(笑
具体的にはコード、みてね!
実際、この後、そのままだと、硬直しちゃうので、いろいろあるで!
ってのはあるので、好評なら次回もやるかも。
ダウンロード用の PDFファイル本体とサンプルは、ここ(Advend-PSoC)に公開。
で、実際ワークショップをやってみたんだけど、やっぱりいろいろあったわ。
1.ボードが認識しない
ボード買ってきたら、まず、つないでみたいよね!
ってわけで、つないだら、イミフなメッセージがでて、
PSoC Createrから認識できない、という状態が発生。
CY8CKITなどのpioneer Kitだと、書き込み&デバッガ用の KitProg が
ついてて、USB接続すると、そのままデバッグとかできるで!というのが
ウリなはずなんだが、一瞬焦る状況になる。

これ、KitProgのファームバージョンとPSoC Createrが要求するファームバージョンが
異なるから、ちゃんと合わせてね!っていうメッセージなんだけど
『じゃ、どしたらええねん。。。orz』
ってなる。
で、解決法は簡単。
PSoC Createrをインストールしたら、自動的に
PSoC Programer
も、インストールされているはずなので、これを起動する。
Start メニューのCypressのなかに

こんなふうにあるはず。
起動して、
Utilities の タブ を選択したら

左のリストに表示されている KitProg を選択したうえで
Upgrade Firmware
ボタンを押せば、アップデートが開始される。
ただしく完了したら下欄に、こんなふうにメッセージがでる。

これで、新版に更新完了したので、安心できる。
2.ボード違い

をベースに書いてるけれど、参加者のボードは
CY8CKIT-042-BLE

だった。orz
これも基本構成がおなじだし、複雑なことをやらなければ
問題ないんだけど、リソースが違うので、ちゃんと合わせてやらないとダメ。

プロジェクトを開いたら
左端のワークスペースのなかの
Project 'Design01' [CY8C4248L..]
みたいなところを右クリック。
でてきた、Device Selecter を選択すると、デバイスを変更できる。
この手順は、作成したプロジェクトのCPUを変更する場合にも
つかうので、要チェック! ですな。
今回のデバイス変更は
BLE-A : CY8C4248LQI-BL583
BLE : CY8C4247LQI-BL483
ということなので、これを選べばOK。
あと、Work03 では、実際にBLEからLEDをいじれるように
しているけれど、BLEチップの対応の違いが一部あって、
BLE のダイアログの GAP Setting - Security 部で
Enable Link Layer Privacy
のチェックを外す必要があります。

こんだけやれば、なんとか動くかんじ。
あとはいろいろBLEとは!みたいなことを勉強しないと、
先には進めないけれど、楽しくはあるよね。
あと、WindowsでBLEやろうとすると、結構ハードル高いことかな。
肝心のPRoCのドングルも一応 .NET Frameworkの資料がやっとでてきたけれど、
関数だけ、だらだら~って説明されてもつかえへん気がする。
Windows10の Linux for Windowsで bluez つかえへんかな?
使えたららくちんなのに。
まぁ、ドングルのほうはのんびりつかってみるか。。。
ごめんなさい m( _ _ )m
なんだか無線系も結構いろいろやったし、USBもいろいろでてきたけど
決定的なのはルネサス系の石の採用レートが下がってきたかなぁ、って。
PSoC押しなので、仕方ないけど、あんまり無理強いもしてないけれど、
やっぱり、じり貧なかんじは否めないなぁ。
使いにくいけど、省電力行くなら仕方ない!って続けてるけどね。
そろそろ出力増強版がでてくるらしいので、それを機に、
サイトも含めてきちんと整理して、わかりやすくしてほしいなぁ。
閑話休題。
Advent Calender for PSoC が立ち上がっちゃったので
仕方なく、なんか書かなくちゃ、ってことで。
ちょうど、仲間うちでの簡易ワークショップの資料をつくっていたので
それを公開。
BLE以前に、PSoC、っていう知名度のなさもあって、最初の部分の
つまづくのを回避できれば、っていう意図で、何回か、ワークショップも
開いてきたんだけど。まぁ、BLEの資料って案外ないし、
『どうだかなぁ。。。』
って躊躇してる人も多いかもしれず、ってわけで、書いてみた。
最後の肝心のBLE周りは端折ってる(笑
具体的にはコード、みてね!
実際、この後、そのままだと、硬直しちゃうので、いろいろあるで!
ってのはあるので、好評なら次回もやるかも。
ダウンロード用の PDFファイル本体とサンプルは、ここ(Advend-PSoC)に公開。
で、実際ワークショップをやってみたんだけど、やっぱりいろいろあったわ。
1.ボードが認識しない
ボード買ってきたら、まず、つないでみたいよね!
ってわけで、つないだら、イミフなメッセージがでて、
PSoC Createrから認識できない、という状態が発生。
CY8CKITなどのpioneer Kitだと、書き込み&デバッガ用の KitProg が
ついてて、USB接続すると、そのままデバッグとかできるで!というのが
ウリなはずなんだが、一瞬焦る状況になる。

これ、KitProgのファームバージョンとPSoC Createrが要求するファームバージョンが
異なるから、ちゃんと合わせてね!っていうメッセージなんだけど
『じゃ、どしたらええねん。。。orz』
ってなる。
で、解決法は簡単。
PSoC Createrをインストールしたら、自動的に
PSoC Programer
も、インストールされているはずなので、これを起動する。
Start メニューのCypressのなかに

こんなふうにあるはず。
起動して、
Utilities の タブ を選択したら

左のリストに表示されている KitProg を選択したうえで
Upgrade Firmware
ボタンを押せば、アップデートが開始される。
ただしく完了したら下欄に、こんなふうにメッセージがでる。

これで、新版に更新完了したので、安心できる。
2.ボード違い
今回のワークショップ、サイプレスの
CY8CKIT-042-BLE-A
をベースに書いてるけれど、参加者のボードは
CY8CKIT-042-BLE

だった。orz
これも基本構成がおなじだし、複雑なことをやらなければ
問題ないんだけど、リソースが違うので、ちゃんと合わせてやらないとダメ。

プロジェクトを開いたら
左端のワークスペースのなかの
Project 'Design01' [CY8C4248L..]
みたいなところを右クリック。
でてきた、Device Selecter を選択すると、デバイスを変更できる。

この手順は、作成したプロジェクトのCPUを変更する場合にも
つかうので、要チェック! ですな。
今回のデバイス変更は
BLE-A : CY8C4248LQI-BL583
BLE : CY8C4247LQI-BL483
ということなので、これを選べばOK。
あと、Work03 では、実際にBLEからLEDをいじれるように
しているけれど、BLEチップの対応の違いが一部あって、
BLE のダイアログの GAP Setting - Security 部で
Enable Link Layer Privacy
のチェックを外す必要があります。

こんだけやれば、なんとか動くかんじ。
あとはいろいろBLEとは!みたいなことを勉強しないと、
先には進めないけれど、楽しくはあるよね。
あと、WindowsでBLEやろうとすると、結構ハードル高いことかな。
肝心のPRoCのドングルも一応 .NET Frameworkの資料がやっとでてきたけれど、
関数だけ、だらだら~って説明されてもつかえへん気がする。
Windows10の Linux for Windowsで bluez つかえへんかな?
使えたららくちんなのに。
まぁ、ドングルのほうはのんびりつかってみるか。。。
ラベル:
Advent Calender,
BLE,
Bluetooth,
PSoC
2015年12月11日金曜日
さすがに放置しすぎ...
ひさびさの更新。
ずーっと、twitterとfacebookにかまけて、
結局放置プレイ状態に。
昨日、
『HPの会社案内PDFがダウンできないよ!』
といわれて、慌ててチェック&更新。
なるほど、なにかの拍子に削除されてたみたい(なんじゃそら、FC2!)
サイズの問題なんかなー。うーん。
閑話休題。
さてさて、この2年、いろいろあったけど、
やっぱり、仕事系でPSoCが使えるようになったのは大きいなぁ。
前回更新の時も、RL78,PSoC3/5って書いてるけど
最近はPSoC4がおおいなぁ。ま、意図して採用してるんだけど。
昨年末から久しぶりに、dsPICを使った案件もあったけど
なつかし~~
くらいのノスタルジックな印象が強いかんじだったのは意外だった。
ま、そういう石だけどね。
今年もおわっちゃいそうだけど、相変わらず、無線系の引き合いも
そこそこあって、いろいろ遊べているのは楽しい限り。
TOCOS改めモノワイヤレスの TWELiteも特性がだんだんわかってきたし。
EnOceanは、ちょっと物足りないかんじだし。
Bluetoothだと、RN42は扱いやすいな。
BLEだと断然、PSoC4BLEだとは思う。
でも
Espressif ESP8266 (ESP-WROOM)はおもしろいなぁ。
といっても、いまさらArduinoなんてしゃらくさいので、相変わらず、
無線ユニットとしてしかつかってないけど。
でも、別に無線が得意なわけでもなんでもないのに
なぜか、無線系が飛び込んでくるのはなんでなんやろ(笑
とりあえず、楽しめてるからいいけど\(^o^)/
さて、ことしももう少しになっちゃったけれど
とりあえず、楽しめてるからいいけど\(^o^)/
さて、ことしももう少しになっちゃったけれど
みなさん、よいお年を!(年末モード)
2013年12月26日木曜日
LPC800MAX & 来年も。。。
あ~、怒濤の1年でした。。。
ことしもいろいろあったなぁ。
GR-KURUMIのキックオフでがじぇるねに参加したり、
mbed 大阪ミーティングに参加したりと、例年になくいろんなところに
首を突っ込みました(笑
それに、無線系がXBee一辺倒だったのが TOCOSのTWE-Liteが出てきて
すこし楽しめるようになったとか、
TOCOSのほうも不細工?(笑 な ユニットだけじゃなくて、
トコステなるものも出てきて、俄然イケテル感がでてくればいいなぁ、
とかおもってたりします。
ToCoStick(トコスティック)
秋月でも扱いがはじまってますね。
欲をいえば、とりあえずUART-to-無線 のサンプルが
もっとわかりやすくサンプル化してもらえるとうれしかったり。
実際につかってみて、これでいろいろする、というより
やっぱりXBeeみたいにつかいたい!ってほうが多いとおもうんだけどね。
あと、やっと仕事周りでも、PSoC3/5がつかえるようになったとか、
ちょっとづつウチの会社らしいものができるようになってきたかなぁ
という感じになりつつあります。
CQ出版からARM PSoCで作るMyスペシャル・マイコンという
PSoC5LP付き書籍がでたのも大きいね。
ただ、このボードせっかくVDDIOが切り替えられるのに
3.3Vに固定されてるのがもったいない。
そういう意味では、ITショップ えとせとら の PSoC3ボードみたいに
ちゃんと設計してほしかったなぁ、とか思わないではないけどね。
設計まわりでいうと、回路図に関しては、長らくつかってきた
D2CADからDesignSparkPCBに移行しようと画策中なんだけど
やっと時間ができて、ごそごそしてる最中です。
このあたりは年明けにでもちょっと書いてみようかなぁ。
だれか、勉強会やろ~~
そうそう、プログラマとして必須なTEXT Editorも更新してみた。
こんだけ開発環境ごとにS-JISとUTF8が混在してくると
イラっとすることも多くなってたので、緊急課題だったんだけど
1.Grep検索&タグジャンプがイケテル!
2.矩形コピペがカンタン!
3.置換で正規表現ライクにちょろちょろできる
4.1ファイルを分割表現できる(スプリットエディット)
ってのが充足されてるエディタがほしい。
いろいろつかってみたけど、たろサさん(@momoonga)から紹介してもらった
Programmer's Notepadがこれらを全部充足してて、即乗り換えてみた。
イケテル。たしかにいけてるわ\(^o^)/
こんな感じで、スプリット表示できるし。
ただ、日本語表示には若干の難もあるかんじではあるけれど。
FixedSysとかにすれば日本語も普通に表示編集できるんだけど
たとえば
みたいにカーソルカレットがあるところだけ化けるんだよね。
まあ、フォントがこわれてるだけで、動かすともどるので
実害らしきものはないけれど、結構おどろく。
まぁソフト作成に限って言えば、問題ない範囲かなぁ。
閑話休題。
年末も押し迫って、NXPのキャンペーンでLPC800MAXボードが当たった\(^o^)/

LPC800シリーズだけでもおもしろいのに(だってスイッチマトリクスでIO自由自在だし)
LPC11U35でmbed化が既に完了。
しかも外部にADC/DACチップをのっけて、IOエキスパンダものっけてと大判振る舞い(笑
ちょっと何かしたくなるボードだなぁと。
Arduinoのフォームファクタなので、ナニにつかえるのか、ちょっと考えてみてるとこです。
これとPSoC5でごそごそ作ったものをルネサスナイトに持ち込んで。。。とか
訳わからん妄想を、、、な今日この頃です(笑
というわけで、みなさんも、よいお年をお迎えください。
ことしもいろいろあったなぁ。
GR-KURUMIのキックオフでがじぇるねに参加したり、
mbed 大阪ミーティングに参加したりと、例年になくいろんなところに
首を突っ込みました(笑
それに、無線系がXBee一辺倒だったのが TOCOSのTWE-Liteが出てきて
すこし楽しめるようになったとか、
TOCOSのほうも不細工?(笑 な ユニットだけじゃなくて、
トコステなるものも出てきて、俄然イケテル感がでてくればいいなぁ、
とかおもってたりします。
秋月でも扱いがはじまってますね。
欲をいえば、とりあえずUART-to-無線 のサンプルが
もっとわかりやすくサンプル化してもらえるとうれしかったり。
実際につかってみて、これでいろいろする、というより
やっぱりXBeeみたいにつかいたい!ってほうが多いとおもうんだけどね。
あと、やっと仕事周りでも、PSoC3/5がつかえるようになったとか、
ちょっとづつウチの会社らしいものができるようになってきたかなぁ
という感じになりつつあります。
CQ出版からARM PSoCで作るMyスペシャル・マイコンという
PSoC5LP付き書籍がでたのも大きいね。
ただ、このボードせっかくVDDIOが切り替えられるのに
3.3Vに固定されてるのがもったいない。
そういう意味では、ITショップ えとせとら の PSoC3ボードみたいに
ちゃんと設計してほしかったなぁ、とか思わないではないけどね。
設計まわりでいうと、回路図に関しては、長らくつかってきた
D2CADからDesignSparkPCBに移行しようと画策中なんだけど
やっと時間ができて、ごそごそしてる最中です。
このあたりは年明けにでもちょっと書いてみようかなぁ。
だれか、勉強会やろ~~
そうそう、プログラマとして必須なTEXT Editorも更新してみた。
こんだけ開発環境ごとにS-JISとUTF8が混在してくると
イラっとすることも多くなってたので、緊急課題だったんだけど
1.Grep検索&タグジャンプがイケテル!
2.矩形コピペがカンタン!
3.置換で正規表現ライクにちょろちょろできる
4.1ファイルを分割表現できる(スプリットエディット)
ってのが充足されてるエディタがほしい。
いろいろつかってみたけど、たろサさん(@momoonga)から紹介してもらった
Programmer's Notepadがこれらを全部充足してて、即乗り換えてみた。
イケテル。たしかにいけてるわ\(^o^)/
こんな感じで、スプリット表示できるし。
ただ、日本語表示には若干の難もあるかんじではあるけれど。
FixedSysとかにすれば日本語も普通に表示編集できるんだけど
たとえば
みたいにカーソルカレットがあるところだけ化けるんだよね。
まあ、フォントがこわれてるだけで、動かすともどるので
実害らしきものはないけれど、結構おどろく。
まぁソフト作成に限って言えば、問題ない範囲かなぁ。
閑話休題。
年末も押し迫って、NXPのキャンペーンでLPC800MAXボードが当たった\(^o^)/
LPC800シリーズだけでもおもしろいのに(だってスイッチマトリクスでIO自由自在だし)
LPC11U35でmbed化が既に完了。
しかも外部にADC/DACチップをのっけて、IOエキスパンダものっけてと大判振る舞い(笑
ちょっと何かしたくなるボードだなぁと。
Arduinoのフォームファクタなので、ナニにつかえるのか、ちょっと考えてみてるとこです。
これとPSoC5でごそごそ作ったものをルネサスナイトに持ち込んで。。。とか
訳わからん妄想を、、、な今日この頃です(笑
というわけで、みなさんも、よいお年をお迎えください。
登録:
投稿 (Atom)