I2C 送信を用いてキャラクタ表示に挑戦!(完結編)

ハードウェアに合わせて変更しよう

さて、SCL及びSDAのピン番号が定義されている箇所がわかりましたので、この部分を今回のハードウェアに合わせて変更しましょう。SCLP0.12SDAP0.11です。よって「ARDUINO_SCL_PIN」の「27」を「12」に、「ARDINO_SDA_PIN」の「26」を「11」に変更します。下図のように修正できたらオッケーです。

f:id:microworm:20200507162602j:plain

この状態で一度F7キーを押してビルドしてみましょう。すると、ビルドエラーが出たはずです(すみません、すぐに成功せず…)SeggerEmbeddedStudioの下にある「Output」の箇所を見みましょう。すると、「multiple definition of ‘UARTE0_UART0_IRQHandler’」というエラーが出ていることがわかります。

f:id:microworm:20200507162727j:plain

このエラーを解消する手立てですが、SDKに関するライブラリの定義の問題である様子が伺え、簡単に解決できそうにありません。そこで、今回は、google先生に聞いてみることにしましょう。( ´Д`) -Д-)おねげぇいたしやす

 

PCブラウザを起動し、googleを開いたら「multiple definition of ‘UARTE0_UART0_IRQHandler’」を検索してみてください。すると、先頭にNordic社が運営している「DevZone」という掲示板の1つの記事が出てきます。この記事を開いてみましょう。

https://devzone.nordicsemi.com/f/nordic-q-a/48318/multiple-definition-of-uarte0_uart0_irqhandler

 

f:id:microworm:20200507162939j:plain

 

この記事を読み進めていくと、中腹に以下のような記事があります。

 

f:id:microworm:20200507163045j:plain

引用元 :
https://devzone.nordicsemi.com/f/nordic-q-a/48318/multiple-definition-of-uarte0_uart0_irqhandler

 

修正していくよ

今回は、上記掲示板の回答に従って、sdk_config.hを修正してみましょう。SeggerEmbeddedStudioの左側にある「Solution Explorer」のツリー「Application」の傘下にある「sdk_config.h」をダブルクリックしましょう。

f:id:microworm:20200507163222j:plain

sdk_config.hを開いたら、スクロールをさせて、771行目付近まで移動します。すると

#define UART_LEGACY_SUPPORT 1」という行が出てきます。この行の先頭に「//」を付けてコメントアウトしたあと、その下の行に「#define UART_LEGACY_SUPPORT 0」という行を追加しましょう。これで、UARTのエラーに関する対処は完了です。

f:id:microworm:20200507164442j:plain

 

SeggerEmbeddedStudioNordic社のSDKを用いたプログラム開発でエラーなどが発生した場合、自分のコードを見直すことも大切ですが、まずはさっさとエラーメッセージをgoogleなどの検索エンジンで調べてみることが、早い解決につながることがあります。特に、今回のエラーの場合は、SDKの使い方に関するエラーですので、それをゼロから調べるのは骨の折れる作業です。

 

なので、エラーが発生した場合は、まずそのエラーコードをgoogleで検索し、どのようなエラーなのか、そしてそのエラーをどの様に対処したのかを確認するのが、解決への近道となります。(๑و•̀ω•́)و なるほどー

 

さて、プログラムの修正はこれで全て完了しました。これでビルドが通るはずです。では、F7キーをもう一度押しビルドしてみてください。「Output」に「Build up to date」という文字と、その下に「FLASH」「RAM」と書かれたメモリマップが表示されたら、ビルドは成功しています。 ٩( ๑╹ ꇴ╹)۶ やったぁ

 

もし、「Build failed」と示されている場合は、今までの修正に間違いがあるはずです。打ち込んだ文字が間違っていないかを確認してみてください。

f:id:microworm:20200507163402j:plain

 

ついに動作確認

では、ようやくLCDの動作を確認できる段階に来ました。前回提示した回路図を以下に示しますので、正しく接続されているかをもう一度確認しましょう。特に、電源(Vcc/GND)の間違いがないかは何度も確認しましょうね。

 

f:id:microworm:20200507163537j:plain

接続すると、写真のような形になると思います。

f:id:microworm:20200507164758j:plain

では、F5キーを押してみてください。以下のような画面になり、main関数の先頭の「APP_ERROR_CHECK~~」の行の背景が緑色になっているでしょうか?この状態であれば成功です。

 

f:id:microworm:20200507164935j:plain

さらにF5キーを押すと、LCDに「0123456789abcdef」と「Hello, World」の文字が2秒間隔で交互に表示されましたか?表示されれば成功です!

 

これで、I2C通信を用いてLCDに対して文字の表示が行えるようになりました。表示されない場合は、接続が間違っていないかどうか、プログラムの修正に間違いがないかを確認しましょう。

 

なお、今回展開したプログラムの説明はしませんので、ご自身でプログラムを確認して、どのように動作しているのかを確認してみてくださいね。

 

さて、ここまでISP1507-ALを用いてLEDの点灯、I2C通信を用いたLCDの制御まで行ってみました。次回は、I2C通信を用いたセンサデータの読み込みを行っていきます。

次の更新をお楽しみに!