● 実験テーマ84
「ノキア液晶5110の表示テストと簡易グラフ表示温度計の製作・実験」
(今さらですが、ノキア液晶5110を使ってみました。その表示テストと製作例(トラ技参考)です。)
以下、この実験の顛末記です。
■ 2016.11.15
・今さらだが、ノキア液晶5110を使ってみようと思う。
幾つかセンサ関連の実験をしてきたので、これを使って、グラフ表示の温度計が
作れたらと思った。
これについては、トラ技2006年3月号「R8C/15付属マイコン基板活用規格」
第9回 「小型グラフィック液晶表示器で作る簡易温度計」 の小林秀樹さんの
記事が非常に参考になる。
丁度、ノキア液晶5110についての説明が詳しく載っている。
ただ、R8C/15マイコンを使う気は無いので、これをPIC24Fマイコンに移植して動かして
みようと思う。
■ 2016.11.16
・その前に、表示テストをやってみよう。
この記事で、小林さんが作られた、RC8/15用の、ノキア液晶5110ライブラリを、
C30コンパイラ用に移植されている方を、WEB上で見付けた。
「太田さんのホームページ」の作者 太田さんが、その方で、これを利用して自分用に
まとめてみる。
■ 2016.11.18
・まずは、太田さんの記事「PIC24Fでノキア5110グラフィックLCDを駆動するには?その1」
にアップされている、ソフトを基本そのまま、PIC24Fトレーニング基板で動かしてみた。
当然だが、問題なく動いた。
画面は、太田さん作成の、気圧・温度・湿度計のデモ画面です。
バックライト用LEDは付いているが、四隅にしか配置されてないので、効果は微妙な感じ・・・
<オリジナルと異なる点整理>
@ 自作トレーニング基板のハードに合わせ、初期設定(Config
及び、LEDポート)
を変更・追加する。
・OSCO/RA3ピンは、OSC出力としてではなく、RA3ポート(デバッグ赤LED出力)ポートに変更。
これは、_Config2の変更になる。(OSCIOFNC_ONに変更)
・TRISAbits.TRISA3 // 赤LED と、TRISAbits.TRISA4
// 緑LED この2つの設定を追加。
・液晶のコントラストが薄かったので、設定値を変更した。
68→ 74
<上手く行かなかった点整理>
@ 最初、液晶の動作が不安定で困った。
電源ON後の、RESETが正常に掛からないような動作をした。
また、正常表示後、液晶本体を手でコジルと液晶の一部が消えたり、ゴミのドットが表示される
ような現象が起きた。
最初、RESET関係を疑った。
LCD_init関数の頭で実行している、RESET_ONホールド時間の、10uを、数10mSにしてみたり
したが駄目。
結局、本製品、液晶ユニット本体(エスカッションで覆われたユニット)の、ゴム状パッド電極
と、ブレイクアウト基板のパッド(パターン)の接触が悪いことが原因だった。
ユニットを抑え込む金属のツメ(下写真の赤丸で囲んだ部分)、4個所がブレイクアウト基板の、
取り付け角穴(下写真の白丸で囲んだ部分)に、うまくロックされていなかった。
・液晶リセット後の、初期値設定時の、SPIタイミング(5信号)を自作ロジアナで確認してみた。
最初のコマンドセット:SPI_tx_byte(0b00100000 | 1, 0);で、データ=1の書込みが正常なタイミング
であることを確認出来た。
■ 2016.11.19
・今日は、ちょっと液晶ライブラリを見直してみようと思う。
このライブラリは、トラ技2006年3月号の、RC8/15マイコン用のライブラリを、太田さんが
C30コンパイラ用に移植されたものを、そのまま借用している。
しかし自分用に使い易いように以下の点を作り直してみようと思う。
現ライブラリで、作り直したいのは、次の2点である。
@ 気圧・温度・湿度計前提のライブラリになっていること。(汎用ライブラリにしたい)
A アスキーフォントは、必要な分だけ用意していて、文字列の書込み関数が無いこと。
(オリジナルは、キャラROMテーブルから8bitのドットパターンを、指定のレングス分
だけ読込んで、DDRAMに書込む関数しかない。しかしこれは特殊な幅の
ドットパターンにも対応するので、これはこれで残しておく。)
Aについては、私が自作オシロで常用してきた、後閑さん作成の、アスキーフォント・テーブル(キャラROM):
ASCII_font.h(1文字5バイト構成 x 192文字= 960バイト)から必要な文字フォントを読出し
一文字表示する関数:LCD_rom(unsigned char dat)と、
文字列を表示する関数:LCD_ROMstr(const char *str)
を追加することにした。
これで、キャラROMの内容を全て出力するテストプログラムを作成して動かしてみた。
問題なく上手く行く。
1画面に、84文字(14文字*6)表示できました。
■ 2016.11.21
・表示テストは上手く行ったので、簡易グラフ表示温度計を、PIC24Fトレーニング基板で
動かしてみようと思う。
プロジェクト名を、「easy_graphical_temp_test」として進める。
PIC24Fトレーニング基板で行うには、アナログ入力としてAN1を使い、ADCと連動した、
T3割込みを使えばよい。
T3周期は、10mSに設定し、この周期でAD変換を行う。
100回分のAD変換値を加算したら、温度値を計算して表示。
そして、1分毎の温度をリングバッファに保存した後、履歴グラフを表示(右端が常に最新データ)。
簡単に言えばこのような流れになっている。
一応、夜11:30頃までやり、トラ技の、RC8/15マイコンのプログラム仕様での動作を、
PIC24F(C30コンパイラ)に移植して動作させることが出来た。
但し、AN1にサーミスタでなく、ポテンショからの電圧を可変しながらの確認だが。
ドット表示なので、下写真のような表示になります。
<デバッグ時の特記事項>
@ PIC24Fによる、AN1にアナログ入力、10bitADC/
繰返し変換等のADCレジスタ設定、
T3タイマと連動したADC割込みルーチンの作成は、以前にも実績があるので、その時
のマイ資料を見ながらスムースに作業できた。
A 全ての処理(AD取り込み〜 表示まで)は、ADC割込みルーチンで実行。
<オリジナルとの相違点>
・割り込み関数内で変数の宣言と初期化をしている変数が、3つ(ad_sum,
intr_count, graph_count)
あるが、今までこのように、割り込み関数の中で宣言と一緒に初期化をやっているケース
を見たことが無い。
これだと割り込みに入った頭で常時、変数がイニシャライズされるため正常動作しない。
(実際しなかった。RC8/15マイコンのコンパイラだと許される書き方なのかもしれない・・・)
・ADリード生データは、10bitだが、簡易版なので、これを8bit分解能に下げるが、
この書き方を勘違いして、ResultData <<= 2;としてしまった。
これは、ResultData >>= 2;が正しい。
■ 2016.11.23
・ドット描画のみでグラフ表示しているが、直線描画が出来ないものか、今まで使ってきた
後閑さん作成の、ライン関数をそのまま適応して試してみたが上手く行かなかった。
後閑さんが作成された、lcd_Line関数(SG12864用)をそのまま、ノキア液晶5110に
適用すると、ノキアのコントローラは、現在のドット状態の読出し及び、DDRAM上の論理演算
が出来ないため、前に描画したドットを残したままの更新は出来ない。(XOR的描画が出来ない)
例えば、縦線を引こうとすると、各バンク(0〜5)のLSB(b0)に相当する点のドットが、6つ表示
されるだけになる。
オリジナルにも直線描画関数がなく直線補間した描画をしてないのも、その為と思われる。
よく解らないが、PICのRAM上で、表示したいドットパターンを作り込んでから、ビットマップ描画
すればよいのかもしれないが・・・(これは今後の課題にすることにした。)
・ここらで、動作仕様をまとめておく。
@ サーミスタ:103AT-2 自体の仕様
・使用範囲:-50℃〜 +110℃
・25℃に於いて10kΩで、負性抵抗特性(温度が上がると、抵抗は低くなる。)を示す。
A 温度表示値範囲: -35℃〜 +85℃
(トレーニング基板にて確認:AD値=255〜0)
C グラフ表示範囲: 0℃〜 +47℃
D グラフ表示分解能: 1dot当たり1℃
■ 2016.11.26
・本番のパーツが届いているので、実装することにした。
実装スタイルは前回と同様に、電池+DC/DC基板と、メイン基板、2枚のスタック構造とした。
使用ユニバーサル基板も前回と同様に、秋月の、
両面スルホール・ガラス・ユニバーサル基板 Cタイプ2.54mmピッチ(72x47mm)
を使った。
ちょっと組立に苦労した点がある。
ノキア液晶の、J1, J2のピンヘッダ間のピッチが、インチピッチでなく、実測40mmなのである。
やむなく、ピンバイスで下側の8PIN列の、ピン穴を開ける加工をして、なんとか取付けることが
できた。(ほとんど長穴状態になってしまいましたが・・・)
以下に実装完了時の写真をアップした。
尚、ソフトはテスト版でそのまま動くので、特にプロジェクトの作成は行いませんでした。
・HEXの書込み〜 動作チェックも問題なくOKでした。(動作の模様はこのページトップの写真を参照ください。)
最後に、消費電流を測っておくことにする。
PIC24Fを、PLLを使わないで、最高速でなく、Fosc= 8MHz(Fcy=
4MHz)で動かしては
いるものの、液晶のコントラストを濃い目に設定したせいか、思ったより流れているようです。
もちろんバックライトはOFFです。
<消費電流実測>
Vcc=
3.31V
Icc= 6.6mA(5.55〜 6.6mA)
Ibat=
10mA(8.5〜 10mA) / Vbat= 2.76V時
<最終回路図>
・こちらから、どうぞ→ 「PIC24F_ノキア液晶実験」 (PIC24Fトレーニング基板による実験回路です。)
「簡易グラフ表示温度計」
<最終ソース>
・こちらから、どうぞ→ 「PIC24F_NOKIA5110_TEST_2.c」 (表示テスト・メインソース)
「easy_graphical_temp_test.c」 (簡易グラフ表示温度計・メインソース)
※ この他に、以下の液晶ライブラリと、フォントライブラリが必要です。
nokiaGlcdlib.c
nokiaGlcdlib.h
ASCII_font.h