(日々の記録)デジタルオシロを買った。(木)AitendoのモノクログラフィックLCDを動かすみなさまあけましておめでとうございますおかげさまで、当研究所のブログは、昨年一年間で20万近いアクセスを頂き、暮には遂に累計アクセスが60万件を突破いたしました。記事も知らないうちに200件近くを数え、結構な分量のブログとなりました。この一年は少々息切れがして、以前のようにFPGAを気張って動かしたり、市販ガイガーカウンターキットの不具合を発見するような、頑張った記事が少なく、本人としては少々物足りない一年でした。オーディオや、単なる工作の記事の多い最近の方が、かえってアクセスが増えてきたりして、ブログが読まれる率と言うのは、自分の努力や意欲とは余り相関はなさそうです。所長の年も年ですから、あまり気を張らず、自分のやりたいことをマイペースで続けていくことをモットーに、細く長く電子工作を続けていきたいと思っています。暖かく見守っていただけますようお願い申し上げます。いうようなわけで、以下は、前記事と日にちが前後しますが、昨年の大晦日までの、STM8Sに続く電子工作らしい工作のご報告です(2013/1/2記)。Aitendoの中古128X64のモノクログラフィックLCD(12/13/2012)このLCD(JCG12864A37-04)は、随分前Aitendoの直営店で、特に使うあてもなく面白がって買ってあったディバイスである。STN液晶モノクログラフィックのLCD(以下GLCD)は、128X64ドットくらいだと普通どんなに安くても¥1000以上するが、こちらは中古なので¥500と格安である。このディバイスを、このあいだ動作確認したSTM8Sプロセッサーで動かしてやろうというのが、今度の電子工作のテーマである。このGLCDについては、当ブログによくコメントを寄せてくれる、そら。さんがご自分のブログで、電波時計に使われた例を発表されている。このGLCDを動かすデモプログラムも公開されているので動かすことに不安はない。ここでのプラットホームはAVRのMega1284である。こちらのアプリケーションも、とりあえずは、そら。さんと同じ電波時計にしておくことにする。すると、グラフィックLCD、STM8Sプロセッサー、それにAitendoのデュアルバンド電波時計ユニットという、3つの在庫品が一挙に消化できるからだ。電波時計では、グラフィック液晶の特長を生かしにくいとは思うが、あのAitendoの電波時計ユニットは、時計そのものより、JJY電波の受信感度を調べるのに活用されている例がいくつかあり、グラフィックで、受信品質を時系列にグラフにしてやれば面白いのではないかと考えた。面白いとは言ってもまだ妄想レベルで、まずはSTM8Sどころか、AVRでこのGLCDの動作確認をすることが先決である。プログラムと同じで、機械は願望と期待だけでは絶対に動いてくれない。動かしてみることが肝腎である。お店のリンクから、ディバイスの資料を集めたり、そら。さんのところからプログラムをダウンロードさせて貰ったりして準備を進めた。心配なのは、ウェブを探し回ったが、そら。さん以外にこのGLCDを動かしたという人が見当たらないことである。中古だし情報が少ないので手が出しにくいのかも知れない。いうディバイスは、複数の人の使用記があればあるほど、色々な視点で調べることができて大変参考になるのだが、ないというのなら仕方がない。LCDのバックライト面の余計な背景は取り除いてある(12/14/2012)このLCDには、元のアプリケーションで使われたらしい海の景色の背景がLCDのバックライト面についている。この背景の取り外し方が店のウェブに載っていて、実はこれがこのLCDを買う決め手(こういう少し危ない細かい工作が好き)になったのだが、そら。さんが、取り外し方をお店に要請していたとは、この機会に詳しく調べるまで知らなかった。このガイドのお陰で、余計な海の背景のとりはずしは、とても簡単だった(買ってすぐとりはずしてあった)。困ったのは実装である。このLCDの基板は3枚のフラットケーブルが出ているが、コネクターがついているのは2枚(16Pと6P)だけで、残りの1枚はコネクターもついておらず、折りたたまれたままである。シリアルでドライブするためには不要ということなのだろうが、お店の情報は全くそれに触れていない。基板には2ヶの赤のLEDがついているが、これについての説明もない。お店が出している基板の情報はPDFたったの1ページで、ピン割付は略号だけである。VddやGNDはともかく、他のピンアサインは良くわからない。コントローラーのST7565のデータシートは詳しくて良いのだが、基板の略号とは斉合性がとれておらず、ピンアサインについては全く参考にならない。それに、フラットケーブルについている2ミリピッチのJSTのコネクターは、16ピンもあるので、行き付けの店には常備がない。このソケットを探し回るのは、何かものごとの順番が逆のような気がしてやる気にならない。16ピンのコネクターがあったとしても、結局は2ミリピッチ基板を用意しなければならず、単なるLCDの接続だけでおおごとだ。手持ちの2ミリ基板を取り出して、どうしようかと眺めているうち妙案を思いついた。Xbeeの変換基板のときと同じ方法である。2ミリピッチの基板のランドに汎用の2.54ミリのL型ヘッダーピンをハンダ付けする方法が使えそうだ。22本もあるピンの内、どれがドライブに必要なピンかを見極める必要がある。お店のサンプルソースはSPIのようで、そら。さんもシリアル(SPI)で接続されておられるようだ。つなぐ必要のあるケーブルは10本以内で済むはずだが、良くわからない。16ピンのコネクター(J1)だけでは必要な接続ピンが足りず、もうひとつの6ピンコネクターのJ2も使わないと動かないような感じだ。さんがデモプログラムのソースコードだけでなく、回路図も公開されているのに気が付いて、あわてて回路図を拡大して見る。おお、この回路図には例のPDF情報と同じ略号でピンアサインが出ている。何々、やっぱりJ2にも2本、必要な線があった(リセットと、コマンド/データ識別)。ブレッドボードで使えるように汎用基板ピンヘッダーをハンダ付け(12/15/2012)必要なピンは8本とわかった。ここまでわかると実装は楽になる。6Pの汎用L型ピンヘッダー2つを2ミリピッチ基板の裏にハンダ付けする工程に移る。L型ヘッダーピンの一方を、2ミリ間隔にペンチで揃える。そんなに厳密にやる必要はない。次はコネクターのピンである。CR部品のリード線の余りを適当に切って、あらかじめコネクターに差し、それをコネクターごと基板にはめて仮固定し、裏に出てきたリードをランドにハンダ付けしていく。ここがポイントだがコネクターを差したまま、先ほど作ったL型ヘッダーピンをハンダ付けする。出来上がったところでコネクターを抜き、コネクター側の不揃いなリード線をニッパーで切れば立派な2ミリ->2.54ミリ変換コネクターの完成である。究極の資源活用である(究極のケチと言っても良い)。コネクターを抜かないのは、L型ヘッダーピンのハンダ付けでコネクター側のピンがずれないようにするためである。CR部品のリード線は軟銅線なので抜き差しは殆ど出来ないと考えるべきだろう。太めの電解コンデンサーのリード線が、かたくておすすめである。ブレッドボードに差して様子を見る。よーし、しっかり止まっている。テスターで導通を確認する。念のため、LEDの点灯を確かめる。3.3Vをピン2(LED+)にかける。バックライトがしっかり点いた。20mAほど流れている。AVRで動作確認するも動かず(12/17/2012)ターゲットはSTM8Sだが、いきなりこれで開発することはとても無理である。さんのソースコードのAVRで動かすことから始める。彼のソースコードには2種類あり、電波時計の方は、ソースの量が多いので、少ない方のデモプログラムの方を詳しく読み込む。プラットホームのMega1284は、手持ちがないので、Mega168に移植する。動くことを確認するだけだ。電波時計の方が、ChaNさんのFatFSを使っているので(SPIを使う)、デモプログラムの方もLCDを動かすSPIはUSARTのMSPIだ。Mega168は、UARTがひとつしかないので、これを元のSPIに設定し直す。UARTの設定もMega168用に変更する。移植は順調に終わった。山ほどコンパイルエラーが出る。いうのには慣れている。Mega1284とMega168の変数が随分違う。定義しただけで使っていないタイマーや、ADCのところを片っ端からコメントにしてエラーを減らしていく(デモプログラムには不要な変数が多い)。最後に残ったのが、フラッシュにある文字列の長さを返す関数strlen_P(format)が未定義というエラーである。ふーむ、これは<avr/pgmspace.h>の標準関数で、何か以前ウェブのどこかで、この関数は見た記憶がある。AVR」で検索してみた。さんとshuji009さんというおなじみの人が、この関数で議論している掲示板を見つけた。WinAVRのバージョンか何かで、この関数が未定義になることがあるようだ。shuji009さんの解決が一番スマートだ。要するに使わなければ良いのだ。こちらもそっくり真似をさせてもらって、文字列の最終端をチェックするロジックに換える。ブレッドボードの一部には、前からMega168用のISP結線は常駐しているので、ハードの実装はあっけなく終わる。5~6本のジャンパーでブレッドボードに差したLCDとの間をつなぐだけである。