2014年6月20日金曜日

I2C接続LCDを動かす

参考にさせていただいたサイトです。
ありがとうございます。
Sim's blog様
http://blog.goo.ne.jp/sim00/e/ab138be751d447bcdb0eecaaca232214
オレ工房様
http://ore-kb.net/archives/195
I2C低電圧キャラクタ液晶モジュール(16x2行)
http://strawberry-linux.com/catalog/items?code=27001
初めてのPIC様
http://sky.geocities.jp/home_iwamoto/page/P14K50/P14_B02.htm
400kHzはこれしかない。まず基本プログラムを移植して動作確認してみたいです。
わからないところが山積みです。
コントラスト調整、ウエイト調整。配線短く、プルアップは近くに付ける。
購入してためしてみますが、どなたか動かしてみていただけませんか。
動けばC-Styleのコマンドと置き換えます。


// D_I2C.h に書き加える。
#define LCD_ADRS_stli  0x3e  //? ストロベリーリナックス社LCD
#define contrast 7 //? 0~63 電源が5Vなのでかなり小さくした。
// *****************************************************************************
// D_I2C.c に書き加える。
//-------- コマンド出力 --------
void lcd_cmd(byte x)
{
  i2c_send(LCD_ADRS_stli, 0x00);
  i2c_send(LCD_ADRS_stli, x);
  Delay10TCYx(40);// 50μsec
}
//-------- 1文字表示 --------
void lcd_data(byte x)
{
  i2c_send(LCD_ADRS_stli, 0x40);
  i2c_send(LCD_ADRS_stli, x);
  Delay10TCYx(40);// 50μsec
}
//-------- 文字列出力 --------
void lcd_puts_stli(char *str)
{
  i2c_send(LCD_ADRS_stli, 0x40);
  i2c_send(LCD_ADRS_stli, str);  //?
  wait_ms(20);
}
//-------- 初期化 --------
void lcd_init()
{
  lcd_cmd(0x38); // function set
  lcd_cmd(0x39); // function set
  lcd_cmd(0x14); // interval osc
  lcd_cmd(0x70 | (contrast & 15)); //? contrast low
  lcd_cmd(0x5c | (contrast >> 4 & 3)); //? contrast high / icon / power
  lcd_cmd(0x6c); //? follower control  3.3V:6c 5V:69 follower on
  wait_ms(2);
  lcd_cmd(0x38); // function set
  lcd_cmd(0x0c); // display on
  lcd_cmd(0x01); // clear display
  wait_ms(2);
}
//-------- カーソル位置指定 --------?
void lcd_move(char pos)
{
    unsigned char pcode;
    switch(pos & 0x03){      //?  
        case 1:    pcode=0x80;break;
        case 2:    pcode=0xC0;break;
    }
  lcd_cmd(pcode);
}
// *****************************************************************************
// C-Code で書く。
// -------- テストプログラム --------
void main()
{
  lcd_init();
  lcd_puts_stli("Hello, Tj3B!");
//lcd_move(1);     //?上段にカーソル移動
//lcd_move(2);     //?下段にカーソル移動
//lcd_cmd(0x80);     //?上段にカーソル移動
  lcd_cmd(0xC0);     //?下段にカーソル移動
  lcd_puts_stli("i2c LCD module");
 set_Led(1, LED_ON);
}
// *****************************************************************************

3 件のコメント:

Unknown さんのコメント...

ちょくちょく記事を参考にしています。
TJ3BへのI2C液晶ですが、踏ん張ってみたところ使えるようになりました。
http://d.hatena.ne.jp/ohguma/20140707

karabisaa さんのコメント...

熊工房さま、投稿ありがとうございます。
ブログはよく拝見させていただいております。
これはすごい!!!
http://d.hatena.ne.jp/ohguma/20140707
こちらでもご紹介させてください。

Unknown さんのコメント...

再現実験していただいて問題ないようでしたら、どうぞ公開してください。

より安価にできないかと考え、aitendoの50%OFF祭りのI2C液晶を頼んでみたので、こちらも試せたらブログに載せます。