google-site-verification: google3bd66dd162ef54c7.html

128X64グラフィックLCDシールドの製作

 これまでの記事aitendoの128x64画素モノクログラフィック液晶の動かし方ははぼ把握出来ました。画面がとても小さいのが難点ですが、いろんなことに使えそうです。それに値段も安いです。

 この液晶を動かすたびにブレッドボードの配線するのも面倒なので、Arduinoのシールドにしてしまいます。

▼回路図
グラフイック液晶シールドの回路図
 以前の記事に掲載したものとほとんど同じです。Arduinoからデーター送ってるだけで、ハンドシェイクはおろかデーターの受信も無しです。

▼グラフィック液晶シールド完成
グラフィック液晶シールド
 Arduino UNOに乗せて動かしている様子です。u8glibのロゴを表示しています。

 バニラシールド基板を使って組み立てました。半固定抵抗は液晶のバックライトの明るさ調整用です。ちなみにバニラシールドは両面スルホール基板なので、ピン数の多い部品の交換はものすごく大変になります。ということで買ったまま敬遠してずっと使わないでいました。でもこれくらいの規模の回路なら慎重にやれば大丈夫だろうということで起用しました。

 この画面表示のスケッチはこちら。 (ハードウエアSPIモードになっています)

 分解するとこうなります。

▼表面
表側
 グラフィック液晶シールドと言うとものものしいですが、部品はたったこれだけです。

▼裏側
裏側

 これで何かアイデアが浮かんだ時に、すぐにグラフィック液晶を使って動作を確認できるはずです。

ArduinoでaitendoのFSTN液晶を動かす、続編

 前の記事でArduinoでaitendoのFSTN液晶(128x64)を動かす方法について解説しました。

 その記事を書いた時に気になっていたのがu8glibのライブラリの定義をどうするかです。この液晶のコントローラーチップはUC1701なのでそれに合わせた設定が必要です。

u8glibのdevicesのUC1701の部分 (クリックで別窓に拡大)
devices

 ソフトウエアSPI(SW SPI)の場合は下記(赤枠内の上段)で定義することになっています。 
 U8GLIB_MINI12864(sck, mosi, cs, a0 [, reset])

 そこで、sck=13, mosi=11, cs=10, a=9と設定。リセットを8に割り当ててもいいのですが、配線が面倒なので電源(3.3V)に接続。ということで、前の記事では次のようにプログラムしました。
 U8GLIB_MINI12864 u8g(13, 11, 10, 9); // UC1701用のライブラリを使用

 ところで、「PIC AVR 工作室 ブログ」の「6502 Laptop」という記事の最後に貼られていた [Cheap][Hack] a 2.50$ Chinese MP3 Player for its 128×64 mini LCDに書かれているプログラムを見るとUC1701をハードウエアSPIで使っているようです。

 ハードウエアSPIで使う場合は下記(赤枠内の下段)の定義を使うことになっています。
 U8GLIB_MINI12864(cs, a0 [, reset])

 実は以前はこの意味が理解できなかったのでソウトウエアSPIを使いました。しかし今回、この上のリンクの記事読んで判りました。ハードウエアSPIで使うピンは物理的に決まっているのでソフトで定義は不要(というか定義は不可能)。そこで残る cs, a0, [reset]だけ定義すればいい、ということになります。ソフト/ハードSPIのどちらであるかは引数の数で判るので名前はMINI12864だけで大丈夫ということのようです。

 つまり、U8GLIBの定義(前の記事のプログラムの11行目)を以下のように書き換えればいいはずです。
 U8GLIB_MINI12864 u8g(10, 9); // HW SPIで動かす

 これ、やってみるとちゃんと動きました。

 となるとハ-ドウエアSPIでどれくらい高速化されるのか知りたくなります。ということでオシロで波形を見てみました。

▼ソフトウエアSPIの場合
SW SPI
 上の波形がSPIのクロック(sck)、下の波形がデーター(mosi)、横軸は500ns/div.、オシロのトリガはデーターの立ち上がりで掛けています。
 
 この波形のクロック周期は1500nsなので転送速度は約660kbpsということになります。クロック波形にジッタがあるのは内部処理の周期が見えているのだと思います。

 話は飛びますが、この波形はアナログオシロで見ているのでジッタはすぐに判ります。でもデジタルオシロだとすぐに気付かない気がします。とは言ってもデジタルオシロは持ってないのでこの話はあまり自信無いです。

 話を戻して、ハードウエアSPIの場合の波形を見てみます。

▼ハードウエアSPIの場合
HW SPI
 横軸は100ns/div.です。 

 クロック周期は250nsになっていて、転送速度は約4Mbpsに上がっています。流石はハードウエアSPIです。

◆まとめ
 ということで、u8glibでのデバイスの定義の方法(コンストラクタの書き方)の理解が深まりました。

 ArduninoのハードウエアSPIを使うとビットレート4Mbpsでデーターが転送されることが確認できました。但しこんな速度でCPU(ATmega328)から連続的にデーターを送り込むのは難しいと思うので、この値はたぶん瞬間最大値なんでしょう。でも他に事情が無ければハードウエアSPIを使わない手は無いでしょう。
カレンダー
12 | 2015/01 | 02
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード