I2C 送信を用いてキャラクタ表示に挑戦!(その1)

前回までは、LEDを光らせるいわゆる「Lチカ」を、SDK付属のサンプルコードを一部書き換える形で試してみました。しかし、このままでは外部デバイスとのデータのやり取りができないため、あまり面白みがありません。(ε・`。)

 

そこで、今回はTWI(TwoWiredInterface : いわゆるI2C通信)を用いて、秋月電子通商さんで売られているI2Cインターフェースを備えた液晶キャラクタディスプレイ(LCD、型番AQM1602Y-NLW-BBW)を接続しI2C送信を用いたキャラクタ表示を試してみましょう。

 

f:id:microworm:20200126163103j:plain

その前に、I2C」がどのようなものかをお話しておきます。I2C」とは米Philips社で開発されたシリアルバス通信の規格です。読み方は「アイ・スクエアド・シー」もしくは「アイ・アイ・シー」で、正式名称は「Inter-Integrated Circuit」と言います。

 

I2Cは、2本の通信線(SCLSDA)GND線、合計3本の線だけでデータの送受信を行うことができるインターフェースです。この規格の最大の特徴は、この3本の信号線だけで、複数のデバイスを接続できることです。マイコン側のIOピンの消費を少なく、かつ多くのデバイスを接続できるため、最近発売されているマイコンでは必ずと言っていいほど搭載されている機能です。

 

具体的な接続例を下図に示します。この図のように、3本の線だけでLCD・温度センサ・AD変換器の3つのデバイスを接続することができています(もちろんデバイス1つでも大丈夫ですし、4つ以上も可能です)

 

なお、I2Cの信号線(SCLSDA)は、いずれも電源にプルアップ(接続)しておきます。プルアップしないと、通信ができないので注意しましょう。なお、プルアップ抵抗の抵抗値は、通信速度や電力設計により変わってきますが、10kΩ1kΩの間にすることが多いようです。

  

  f:id:microworm:20200126163238j:plain

 

ちょっと 通信のお話し

 さて、おおよその規格の話が終わったところで、実際の通信の話を少ししておきましょう。

 まず、I2Cには「マスタ / スレーブという概念がある」ということを覚えておきましょう。マスターは動作の主導権を握るもの、スレーブはマスタに従って動作するもので、今回の作例では、マイコン側 (ISP1507-AL) がマスタ、LCD側がスレーブとなります。ちなみに、マイコンがスレーブになることも出来るのですが、今回は触れません。

 

データのやり取りの主導権は、先に示した通り、常にマスタ側で握ります。スレーブ側は、マスタが出力するコマンド(SCLによるクロックデータと、SDAによるコマンドデータ)に応じて、データの送受信を行います。

 

ところで、データを意味するSDAには全てのデバイスで同じデータが流れるため、このままでは「どのデバイスが応答すべきかがわからない」という問題が生じます。個々のデバイスの違いはどのように解決するのでしょうか? それは、各デバイスが持つID番号により区別を行います。

 

マスタは、最初にデータのやり取りを行うデバイスのIDを送信します。例えば、LCDと通信を行いたい場合は、マスターからID:0x7Cを意味するデータをSDAに送信します。スレーブ側は、マスターが送ってくるIDを常時監視しておき、自身がもつIDと一致した場合のみ、以後のデータやコマンドなどを解読しながら動作します。(◎o◎) オォ!

 

f:id:microworm:20200126163328j:plain

なお、スレーブはマスターから送られてくるIDによってデバイスの認識をするため、各デバイスのIDは全て異なる値である必要があります。なお、ほとんどのデバイスは、IDの下位1ビットだけ変更できるような仕組みになっていますが、ごくまれにIDが固定されているデバイスもあります。複数のデバイスを接続する場合は、IDが重複しないように注意してデバイスを選択しましょう。( ̄ー ̄)

 

さて、I2Cのおおよその説明をしましたので、次はハードウェアの準備をしていきましょう。今回は、以下の表に示した部品を用意します。液晶ディスプレイ以外はメーカーは問いません。コンデンサは、積層セラミックコンデンサがおすすめです。極性がなく、ほどほどに小さい部品なので実装しやすいです。なお、1uFのコンデンサが買えない場合は、2.2uFの電解コンデンサのプラス側同士を接続することで代用できます。

以下に部品表を示しますので、この表を参考に部品の準備をしましょう。

 f:id:microworm:20200126163408j:plain

ここで回路図を簡単に見てみよう

全体の回路図は以下のとおりです。前回と同じように、開発キットのヘッダピンをブレッドボードに接続し、すべての部品はブレッドボードに搭載する形を取ります。LCDはユニバーサル基板にはんだ付けし、必要な線(SCLSDA3.3VGND4)だけをブレッドボードに差し込めるようにしておきます。なお、LCD側のバックライトの端子は、ユニバーサル基板の穴の大きさよりも太いので、ユニバーサル基板の穴をドリル等で大きく穴を開けておきましょう。φ(゚ω゚ )フムフム…

 

I2Cの信号線SDA及びSCLは、ISP1507-ALP0.11及びP0.12に接続します。また、I2Cのプルアップ抵抗は、後で簡単に変えられるようにするため、ブレッドボードにつけておくことにします。

f:id:microworm:20200126163505j:plain

 

接続イメージ

 開発ボードを含めた全体の接続イメージは以下のとおりです。ブレッドボード上には、ユニバーサル基板にはんだ付けしたLCD、プルアップ抵抗、その他配線を接続しています。

f:id:microworm:20200126163550j:plain

LCD付近を拡大した写真は以下のとおりです。表面にバックライトの電流制限抵抗100Ωや各種コンデンサを取り付けています。また、ピンヘッダはブレッドボードに
差し込めるようにするため、裏側に取り付けるようにします。

 

f:id:microworm:20200126163618j:plain

次回は、プログラムの準備をしていきます。お楽しみに~。