目次
コメントはありません。 Comments/kawasaki
前回のPWMの問題が先生の助言で解決。
コメントにも色々書いてくださっていたのに見るのを忘れていました。申し訳ありません
問題はPort0_3(スイッチ)の判定のプログラムで、 if((PRT0DR && 0b00010000)==1) と書いていたこと。
&(ビット演算)をしなければならないところを&&(論理演算)としていたのでPort0_4の変化がPRT0DRに出てきて真、偽を繰り返していた。
今までPort0_3のみしか出力として使っていなかったためPRT0DR全体が、Port0_3のスイッチが押されていないとき0となっていたため成り立っていた。らしい。
というわけで if((PRT0DR & 0b00010000)!=0) と書き直した。==1はPRT0DRが必ずしも1ではないので!=0の方が適切だとも教えてもらった。
先生色々ありがとうございます。
バグが直ったのでPWMを使えるように。
PWMの音の変え方、音階の周波数は以下のサイトを参照した
PWM機能を使ってスピーカを鳴らす http://homepage3.nifty.com/mitt/pic/pic683_7.html
音階と周波数の対応表 http://www.yk.rim.or.jp/~kamide/music/notes.html
Periodと周波数の関係が良く分からず四苦八苦
先生に教えてもらい、クロック*Periodの値=PWMの出力の周期となることが分かったので、その逆数が鳴らしたい音の周波数となるようにPeriodを計算すれば良い
PWMのクロックが1.5MHzを使っているのでPeriod=1.5M/(音の周波数)で計算
すると、使えるド(C)の音が8372Hzにもなってしまった。一応計算して鳴らしてみたがやはり高い。ラの音は14080Hzなのでさらに上の音だと聞こえづらい。
そんなわけで次のときにPWMのクロックをもっと小さいクロックを入れて鳴らしてみる。
中央の音階のAの周波数が440HzなのでそれをPeriodの真ん中128辺りにするとしたら56kHzくらいまで落とすと良い。CPU_32_KHzというのは32kHzのクロックという意味なのだろうか?だとしたらちょうど良い気がする
もう一種類ゲームを入れたいけど、何にしよう。音を鳴らせるのだから音を利用したゲームもおもしろそう
LightsOutのランダム生成もしたいので乱数の作り方を教えてもらわなければ
次が最後の時間らしいので何とか完成物に見えるようなところまでこじつけたい
無事アナログスティック、スイッチからの入力を取り込むことが出来、基本の「スティックで移動」と「スイッチで反転」のプログラムの動作を確認した。
途中でボタンを押すと初期化する動作があったが、電力不足の可能性があるという先生の助言でミニプラグではなくアダプタからの電源供給に変更(メスピンとアダプタの電源を繋いだものを作成)
接触不良がまだ怪しいので今後も注意する
ライツアウトの基本的な部分はこれで完成
この後はプログラムの改良、ゲーム部分の装飾、ゲームの追加などといったところ
ということでブザーをつけてみることに。
PWMの周期で音の高さを変えるもので、テスト用に使っていたPWMをそのまま繋いで見てテスト。
しかし、PWMをStartさせると何故かスイッチが勝手にON・OFFする現象が発生
色々聞いたり試したりしたが解決しないまま、次回へ持ち越しに。
スイッチの入力=Port0_3、PWMの入力=Port0_4 が問題だろうか…?
アナログスティックの入力を読むことが出来た。
途中でアナログスティックの電圧変化の波形が正常で、ADCを通した後の波形がむちゃくちゃ、という状況があったが先輩に見てもらうと「PGAをStartしてないよ」
ということでPGAをStartさせると正常に動作。
加えてADCをテスト用に1つしか用意していなかったのだが、X軸Y軸の2つにするならDUALADCの方が便利だという助言と使用法も教えて頂いた
先輩ありがとうございます。
実際にアナログスティックの入力から現在の位置の変更するプログラムも書いて動作確認した。あとはもうほとんどプログラムになりそうな予感
ADCの使い方も自分なりにですがまとめます。
使い方というよりは今回設定した内容?
PGAに自分で決めたAnalog Inputのピンを繋ぐ→PGAの出力をADCに入力→プログラムでPGAとADCをStartさせてデータを取る
Gain | 1.000 |
Input | Port0_0(Port0_2) |
Reference | AGND |
AnalogBus | Disable |
入力ごとにPGAを用意する
アナログI/OはPort0しかない
PGAを置く列によって偶数ピンと奇数ピンのどちらかが繋げる
DataFormat | Unsigned |
Resolution | 8Bit |
Data Clock | 1.5MHz |
PosInput | PGAの出力 |
NegInput | PGAの出力 |
NegInputGain | Disconnected |
ClockPhase | Normal |
PulseWidth | 1 |
PWM Output | None |
DataFormatとResolutionで扱うデータの種類や精度を変える
DataClockは32kHz〜8MHz
PosInputとNegInputは同じものを繋ぐ
ADC Input1 | 片方のPGAの出力 |
ADC Input2 | もう一方のPGAの出力 |
ClockPhase1 | Norm |
ClockPhase2 | Norm |
Clock | 1.5MHz |
DataFormat | Unsigned |
精度は8Bit
以上の設定の後、プログラム側でPGAとADCをStartさせる(データシート参照)
PGAやADCはそれごとにStartさせる。
しっかり繋がっていないところや金属の配線が重なってるところなど、不適切な箇所が多かったせいで接触不良が起こり、はんだ付けしたところのほとんどをはんだ付けし直し。
反省します。
ひとまず、LEDの点灯が確認出来るところまで復帰
アナログスティックの入力のテストはまた来週に。
アナログスティックのスイッチもまだ繋いでいないので、来週に。
PSoCにつないだ線の接触が悪く補強。
タイマ割り込みによるLEDの点灯プログラムを教えてもらい、書き込んで動作を確認した。
これでmainにLEDの点灯パターンを変える処理を書くだけで良くなった。
実際に作るライツアウトのプログラムの一部となる、指定した場所の十字方向を反転する処理を書きダウンロードして動かして見た。最初に考えたプログラムで上手く動作しなかったが、別の方法で出来たのでとりあえず反転処理はOK
先週予定していたアナログスティックのテストをしてみたかったが来週に持ち越しに。アナログスティックによる入力が出来れば作るべき物の基本的な部分が完成するので頑張ろう
プレステのアレをはんだ付けした。
アナログスティックはどんな風な構造だろうと気になっていましたが、可変抵抗でスティックを傾けると抵抗が変化してそれによる電位差の変化をA-D変換して値にする、と。なるほどなるほdこのスティックを持つと格ゲーをしたくなります
28ピンの位置が悪かったので再はんだ…
その後先輩の指導のもと、全ての場所を光らせてみるテストを行い全て光ることを確認した
次はジョイスティックをテストしてみたり、マトリクスLEDを使ったプログラムを考えてみたりする予定
マトリクスLEDを基板にはんだ付けした。
一応はんだ付け出来るところは終えたが、合っているかの確認はしていない。
確認は割り当てたポートに1か0を直接送って見れば良いのか、先に何か確認してからやった方が良いのかわからなかったので、また来週に聞いてみることにする
後先考えずにはんだ付けしたので被覆の線が重なって基板の裏がもこもこになってしまった。
先輩のを見てみると非常に綺麗に整っていて自分の未熟さが目に見えて…
はんだ付けに慣れれば、どこにどう配線すれば綺麗になる、ということを考えて素子を置くことが出来るようになるだろうか…?
製作する物を決めた。
自分が製作する物は8*8マトリクスLEDを使ったライツアウト。入力をジョイスティックなどで行う予定
子供の頃にハマったパズルを自分の手で作ると思うと感慨深いです。
今回PSoCの方も少し触ったが進展は特になし。スイッチを押し続けなくても押したら光る、押したら消えるをプログラムで書いたがチャタリングが起きて時々点いたり点かなかったり。
チャタリングについてあまり知らないので調べておく。
PSoCのFirstTouchのTutorialを終え、PSoCの29466を使い始めた。
今日は29466でLEDを光らせるために基板にLEDなどの部品をはんだ付けした。
Tutorialに従ってプログラムを書いてLEDが光るのを確認した。
あとはアイデアを出して部品を集めてはんだ付けしてプログラムを書けば色々出来るはずなので夢が広がりんぐ
しかし来週(10月29日)はアイデアの発表会。今のところ漠然としたものしかアイデアがなく不安が募るばかり。
一週間以内に何かしらの方向性を見つけなければならない。
PSoCのTutorialの例題1まで進めた。
次の週にタッチセンサやタイマー割り込みなどTutorialを進める。
光センサの感度が悪いので蛍光灯ではあまり光らない(センサの値が低い)
Cで時間を計る(何もせずに待つ)関数がわからなかったのでwhileをまわして待っている
CSD WizでSlidersの値を0にすれば右2段目のスライダー用のスイッチが消えてOKを押してもエラーが出なくなる。
Designerのオプションでデータシートを日本語に出来る