[[作業日誌]]

目次
#contents();

*メニュー [#a7366bdd]
//個人ページの下にページを作ることもできます。
//自分のページを追加したい場合は、[[名前/新しいページ名]]または[[./新しいページ名]]という風にしましょう。
-[[./てすとぺーじ]]

**テンプレへのコメント [#oe648f41]
//ラジオボックスがうざいっていう人は、replyを消してみて下さい。
#pcomment(reply);

//**過去の日記 
//ページが長くなってきたら、過去の日記として別ページに保存するのがおすすめっす
-[[./2008年4月]]

*1月12日 [#mf52a404]
11日に家に回路を持ちかえってプログラムを追加。
TENORI-ONには遠く及びませんが、一定のリズムでマトリクスLED上でスイッチした点を対応した音として再生という機能を持たせた。
1列ごとにオクターブを変えられるようにした。中央の音階から-1〜2オクターブまで対応。それ以上の音は正しく再生出来ないようである(再生時間の関係?)
テンポの速さを変えられるようにプログラムしたのだが、タイマー割り込みの特性を理解していないせいか、上手くいかない。テンポを変化させると時たま速くなったり遅くなったりする
和音には考えが及ばず単音での再生だけ対応。
覚えられる列は8つのみ。

疑似乱数の生成の仕方を教えてもらったので、ライツアウトが一応の完成。
レベルごとにライツアウトの初期値(最初から押してある場所の個数)を変えられるように。
また、端に当たったときに逆側から出るように。

最後の時間にもう一つゲームを作成
8*8のLED上を右下から左上へ地雷を避けながら移動するゲーム。
2マス先に地雷がある場合音が鳴り、斜め先にあるならそれよりも高い音、1マス横にある場合ならもっと高い音が鳴り、それだけを頼りに移動していく。
1列に1つ地雷がランダムで設置されているのでクリア出来ないパターンも存在する
実際にプレイしてみたが結構考えないとクリアは難しいです

というわけで3つのゲーム(?)が搭載出来ました。
タイトル画面から上下左右4つのゲームを目指していましたが、時間が足らないのでこれで発表資料を作ろうと思います。
ハード的なものはアナログスティック、マトリクスLED、ブザー、PRS(疑似乱数生成)くらいであとはプログラムの問題なのでゲームプログラム自体はあまり引っ掛からずに出来ました。
PRSモジュールを置いた直後は、音をテンポで刻むプログラムが動かなくなる事態が起きましたが変数名を変えたり、実行順序を変えたり、他のプログラムを追加したりしている内に動くようになりました。未だにPSoCを理解出来ていません。ハード的な深い部分は後々学んでいこうと思っています(その前にプログラム的なミスをなくす努力が必要かもしれませんが)
とにかく、最低限の発表(PSoCを用いたマトリクスLED上のパズルゲーム)は出来ると思います。
パワポと最終レポートを作り始めなければ。

*1月7日 [#z27b5d3e]
前回の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のランダム生成もしたいので乱数の作り方を教えてもらわなければ
次が最後の時間らしいので何とか完成物に見えるようなところまでこじつけたい

*12月17日 [#s5070b45]
無事アナログスティック、スイッチからの入力を取り込むことが出来、基本の「スティックで移動」と「スイッチで反転」のプログラムの動作を確認した。
途中でボタンを押すと初期化する動作があったが、電力不足の可能性があるという先生の助言でミニプラグではなくアダプタからの電源供給に変更(メスピンとアダプタの電源を繋いだものを作成)
接触不良がまだ怪しいので今後も注意する
ライツアウトの基本的な部分はこれで完成
この後はプログラムの改良、ゲーム部分の装飾、ゲームの追加などといったところ
ということでブザーをつけてみることに。
PWMの周期で音の高さを変えるもので、テスト用に使っていたPWMをそのまま繋いで見てテスト。
しかし、PWMをStartさせると何故かスイッチが勝手にON・OFFする現象が発生
色々聞いたり試したりしたが解決しないまま、次回へ持ち越しに。
スイッチの入力=Port0_3、PWMの入力=Port0_4 が問題だろうか…?

*12月10日 [#x73868a8]
アナログスティックの入力を読むことが出来た。
途中でアナログスティックの電圧変化の波形が正常で、ADCを通した後の波形がむちゃくちゃ、という状況があったが先輩に見てもらうと「PGAをStartしてないよ」
ということでPGAをStartさせると正常に動作。
加えてADCをテスト用に1つしか用意していなかったのだが、X軸Y軸の2つにするならDUALADCの方が便利だという助言と使用法も教えて頂いた
先輩ありがとうございます。
実際にアナログスティックの入力から現在の位置の変更するプログラムも書いて動作確認した。あとはもうほとんどプログラムになりそうな予感
ADCの使い方も自分なりにですがまとめます。

*ADCの使い方 [#eccb4ba5]
使い方というよりは今回設定した内容?
PGAに自分で決めたAnalog Inputのピンを繋ぐ→PGAの出力をADCに入力→プログラムでPGAとADCをStartさせてデータを取る
&br;

-用意するもの:
--PGA
--ADCINC(or DUALADC8)
&br;

-PGAの設定(今回の設定):
|Gain|1.000|
|Input|Port0_0(Port0_2)|
|Reference|AGND|
|AnalogBus|Disable|

入力ごとにPGAを用意する
アナログI/OはPort0しかない
PGAを置く列によって偶数ピンと奇数ピンのどちらかが繋げる
&br;

-ADCINCの設定(今回の設定):
|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は同じものを繋ぐ
&br;

-DUALADC8の場合:
|ADC Input1|片方のPGAの出力|
|ADC Input2|もう一方のPGAの出力|
|ClockPhase1|Norm|
|ClockPhase2|Norm|
|Clock|1.5MHz|
|DataFormat|Unsigned|

精度は8Bit
&br;
以上の設定の後、プログラム側でPGAとADCをStartさせる(データシート参照)
PGAやADCはそれごとにStartさせる。

*12月3日 [#g9606b12]
しっかり繋がっていないところや金属の配線が重なってるところなど、不適切な箇所が多かったせいで接触不良が起こり、はんだ付けしたところのほとんどをはんだ付けし直し。
反省します。
ひとまず、LEDの点灯が確認出来るところまで復帰
アナログスティックの入力のテストはまた来週に。
アナログスティックのスイッチもまだ繋いでいないので、来週に。

*11月26日 [#pc46c55d]
PSoCにつないだ線の接触が悪く補強。
タイマ割り込みによるLEDの点灯プログラムを教えてもらい、書き込んで動作を確認した。
これでmainにLEDの点灯パターンを変える処理を書くだけで良くなった。
実際に作るライツアウトのプログラムの一部となる、指定した場所の十字方向を反転する処理を書きダウンロードして動かして見た。最初に考えたプログラムで上手く動作しなかったが、別の方法で出来たのでとりあえず反転処理はOK
先週予定していたアナログスティックのテストをしてみたかったが来週に持ち越しに。アナログスティックによる入力が出来れば作るべき物の基本的な部分が完成するので頑張ろう

*11月20日 [#g77a051c]
プレステのアレをはんだ付けした。
アナログスティックはどんな風な構造だろうと気になっていましたが、可変抵抗でスティックを傾けると抵抗が変化してそれによる電位差の変化をA-D変換して値にする、と。なるほどなるほdこのスティックを持つと格ゲーをしたくなります
28ピンの位置が悪かったので再はんだ…
その後先輩の指導のもと、全ての場所を光らせてみるテストを行い全て光ることを確認した
次はジョイスティックをテストしてみたり、マトリクスLEDを使ったプログラムを考えてみたりする予定


*11月12日 [#t6a408fc]
マトリクスLEDを基板にはんだ付けした。
一応はんだ付け出来るところは終えたが、合っているかの確認はしていない。
確認は割り当てたポートに1か0を直接送って見れば良いのか、先に何か確認してからやった方が良いのかわからなかったので、また来週に聞いてみることにする
後先考えずにはんだ付けしたので被覆の線が重なって基板の裏がもこもこになってしまった。
先輩のを見てみると非常に綺麗に整っていて自分の未熟さが目に見えて…
はんだ付けに慣れれば、どこにどう配線すれば綺麗になる、ということを考えて素子を置くことが出来るようになるだろうか…?

*10月29日 [#h73fc760]
製作する物を決めた。
自分が製作する物は8*8マトリクスLEDを使ったライツアウト。入力をジョイスティックなどで行う予定
子供の頃にハマったパズルを自分の手で作ると思うと感慨深いです。
今回PSoCの方も少し触ったが進展は特になし。スイッチを押し続けなくても押したら光る、押したら消えるをプログラムで書いたがチャタリングが起きて時々点いたり点かなかったり。
チャタリングについてあまり知らないので調べておく。

*10月22日 [#mcc9fdc9]
PSoCのFirstTouchのTutorialを終え、PSoCの29466を使い始めた。
今日は29466でLEDを光らせるために基板にLEDなどの部品をはんだ付けした。
Tutorialに従ってプログラムを書いてLEDが光るのを確認した。
あとはアイデアを出して部品を集めてはんだ付けしてプログラムを書けば色々出来るはずなので夢が広がりんぐ
しかし来週(10月29日)はアイデアの発表会。今のところ漠然としたものしかアイデアがなく不安が募るばかり。
一週間以内に何かしらの方向性を見つけなければならない。

*10月15日 [#l41270ab]
PSoCのTutorialの例題1まで進めた。
次の週にタッチセンサやタイマー割り込みなどTutorialを進める。
光センサの感度が悪いので蛍光灯ではあまり光らない(センサの値が低い)
Cで時間を計る(何もせずに待つ)関数がわからなかったのでwhileをまわして待っている
CSD WizでSlidersの値を0にすれば右2段目のスライダー用のスイッチが消えてOKを押してもエラーが出なくなる。
Designerのオプションでデータシートを日本語に出来る
//**項目

IP:126.111.137.128 TIME:"2011-01-13 (木) 22:45:13" REFERER:"http://merl.ec.t.kanazawa-u.ac.jp/micon-bu/index.php" USER_AGENT:"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10"

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS