自作電子小物/TIPS/グラフィックLCD L1F10085/AVR

 
 

小型グラフィックLCDモジュールの「EPSON L1F10085」を、ATMEL ATmega328Pで制御するためのソフトウエアサブルーチンライブラリです。 画像表示目的ではなく、キャラクタLCDモジュールの代わりに使うためのソフトウエア部品で、printf()関数で簡単に文字表示を行う事が出来ます。簡単な図形は表示出来ます。

Graphic LCD L1F10085 Library for AVR

2012年3月25日

L1F10085は、NOKIA社の携帯電話3300に使われていたLCDモジュールで、1.7インチ130×130ドットCSTN4096/256色カラー表示でき、比較的安価で比較的入手性が良く、特殊なケーブルやコネクタも不要、ピン数も少なく、マイコンにはとても扱い易いLCDモジュールです。画質は良くはありませんので、画像を表示するには向かないと思いますが、テキスト中心の情報を表示するにはするには十分な部品です。

インターネット上を探せば、同様なサブルーチンを見つける事が出来ますが、ライセンス上面倒になるので自分で作りました。


主な仕様

 対応LCDモジュール: EPSON社L1F10085(LCDコントローラが「EPSON S1D15G10」の物に対応)

 I/Oポート: 3〜4本、SDATA=PD1, CS=PD3, SCK=PD4, RESET=PD0(変更可能、RESETは省略可能)

 色数: 256色モード固定で動作

 座標: X方向左=0、X方向右=129、Y方向上=0、 Y方向下=129

 表示図形: 塗りつぶし矩形、任意角度・任意幅の直線、固定サイズの文字

 文字種: ASCII 7bitコード0x20-0x7f

 文字フォント: 6x8ドット(文字間込み)

 文字数: 20桁×15行

 カーソル機能: なし

 スクロール機能: なし(ラップアラウンド表示されます)

 バックライト制御: なし

 その他: CPUクロックは8MHzにしないと、実用的な速度が得られません。

 API(アプリケーションプログラムインタフェース)

#include “l1f10085.h”


 初期化/終了

void lcd_open();

void lcd_close();

void lcd_start();        // I/Oポート設定のみ

void lcd_init());        // 初期化のみ

void lcd_stop();        // I/Oポート開放


 グラフィック表示

void lcd_draw_rect(unsigned char x, unsigned char y,

                            unsigned char width, unsigned char height,

                            unsigned char color);

void lcd_draw_line(unsigned char x1, unsigned char y1,

                            unsigned char x2, unsigned char y2,

                            unsigned char line_size,

                            unsigned char color);

void lcd_draw_str(unsigned char x, unsigned char y,

                            unsigned char face_color, unsigned char back_color,

                            char *str);


 キャラクタ表示

void lcd_setViewPort(unsigned char x, unsigned char y, unsigned char width, unsigned char height);

void lcd_prString(char *str);

void lcd_prCString(char *str);

void lcd_position(unsigned char column, unsigned char row);

void lcd_color(unsigned char face_color);

void lcd_colors(unsigned char face_color, unsigned char back_color);

void lcd_control(unsigned char command);




ダウンロード

関連ソース全てとサンプルプログラムが入ったIDE(AVRstudio)用のプロジェクトファイル

回路図のEAGLE用のプロジェクトファイル


サンプルの動かし方

・適当なディレクトリにダウンロードしたファイルを展開し、IDEでプロジェクトとして開く。

・回路をブレッドボード等を利用して結線し、AVRISP等のプログラマを接続。

・電源3.3Vを与え、IDEからHEXファイルを書込み。

・書込み完了と同時に、LCDに何かしらの表示が出るはずです。

・バックライトの電源に関係なく、表示は行われます。


ユーザアプリケーションプログラムでの使い方

ソースコードで提供されるライブラリですので、ユーザプロジェクトでコンパイル対象に入れれば、本ライブラリを呼び出せる様になります。具体的には、ユーザのプロジェクトのディレクトリ内に本ライブラリソースファイル2個をコピーし、プロジェクトにもソースファイルを追加登録させるだけです。

サブルーチン内で、WinAVRの<util/delay.h>を使用していますので、IDEのプロジェクト設定のCPUのクロック数の指定を行って下さい。具体的には内容はサンプルプロジェクトをご参照願います。指定しない場合、コンパイルエラーとなります。

使用するI/Oポートは変更可能です。ヘッダファイル”l1f10085.h”内で#define定義している、ポートピンの設定箇所を変更するだけです。RESETピンを使わない様にする事も可能です。この場合、定義自体をコメントアウトすればOKです。


設計情報

・開発環境

  IDE: AVR Studio 4.18.700 

  Compiler: WinAVR 20100110(GCC 4.3.3)

・ソースファイル

  GraphicLCD_sample.c    サンプルプログラム

  l1f10085.h                    ヘッダファイル

  l1f10085.c                    サブルーチン本体

・接続インタフェース

マイコンとの接続インタフェースは、同期シリアル通信です。データ線1本と、クロック1本、フレーム同期線1本+αを使ってデータ伝送します。LCDモジュール内のフレームバッファメモリをコマンド指示で変更する形態です。L1F10085では、9bitSPIという特殊なインタフェースとなりますので、AVR内蔵のSPIやUSARTを利用する事は出来ません。

このサブルーチンでは、ソフトウエアでピンをオン/オフしてデータ転送させる方法となっています。この方が確実に動きを制御出来、データシート通りに、特に問題もなく表示させる事が出来ました。ただし、ソフトウエア制御なので、ATmega328Pの1MHzクロックでは、表示更新は遅いです。8MHzに変更すれば、気にならないレベルになります。

・文字表示

LCDコントローラ内に文字フォントを持っていないので、マイコン上に持たなければなりません。このクラスのマイコンのROMメモリ量では、英数字位しか用意出来ません。フォントを作るのは大変な作業なので、何処かから持ってくる事も考えましたが、著作の扱いが面倒になるので、手作りしております。5x7ドットで英数記号96文字を作りましたが、このサイズではあまり特徴が出し様がなく、だいたい決まってしまいます。なお、AVRはconst宣言した位ではROM上に定数を配置してくれません。この辺は、マイコンの種類によって実装の仕方が違うので、いつも困ってしまいます。


権利関係

GPLに準じます。他から流用したソース部分はありません。参照した情報源は以下の通り。

  1. (1)aitendo@shopping(株式会社 秋葉原)の「LCDモジュール(128×128)[NOKIA3300-LCD]」の販売ページの接続ピン情報 http://www.aitendo.com/product/1239

  2. (2)同ページ上のコントローラチップS1D15G10のデータシート S1D15G10.pdf