自主課題12

コメントはありません。 Comments/iwasaki

お名前:

12月21日

ドットの表示範囲をx軸, y軸をそれぞれ0~128にしたところ、設計通りの座標にドットを表示させることができた。
また、ディスプレイクリアの命令後は、delay関数のみで待機させるようにして、待機時間を調整したところ、画面が消えなくなりスピーディーに画面が動くようになった。

ドットだけでなく小さな円も表示させるようにして、少しだけ本物の夜空に近づけた。色付けなどもしていきたい。

12月14日

星の座標表をcsvファイルで作成し、c言語のファイル入出力関数で読み込み配列に代入して扱おうとしたが、いくつか問題が発生した。
まず、FILE型が未定義というエラーが出る。PSoCでは、ファイルの入出力ができないらしい。
さらに、stack frame too largeというエラーが出た。PSoCでは、関数ごとに256byteまでしか変数が宣言できないようだ。なので、int x[64], y[64]; とするとこのエラーが出てしまう。調べてみたが、使用しているPSoCのRAM容量はわからなかった。しかし、先生に教えてもらったページによると、RAMは256byteずつのいくつかのバンクにわかれていて、バンクをまたぐ事ができないということが分かった。また、プラグマというものを使用することで絶対番地指定し、バンクをまたいだ256byte 以上のRAMとして扱うこともできる。

csvの読み込みができないので、あらかじめプログラムで、読み出した座標を別ファイルに書き出し、初期値設定してみることにした。また、使用出来るRAMの容量が限られているため、ROMに書き込むようにしてみる。先生の助言で、const修飾子を使えばROMに書き込まれるということが分かったので、初期値設定のときconst int x[,,,,…]; のようにして、新たに作成したヘッダファイルに記述した。

実行してみると、星は表示されたが明らかに想定より密度が高い。OLEDの仕様である値(256?) を超えた座標にプロットしようとすると、その超えた分の座標にプロットされるようだ。

次回からは、それらの調整と、いまだたまに発生する消えてしまうバグをなくす作業に入る。

12月7日

前回に引き続き、OLEDのACKを受け取ってからの命令実行を行なってみる。やはりRX8のサンプルプログラムの変更版ではうまくいかなかったので、秋田先生に相談したところ、RX8_cGetCharの処理が、やろうとしていることとほとんど同じということで、RX8_cGetCharで実行したところ、しっかりACKを受け取る事ができた。

OLEDとの通信とジョイスティックのAD変換がうまくいったので組み合わせてみることにした。水平軸方向と垂直軸方向それぞれの移動量の変数を置き、ジョイスティックでその数値を増減する。元の座標にそれらの変数を加えたものを新しい座標とし、ドットをプロットする。無限ループでジョイスティックとプロットの処理を繰り返し、スティックの入力があれば毎回ドットをクリアする。

移動しているとき星が点滅してしまうが、はじめ目標としていた動作を実現することができた。次回までに、星の座標表を作成しておく。余裕があれば機能の拡張も目指す。

11月30日

前回までは、OLEDに命令を送るとき命令毎にdelay関数で待機させていたが、ACKを受け取るまで待機させ次の命令を送るようにして、高速に命令を実行できるようにすることにした。8bitシリアル通信の受信専用モジュールRX8を使ってACKを受け取ってみた。データシートのサンプルプログラムを流用して、読み取りエラーが無ければ、受け取った8bitを返すプログラムを書いてみたが、読み取りエラーが出続け値が返って来なかった。次回は、読み取りエラーであっても値を返し、繰り返し実行させてみる。

次に、ジョイスティックのAD変換を行なってみた。はじめは水平方向だけを分解能8bitで変換し(0~255)、それをさらに4分割してそれぞれ-5,-1,1,5を割り当ててみた。さらに中間の値124~131は0に割り当てた。端末に出力して確認してみると、ニュートラルの位置がずれているからか、ジョイスティックに触れない状態でも-1が出力され続けた。また、少し傾けて-1と1を出力させるのが難しかったので、分割の範囲を調節したら思い通りに出力させることができた。

次回からは、垂直方向のAD変換を行い、OLEDとジョイスティックを対応させてみる。
2進数では演算ができないので、16進数で行うのだろうか。

11月16日

先生の助言で、はじめは信号をUART経由で送信してOLEDに出力してみることにした。
しかし反応がなく、オシロスコープで見てみると、ACKが返ってきていなかった。
先生が色々試して下さった結果、OLEDを抜き差しするとACKが返ってくることがわかり、mainの最初でOLEDをリセットすることにした。再び試してみるとOLEDを操作することができた。

次はUARTを経由せず、TX8から直接信号を送信してOLEDに表示してみることに。
delay関数を作り、命令のたびに時間を置いて実行させてみると、複数の命令も順次実行することができた。

次にジョイスティックを扱うためAD変換を行なってみる事にした。理由はよく分からなかったが、PGAを通してから、DUALADCにジョイスティックのx軸, y軸方向の電圧(0~5V)を送り、それをデジタル信号に変換する。次回からは、DUALADCのデータシートを読んでプログラムを書いてみようと思う。

11月9日

モジュールUART1やTX8を追加して、PSoCとディスプレイとのシリアル通信を試みたが、うまくいかなかった。
プログラムを書き込んだあと反応はあったが、思い通りの動作をしなかった。

そこで、シリアル通信はひとまず保留とし、インターフェイスの構想に移った。
はじめはジョイスティックで試し、もし余裕があったら加速度センサなどを扱って見ることにした。今日は、ジョイスティックのハンダ付けを行った。

ジョイスティックで扱えるのはアナログ値のみなので、来週からはA/D変換にとりかかろうと思う。

10月31日

PCとディスプレイでシリアル通信を行い、図形などを映しだした。
黒い背景に白い点という単純なものだが、星座をひとつ(オリオン座)を表示させることができた。

次回は、マイコンを使ってPCを介さずに映し出すことが目標。
PSoCの基本的な使い方を復習しておく。

10月26日

それぞれが作りたいもののアイデア出しを行った。
いくつか意見をいただき、今回は宇宙生成機を作ることになった。

有機ELディスプレイに星空の画像を映し、複数のインターフェイスにより、時間, 場所, 見る方向を変更できるようにする予定。

その後、ディスプレイとマイコンをつなぐ基板を作った。

次回は、データシートを読み、マイコンに画像を表示させる予定。

10月19日

PSoC1duinoの基本的な使い方を学んだ。
プログラムは、難しいところもあったが概ね理解できた。
オリジナルのプログラムも動かせるようにしたい。

来週までにできるだけアイデアを出しておく。

10月12日

マイコン回路の基板を作成した。
素子をまっすぐハンダ付けするのが難しかった。

作りたいもののおおまかなアイデアを考えておきたい。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS