自作電子小物/TIPS/グラフィックLCD L1F10085/AVR
自作電子小物/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)aitendo@shopping(株式会社 秋葉原)の「LCDモジュール(128×128)[NOKIA3300-LCD]」の販売ページの接続ピン情報 http://www.aitendo.com/product/1239
(2)同ページ上のコントローラチップS1D15G10のデータシート S1D15G10.pdf