正月にでんでんタウンで仕入れてきた800円のPSoC 4のボードだ
オシロも手に入れたことだしI2CのLCDを「動けばいい」という感じで使うのではなくて
I2Cの規格自体を多少は理解して使うことにした
PSoC CreatorのExampleを探すとPSoC 4 Pioneer Kitを2枚使って
I2Cで通信させるサンプルがあった
PSoC 4 Creator KitとPSoC 4 Protyping Kitを持っているので
これで通信さればいいかなあという目論見でPSoC 4 Prototyping Kitも使ってみることにした
PSoC 4 Prototyping KitのExample
PSoC Creatorやその他もろもろのツールはすでにインストールしてあるので
付属のフライヤーにある通りwww.cypress.com/CY8CKIT-049-42xxから
CY8CKIT-049-42xx Kit Only (Kit Design Files, Documentation, Examples)
というのを見つけてインストールしてみたが、フルキットをInstallするように指示された
CY8CKIT-049-42xx Kit Setup (Kit Design Files, Creator, Programmer, Documentation, Examples)
をインストールすると、どうもCypress USB-Serial Driverというのが必要らしくて
フルキットじゃないとダメなんだろう
Pioneer KitのほうはPSoC 5 LPを書き込み(&その他もろもろ)に使っているが
Prototyping KitはCY7C65211というUSBコントローラーを使っているのでこれのドライバーだ
800円だしさすがにPSoC 5 LPは載せられないということか(^q^;
最初よくわからなかったがドキュメントを読んでExampleをやってみると
プログラムにUSBコントローラーを制御するブートローダーをくっつけた状態で
PSoC 4に書き込まないといけないようだ
デフォルトのブートローダーだと
基板上のボタンを押しながらPCのUSBコネクタに差し込むと書き込み待機状態
ボタンを押さないで差し込めば書き込んだプログラムが動くという仕組みになっている
初期状態だと
押す→基板上のLEDが早く点滅(約0.5秒サイクル)→書き込み待機状態
押さない→基板上のLEDがゆっくり点滅(約1秒サイクル)→ユーザープログラムの実行状態となっている
プログラムを書き込むときは、標準のPSoC Programmerではなくて
PSoC CreatorのToolメニューから起動できるBooltloder Hostを使わないといけない
もしPSoC Programmerで書き込むと2度とプログラムを書き込めなくなる。たぶん(^q^;
Mini Prog 3という書き込み器を使えばブートローダーを復活できると思うが
Digi-keyとかじゃないと売ってないし、1万円以上する(@q@;
なので最初に使うときはPrototyping Kitではなくて多少高いけどPioneer Kitをお勧めします
高いといってもArduino Unoとほとんど同じ値段だ
I2Cのプロトコル
I2Cについても多少調べた
ちょっと端折っていうと
通信の開始時にMasterデバイスがSlaveデバイスのアドレス(7bit)を指定してSDAに流す
Slaveが自分のアドレスだったら、「あ、俺だわwww」と思ってACKを同じSDAに流してマスターからの通信開始を促す
Slaveが自分のアドレスではなかったら、「おまえらにまかせたwww」と思って何もしない
Masterは返事がないとNACK(「しくじったか(^q^;」)と理解する
NACKの場合Masterは(プログラム次第だが)返事がくるまで最初からまた同じことを繰り返す
前回オシロで波形を見てみた図だと
ArduinoでI2C-LCDとの通信がうまくいった場合
上がSDA、下がSCL
9bit目のSDAがLに引っ張られている(LがACKです)
<追記:2017/02/08>
おそらくオシロのプローブの倍率設定がx1側になっていたようで、電圧値が10倍になって波形もなまって表示されています。
</追記>
PSoCでI2C-LCDとの通信が失敗している場合
9bit目のSDAがHのまま!
アドレスの7bitとACK/NACKの9bit目の間の8bit目は何かというと
HがRead(SlaveからMasterへ)とMasterが指定するbitだ
LがWrite(MasterからSlaveへ)
このI2C通信のExampleがうまく動かせれば
3.3V⇔5Vのレベルシフトについてももう少し調べてみたい思います
0 件のコメント:
コメントを投稿