基本的に1回に送る16bitのうちHiバイトをコマンド、Loバイトをデータとして扱うことにした。
テータ形式
CmdがHiバイトの数値、ValueがLoバイトの取りうる値。シーケンスのデータは構造体の配列になるので別扱い。Note(0x51)で16bit、Pitch(0x52)で16bit使って2 Wordでステップ1つ分のデータになる。変更するシーケンスのステップ番号はNoteのLoバイトの上位4bitに格納することにした。
配線図
4x4のキーパッドをつなげた状態で実験。つないでいるだけでキーパッドを利用するプログラムはまだしていない。
ファームウェア
Master側https://developer.mbed.org/users/ryood/code/BaseMachine_UI_Controller/ Revision:46
Slave側(テスト用)
https://developer.mbed.org/users/ryood/code/Nucleo_rtos_SPISlave_Test/ Revision:5
メモ:
Slave(PB_1)->Master(PC_7)の割り込み線にオシロのプローブを当てておかないとSlave側のUARTで「0x0155」が表示される。Master側で割り込みを受けたときにこのコマンドを送信しているので、割り込みの誤判定っぽい。→もう少し考えて信号線をPullUpかPullDownするのも試してみる。POTの読み取り値は7bit、32回分で移動平均をとっているがまだふらつく(分解能を6bitまで下げるのはさすがにつらい)。Master側のプログラムの「void dumpToLCD01()」でThred::wait(10)として、10ミリ秒間隔をあけてPOTの値を読み取ってLCDに表示しているが、こちらはふらつかない。なので、Slaveに送る値も多少間隔をあけてサンプリングしてみる?→POT読み取りだけスレッドを分けてみる?
LCDのバックライトの明るさを調整するのにPWM出力で電圧を調整していたが、なぜだかLCDの表示が崩れてしまうのでVDDに直結することにした。
UI Controller(SPI Master)とSequencer本体(SPI Slave)で共有する定義ファイルを作る?
0 件のコメント:
コメントを投稿