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

プログラムの修正をしよう

では、ここからは実際のプログラムの修正に入ります。

まず、下のリンク(aqm1602ctrl.c / aqm1602ctrl.h2)をクリックし、ファイルをダウンロードしてください。この2つのファイルを、「C:\nRF5_SDK_15.3.0_59ac345\examples\peripheral\twi_aqm1602」のフォルダにコピーしてください。このファイルは、今回当方で作成したLCDを制御するためのサンプルプログラムになります。

 

              f:id:microworm:20200315220250p:plain f:id:microworm:20200315220331p:plain

ファイルを直接張ってあります。アイコン右クリック「ファイルを保存」で

ファイルを保存してください。保存したファイルを開き、ソースコードが

見えればオッケーです。

 

では、先程書き換えた「twi_sensor_pca10040.emProject」ファイルをダブルクリックして開きましょう。SeggerEmbeddedStudioが開き、書き換えが正しく行われていれば、以下のような画面が開くはずです。

f:id:microworm:20200314181146j:plain

このサンプルプログラムは、LM75というマキシム社のI2C対応の温度センサを読み取るサンプルプログラムとなっています。今回は、このプログラムを書き換えながら、LCDに対応できるように改造してきます。( •̀ω•́ ) さぁ、やるぞー

 

 

まずは、Segger Embedded Studioのプロジェクトに、今回用意したソースコードである、「aqm1602ctrl.c」を認識させるところから始めましょう。この作業をすることで、このファイルがコンパイル(ビルド)の対象になることを指定できるようになります。

 

Segger Embedded Studioウインドの左側にある「ProjectExplorer」にフォルダ構造のようなツリーがあると思います(ない場合はメニューから「View」→「Project Explorer」を選択すると現れます)。そこのトップにある「Solution~」を起点に、「Solution~」→「Project~」→「Application」と順番にツリーを開きましょう。

 

Application」まで開くと、その下に「main.c」と「sdk_config.h」という2つのファイルあるのが確認できます。では、「Application」を右クリックし、現れたメニューから「Add Existing File...」をクリックしましょう。すると、ファイル選択のダイアログが現れますので「aqm1602ctrl.c」を選択し、OKボタンを押しましょう。ファイルがない場合は、ファイル選択のダイアログの場面で「C:\nRF5_SDK_15.3.0_59ac345\examples\peripheral\twi_aqm1602」のフォルダに移動して見てください。

f:id:microworm:20200314181732j:plain

 

 

ファイルの選択が終わったら、「ProjectExplorer」にある「Application」の配下に「aqm1602ctrl.c」が表示されていることを確認しましょう。aqm1602ctrl.cが認識できたら、main.cを修正をしていきます。  |ω*)チラ, ついてきてる...

f:id:microworm:20200314181819j:plain

まずは、main.cから「aqm1602ctrl.c」用のヘッダファイルである「aqm1602ctrl.h」のインクルード指定をしましょう。SeggerEmbeddedStudioで既に開かれているmain.cを開き、インクルード文がある箇所(55行付近)に「#include “aqm1602ctrl.h”」を1行追加しましょう。これで、aqm1602ctrl.cファイルにある関数の一部を呼び出すことができるようになります。

f:id:microworm:20200314181911j:plain

 

次は、main.cにある2つの変数を外から見えるようにします。main.c78行目付近に「m_xfre_done」「m_twi」という2つの変数定義があります。この2つの変数定義の先頭にある「static」という文字を、下図の様に削除しましょう。

f:id:microworm:20200314181957j:plain

 

( -∀-)b))そぅそぅ、余談ですが


static」という宣言というのは、「main.cの外側(例えばaqm1602ctrl.cなど)から、変更できないようにするための宣言」です。Cソースコードにおいて、関数の外にある変数は、できる限り外から変更できないようせず、ソースの中だけで操作するようにするのが理想です。

 

今回は、動かすことを優先して、main.cの外側(aqm1602crl.c)からこれら2つの変数を操作していますが、できる限り避けるようにしてくださいね。

 

再びmain.cのソースに戻り、今度はmain関数(172行目付近)の中にある「LM75B_set_mode();」という箇所を見つけましょう。この関数呼び出しを無効にするため、先頭に「//」を付け、コメントアウトしましょう。次に、その下に「AQM1602_Main();」という文字を追加しましょう。下図の様になればOKです。

 

f:id:microworm:20200314182144j:plain

さて、次はI2C通信に使用するIOポート番号を変更していきます。
Segger Embedded Studioのちょっとしたテクニックを使って変更していきましょう。

 

では、main.cのソースの、140行目付近に「void twi_init (void)」という関数定義があります。この関数は、文字通りTWI(I2C)を使用するための初期化を行う関数なのです。

 

この関数の中に「const nrf_drv_tw_config_t ~~」という行があり、その中に「ARDUINO_SCL_PIN,」という文字が見えると思います。この「ARDUINO_SCL_PIN」が現在設定されているSCLのポート番号です。しかし、ここにはP0.27ピンに関する数値などが見えませんね。

では、「ARDUINO_SCL_PIN」の文字にマウスカーソルを当て、一度左クリックし、その文字を変更できる状態にしましょう。この状態でキーボードのF12キーを一度押してみてください。すると、「pca10040.h」というファイルが自動的に開き、かつ先程カーソルを当てていた「ARDUINO_SCL_PIN」の定義部分が現れたと思います。

 

f:id:microworm:20200314182255j:plain

このF12キーは「カーソルがある箇所に示された変数・関数などが定義されているソースを自動的に探し、その箇所に移動する」という機能を持っています。この機能は、SDKを用いたコード開発をする際に必ず使う機能ですので、ぜひ覚えてくださいね。見たことがない変数や関数を見たら、まずはその名前にカーソルを当て、F12キーを押してみましょう。

 

ここまでで、SCL及びSDAのピン番号が定義されている箇所がわかりましたので、次回はこの部分をハードウェアに合わせて変更します。

次回もお楽しみに!