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もキーボードもつくれますね!


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
ってかんじですね。






2017年10月11日水曜日

TWELite-RED

久々に更新。

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の場合はそれなり)が生成される。

ねー。めんどくさい。

モノワイヤレスさん、もうすこし、親切にしてほしいなぁ(笑)




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間隔で行われるので、
それ以上は待ってやったほうが、いい、ってかんじですね。
観測早いし確実なのはいいなぁ。

超音波はつかいにくいし。









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-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 つかえへんかな?
使えたららくちんなのに。
まぁ、ドングルのほうはのんびりつかってみるか。。。




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^)/


さて、ことしももう少しになっちゃったけれど
みなさん、よいお年を!(年末モード)


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ファイルを分割表現できる(スプリットエディット)
ってのが充足されてるエディタがほしい。
いろいろつかってみたけど、たろサさん()から紹介してもらった
Programmer's Notepadがこれらを全部充足してて、即乗り換えてみた。

イケテル。たしかにいけてるわ\(^o^)/
こんな感じで、スプリット表示できるし。




















ただ、日本語表示には若干の難もあるかんじではあるけれど。
FixedSysとかにすれば日本語も普通に表示編集できるんだけど
たとえば





みたいにカーソルカレットがあるところだけ化けるんだよね。
まあ、フォントがこわれてるだけで、動かすともどるので
実害らしきものはないけれど、結構おどろく。
まぁソフト作成に限って言えば、問題ない範囲かなぁ。


閑話休題。

年末も押し迫って、NXPのキャンペーンでLPC800MAXボードが当たった\(^o^)/



LPC800シリーズだけでもおもしろいのに(だってスイッチマトリクスでIO自由自在だし)
LPC11U35でmbed化が既に完了。
しかも外部にADC/DACチップをのっけて、IOエキスパンダものっけてと大判振る舞い(笑

ちょっと何かしたくなるボードだなぁと。

Arduinoのフォームファクタなので、ナニにつかえるのか、ちょっと考えてみてるとこです。

これとPSoC5でごそごそ作ったものをルネサスナイトに持ち込んで。。。とか
訳わからん妄想を、、、な今日この頃です(笑



というわけで、みなさんも、よいお年をお迎えください。