Arduino I2C

お約束ですが、このページのいかなる記載においても著者は一切の責任をおいません。

ストロベリーリナックスの安価な I2C液晶モジュール(SB0802G)を試してみました。 このモジュールはST7032iというコントローラを使っているようです。 電源が3.3Vなので3.3Vの8MHzのArduino Proを使いました。 リセットはVDDにプルアップして、4本で接続しています。

IMGP1274
// http://blog.goo.ne.jp/sim00/e/ab138be751d447bcdb0eecaaca232214

#include <Wire.h>

// Arduino     i2c-lcd
// Ana 5 ----- 2pin scl (pull-up 47k ohm)
// Ana 4 ----- 3pin sda (pull-up 47k ohm)
// GND ------- 4pin
// 5V -------- 5pin

int ledPin = 13;
int sdaPin = 18; // analog pin 4
int sclPin = 19; // analog pin 5
int i2cadr = 0x3e;
byte contrast = 32; // 0-63

void lcd_cmd(byte x)
{
  Wire.beginTransmission(i2cadr);
  Wire.send(0b00000000);   // CO = 0,RS = 0
  Wire.send(x);
  Wire.endTransmission();
}

void lcd_contdata(byte x)
{
  Wire.send(0b11000000);   // CO = 1, RS = 1
  Wire.send(x);
}

void lcd_lastdata(byte x)
{
  Wire.send(0b01000000);   // CO = 0, RS = 1
  Wire.send(x);
}

void lcd_puts(const char *s)
{
  Wire.beginTransmission(i2cadr);
  while(*s) {
    if(*(s + 1)) {
      lcd_contdata(*s);
    } else {
      lcd_lastdata(*s);
    }
    ++s;
  }
  Wire.endTransmission();
}

void lcd_init()
{
  // wait
  delay(500);
  // LCD initialize
  Wire.begin();
  lcd_cmd(0b00111000); // function set
  lcd_cmd(0b00111001); // function set
  lcd_cmd(0b00010100); // interval osc
  lcd_cmd(0b01110000 | (contrast & 0xF)); // contrast Low
  lcd_cmd(0b01011100 | ((contrast >> 4) & 0x3)); // contast High/icon/power
  lcd_cmd(0b01101100); // follower control
  delay(200);
  lcd_cmd(0b00111000); // function set
  lcd_cmd(0b00001100); // Display On
  lcd_cmd(0b00000001); // Clear Display
  delay(2);            // Clear Displayは追加ウェイトが必要
}

void lcd_move(byte pos){
  lcd_cmd(0x80 | pos);
}

void setup()
{
  lcd_init();
  
  pinMode(ledPin, OUTPUT); // Lチカ
}

void loop()
{
  digitalWrite(ledPin, HIGH);
  lcd_move(0x00);
  lcd_puts("Hello");
  lcd_move(0x40);
  lcd_puts("World");
  delay(1000);
  digitalWrite(ledPin, LOW);
  lcd_cmd(0b00000001); // Clear Display
  delay(1000);
}
get_ack

動作するまでずいぶん手こずりました。ピンが0.5mピッチでハンダ付けが怪しいの かすごく不安定です。。。 参考にさせてもらったページのコードを元に表示用のデータを連続して送るように いじってあります。

ATtiny2313を使った1チップI2C&シリアルインターフェイスマルチ機能アダプタ というページがあって作ってみた。材料も安価で良いと思う。



Copyright (C) 2012 Hiroki Mori All Rights Reserved.