haphysics blog - 幸福の物理ブログ

みんなに物理と工作と幸福をお届けするのだァ~!

はじめてのSPI!

SPI通信をやってみた

f:id:shitaro2012:20150716160918j:plain
PIC18F27J53グラフィックLCD AQM1248AとSPI通信して文字を表示している様子。

意外と簡単だった?

実は今までSPI通信を使ってこなかった。でも、

  • SDカードを使いたい
  • SPI通信対応LCDで信号線を節約しながらデバッグしたい

と思ったので院試勉強の息抜きに挑戦してみました。

MSSPを使おう

主にこのページを参考にしました。
電子工作室-MSSPモジュールのSPIモードの使い方

SPIとはSerial Peripheral Interfaceの略です。2つのシフトレジスタが環状に接続されていて、その間をシリアルで通信します。SPIでは原理的に送信と受信が同時に行われます。
f:id:shitaro2012:20150716174554p:plain

このSPI通信を簡単に実現するためにPICにはMSSPモジュールというものが備わっています。
f:id:shitaro2012:20150716175407p:plain

今回はMSSPモジュールをSPIモードで使います。データシートには親切にもSPI通信をするために必要なピンがしっかりと書かれています。
f:id:shitaro2012:20150716175525p:plain
f:id:shitaro2012:20150716180252p:plain

これとLCDのデータシートにある接続例
f:id:shitaro2012:20150716180238p:plain
を比較してつなげました。要点だけを挙げると

  • PICがマスター、LCDがスレーブ
  • PICのSDOピンとLCDのSDIピンをペアにする
  • 互いのSCKピンをつなげる
  • SPIモジュール専用のピンのほかにCSピン、RSピンを適当なI/Oピンに割り当てる

です。

SSPSTATレジスタとSSPCONレジスタをいじればおk

ソフトではSSPSTATレジスタ、SSPCONレジスタを適切に初期化すればSPI通信は簡単に使えます。
初期化した後はSSPBUFレジスタにデータを代入すればSPI通信してくれます。

LCDを表示させるためのコマンドはLCDのデータシートにすべて記載されています。
f:id:shitaro2012:20150716181443p:plain

LCDの文字については
はじめてのPIC-SPI接続グラフィックLCD表示器(AQM1248A)の配列をそのまま使用しました。