SPIクロックの指定
シーケンサーのSPI信号を測定してみたところ、LCD表示に使っているSPI2のSCLが500kHz程度だったので、st7567用のライブラリにSPIのクロックを設定するメンバ関数を追加した。(ライブラリのデフォルトではSPIクロックは1MHzの指定)
st7567LCD:
https://developer.mbed.org/users/ryood/code/st7567LCD/#0e21d2f2155a
SPI1はシーケンス送信、SPI2はLCD表示に使用していてともにSPI::frequency()でクロックを16MHzを設定するようにした。
SPI1
ch2:SPI1のSCK
オシロのカーソルで測定するとクロックは約10.5Mhz。
SPI2
ch1:SPI2のSCK
SPI1とは横軸の縮尺が違い、オシロのカーソルで測定するとクロックは約5.25Mhz。
プログラムで同じ16MHzを指定してもSPI1とSPI2で実際のクロック数が異なっている。
SPI信号のタイミング
SPIのクロックを上げて、簡単な文字列を表示するようにすると、シーケンス再生中にLCDに描画することができた。
mbad repository:
https://developer.mbed.org/users/ryood/code/BaseMachine_Sequencer/ (revision 29)
SPI信号
ch1:SPI2(LCD) ch2:SPI1(Sequence)
拡大
さらに拡大
ch2:SPI1(Sequence)はRtosTimerを使って1msごとにSPIコマンドを発行している。ch1:SPI2(LCD)はmain関数のメイン・ループ内でLCDへのSPIコマンドを発行している。"rtos.h"をインクルードしているのでmain関数は最初のスレッドで動作し、優先順位の高いRtosTimerの割込み時間外でSPI信号を出力しているようだ。
シーケンス打ち込み用のグリッド画面のSPI信号
ch1:SPI2(LCD)
拡大
SPIコマンドの発行時間は約3.3ms。これを1ms以下にすればシーケンス再生中にシーケンス打ち込みのLCD表示ができるかな??st7565ライブラリの中身を見ると1バイトずつSPI信号を送っているの様なので、RtosTimerの割込みは効きそうなものだけど。
簡単な文字列表示も一旦画面をclearしているので(?)、同じ3.3msかかっているようだが。
シーケンス打ち込み用のハードウェアを作りながらもう少し調べる予定。
メモ:
SPIのCSのタイミング調整にwait_us()を使っているのでもう一度タイミングを見計らってちゃんとする。
ついでに消費電流をテスタで測ってみた。Nucleoは今回はUSBで給電しているので除外。プラス側が約120mA、マイナス側は約7mAとかなり差がある。電池電源にするとプラス側の電池の減りが速そうだ。
0 件のコメント:
コメントを投稿