目次
UARTでデータが取れるようにモジュールを追加し、基板の配線を行った。
Acknowrichを導入。
使い方 : ソフト起動→ファイル→シリアルデバイスを開く→COMx
自分の環境ではCOM7に割り当てられた。
初回起動時にはボーレートやビット数の設定が合っていなかったため、下に表示されている各パラメータを右クリックすると選択肢が出てきて変更可能。
今回は9,600bpsにて通信を行った。
データを数バイトずつまとめて送ったため、表示が少しおかしかった。おそらく改行コードの問題。そのため今日はTeraTermにて、受信改行コードをLFに設定してデータを読み取った。
前回最初の2byteの通信ができたため、今日は各ボタン・アナログスティックの値を読み取るための変更を行い、ちゃんと取得できた。
アナログスティックを使用する場合はコントローラのANALOGボタンを押してランプを点灯させる。こうすると全受信データが9byteになる。最後の4byteがアナログスティックの値。
取得したデータ(1セット分)
start
1 // 1byte目。受信データは無意味
2 // 2byte目。受信データは無意味
3 // 3byte目。受信データは無意味
4:255 // 4byte目。ボタンデータ。押したボタンの対応ビットが0になる。
5:255 // 5byte目。ボタンデータ。押したボタンの対応ビットが0になる。
6:111 // 6byte目。右アナログスティックの左右。
7:123 // 7byte目。右アナログスティックの上下。
8:117 // 8byte目。左アナログスティックの左右。
9:114 // 9byte目。右アナログスティックの上下。
ピンの割り当て時に内部プルアップを有効にした場合、ポートの値を読む前にそのピンに"1"を書き込まないといけない。もし"0"が書き込まれた状態のままだと読み出してもプルアップが有効になっていないのと同じになってしまう。定期的にプログラム中で"1"を書き込むようにした方がいいかも。プルダウン時も同様の注意が必要?
うまく動作しないことを先生に相談したところ、5番ピンに対して左右で対称になるような配線ミスをしていることを指摘され、修正したところ正常にデータを送受信できるようになった。他にもPSoCのプルアップ設定の入力端子にはデータレジスタに1を与えて読まないと正確な値が取れないことや、オシロスコープのトリガ待機での測定法などを教えて頂いた。
図 PSコントローラとのSPI通信2byte目
ch1:CLK, ch2:ACKn, ch3:DAT(PAD→PSoC, 0x41), ch4:CMD(PSoC→PAD, 0x42)
UARTでデータが取れるよう、プログラムの追加を始めた。
前回に引き続きPSコントローラとのSPI通信を試そうとしたが、うまく動作しなかった。そもそもSPIMモジュールの使い方が間違っているかもしれない。
次週は動作させられるように必要な情報を調査しておく。
PlayStationのコントローラはSPI通信で読み取りが可能。はじめは5Vで動作させ、動作確認後に3.3Vで実験する。
無線モジュール(BTX025 ZIG-100B)は3.3V動作。
2×5ピンのピンヘッダ・ピンソケットを使って基板との接続端子を設けた。
SPI通信のデータシートを見ながらPSコントローラと通信するプログラムの作成を始めた。
参考ページ
・http://kaele.com/~kashima/games/ps_jpn.txt
・http://www.maroon.dti.ne.jp/koten-kairo/works/dsPIC/spi1.html
・http://www.ne.jp/asahi/rugbysensor/ohata/SPI_0.html
みんなそれぞれアイデアを発表して、自主課題研究で製作するものを決めた。
自分はPlayStationコントローラを利用したラジコンを作ることにした。
基板に赤色LEDを8個追加。LEDフラッシャーを作りたい。
CapSenseでタッチセンサ、スライダを動作させることができた。
基板にICソケット、ピンヘッダ、抵抗、LED、タクトスイッチをはんだ付けした。
CY8C27443を使ってチュートリアルのSWに連動したLED点滅のプログラムを作成し、動作させることができた。
スイッチによるピン変化割り込みを使って点滅周期を変化させるというプログラムを作り、動作を確認した。
参考:http://dr.matrix.jp/psoc2.html
先週できなかったLEDのプロジェクトを再度作り直したところ動作させることができた。前回うまく動かなかった原因が何かは不明。
PSoC First Touchのチュートリアルに従ってADCとPWMでLEDの輝度を変えるプログラムの作成を行った。
しかし、手順通りに進めてもうまく動作しなかった。先輩方にも見てもらいつつ原因を探したところ、PWMのpulse widthの変更が上手くいってないことがわかった。
PWM8_1_WritePulseWidth(値);
で変更できない。配線画面のPWM8_1のプロパティ設定画面でPulseWidthを設定するとその値になるが、プログラム中では変更できなかった。
一度プロジェクトを作成し直したところ、最初の1回はしっかり動作したが、その後また同様の状態となり、今日は目的の動作を得ることができなかった。
先生・先輩方から自主課題研究の説明や、研究室の概要の説明を受けた。
これからよろしくお願いします。
コメントはありません。 Comments/kawakami