Texas Instruments 技術情報

新人奮闘記事 第4回「新人の躓き、ディスプレイの時計表示」

[最終更新日 : 2016/09/29]


前回の奮闘記!

ロボットの土台にモータを取り付けて回してみると、ロボットが動きました。
このままスケジュールに余裕を持って製作課題を進めていこう!!

第3回「順調ペース、ロボットの足"モータ"」

こんにちは。クライフです。
今回から、"目覚ましロボット"の目覚まし機能実現のため、時計を表示するLCDモジュールをテストします。

時刻をソフトウェアで演算

まずはLCDモジュールへの表示の前に時計機能を作ります。今回は1秒ごとに時刻変数をカウントアップし、ソフトウェアで時刻を計算する方法をとります。

まず1秒経過をマイコンが計測するためにTimerが必要になります。しかし、TimerはモータのPWM制御に使い切っていしまっているため使えません。そこで代替としてWDT(ウォッチドッグタイマ)のインターバルモードを使用します。WDTで周期割り込みを生成することで、1秒をCPUが計測することができます。

次に、時刻を計算します。このときの処理の流れを示すフローチャートを次に示します。変数secを用意し、1秒を加え続けます。secが60秒に達したとき、変数minに1加え、secを0にし、また1秒を加えていきます。これを変数hourまで繰り返すことで、時刻を00:00:00から23:59:59まで表示させることが可能になります。

時計機能のフローチャート

I2Cとの戦い

時計のソフトウェア処理ができたら次はLCDモジュールの時計表示に取り掛かります。今回はマイコンとLCD間を通信するため、I2Cの通信規格を使用します。I2CはマイコンとLCDモジュールを同期クロック(以降、SCL)と送受信データ(以降、SDA)の2本の線をつないで、相互でデータのやり取りをすることができます。こちらもMSP430wareよりI2Cのサンプルコードを参考にテストプログラムを作成します。

こうして、まずは時計として「00:00:00」を表示するよう、マイコンに書き込んで、テストします。結果は・・・
なにも表示されません。

あ、あれ。表示されない・・・。もしかしたら送るコマンドを間違えている可能性があるので、もう一度LCDモジュールのデータシートを見直してテストプログラムを作りなおしてみます。

それでも表示されない。

いままで順調だったのにここではじめての躓きです。。。

原因を探るため、ひとまずオシロスコープでI2CのSCL、SDAの波形を見てみることにします。

表示されないときのSCL、SDA波形

ここで、I2Cについて勉強しなおします。まずI2CでLCDモジュールへ送信するデータとビット数を以下に示します。

  • スタートコンディション(1ビット)
  • スレーブアドレス(7ビット)+Read/Write指定ビット(1ビット)
  • ACK(1ビット)
  • 文字表示または設定を決めるコマンドデータ(8ビット)
  • ACK(1ビット)
  • 文字表示内容または設定内容のコマンドデータ(8ビット)
  • ACK(1ビット)
  • ストップコンディション(1ビット)

スレーブアドレスとはI2Cを使う機器それぞれが個々に持っているアドレスで、このアドレスを送信することで該当する機器へデータを送ります。送信データ1バイト(8ビット)を送った後、LCDモジュール側から受信完了を示すACKというデータ(SDAがLow)が返されます。ストップコンディションまでの一連のデータを送ることで、LCDモジュールでは受け取ったデータを基に文字表示や設定を行うことができます。

波形を見ると、スレーブアドレスはマイコンから送ろうとしているのが分かりますが、9ビット目でLowになっていないことから、ACKが返送されていないようです。なぜ返ってこないのか、その原因を探っていましたが、解決できないまま丸1日経過してしまいました・・・。

意外な落とし穴

ACKが返ってこないまま悩んでいると、OJTの先輩よりこんなアドバイスをいただきました。

『SCLの周波数設定を見直したらどうなる?』

今回使用したLCDモジュールのSCLの規定はMax 100kHzのため、サンプルコードでも100kHzになるように設定していましたが、この設定を変えてみます。60kHzにして通信します。

すると、、、
LCDモジュールに文字が表示できました!!まさかこんな落とし穴があるとは・・・。

LCDモジュールのデータシートではMax 100kHzと記載されていたのですが、それでは動かず、動作周波数をより小さくすることでI2Cができるようになりました。
これで躓きからようやく一歩前進です!

表示されたときのSCL、SDA波形

時計表示されたLCDモジュール

新人奮闘記事シリーズはこちら

新人奮闘記事 第1回「はじまる、新人FAEの奮闘」

新人奮闘記事 第2回「製作始動、ロボットの目“センサ”」

新人奮闘記事 第3回「順調ペース、ロボットの足"モータ"」

新人奮闘記事 第4回「新人の躓き、ディスプレイの時計表示」

新人奮闘記事 第5回「更なる難問、ロボットのプログラム統合」

新人奮闘記事 第6回「目覚めるか、目覚ましロボット」

実験に使用したTI製品の詳細はこちら

MSP430 LaunchPad バリュー・ライン開発キット MSP-EXP430G2
MSP430 サンプルコード集 MSPWare

取り扱いメーカー

お問い合わせ