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()関数という、もうそのままのネーミングの
関数あるじゃんと。
これをよべばよさげですよね。
===================================
===================================
ぼくの場合だと
#define HS115200 69
#define HS57600 139
#define HS38400 208
#define HS19200 417
#define HS9600 833
ってかんじですかね。
ここらは計算でする方法もあるし、あるていど決め打ちでもいいかも
ですね。
64000(kHz) / (欲しい周波数(kHz) * 8) = divider
ってかんじですね。
ラベル:
Advent Calender,
PSoC,
UART,
ボーレートチェンジ
登録:
投稿 (Atom)