IS-C15ANP4使ってみた!(準備編)

投稿者:

日本開閉器工業株式会社さんの「有機ELディスプレイ多機能押ボタンスイッチ(IS-C15ANP4)」という液晶ディスプレイにスイッチが合体した商品をArduinoから使ってみました。

お知らせ:この度スイッチサイエンスで「IS-C15ANP4」の取り扱いが開始されました!
http://www.switch-science.com/catalog/1326/


用意した物
・Arduino(今回はUno-R3を使いました)
・IS-C15ANP4(有機ELディスプレイ多機能押ボタンスイッチ本体)
・抵抗(1kΩ×2本,10kΩ×3本)
・電解コンデンサ(10uF/50V)
・トランジスタ(2SC1815,2SA1015)
・5Vから15Vを作るための昇圧ボード(今回はコーセルのオンボード電源SUS1R50515Cを使いました)
・ジャンパー線(10本)

上記以外にIS-C15ANP4が2mmピッチで千鳥配置だったので2.54mmピッチへの変換するための基板を自作しました

以下のように接続しました。

実際にブレッドボード上で回路を組んでみました。

これで回路はできあがり、次はソフトウエア部分ですね。

まずは初期化部分です。
#画素数は64×48ドット、今回は65536色(16bitColor:R5+G6+B5)モードで使用します

#include <SPI.h>

#define pinSW 6
#define pin15V 7
#define pinRES 8
#define pinDC 9
#define pinSS 10
#define CMD 0
#define DAT 1

#define SetupColumnAddress 0
#define SetupRowaddress 1
#define SetContrastColorA 2
#define SetContrastColorB 3
#define SetContrastColorC 4
#define MasterCurrentControl 5
#define RemapColorDepth 6
#define SetDisplayStartLine 7
#define SetDisplayOffset 8
#define SetDisplayMode 9
#define SetMultiplexRatio 10
#define DimModeSetting 11
#define SetDisplayDim 12
#define SetDisplayOff 13
#define SetDisplayNormal 14
#define SetMasterConfiguration 15
#define PhasePeriodAdjustment 16
#define DisplayClockDivider 17
#define EnableLinearGrayScale 18
#define SetPrechargeLevel 19
#define SetVcomh 20
#define ColorDepth64k 21

byte Fundamental[][6] = {
  {0x03,0x15,0x10,0x4f},            // SetupColumnAddress
  {0x03,0x75,0x00,0x2f},            // SetupRowaddress
  {0x02,0x81,0x19},                 // SetContrastColorA
  {0x02,0x82,0x14},                 // SetContrastColorB
  {0x02,0x83,0x24},                 // SetContrastColorC
  {0x02,0x87,0x0f},                 // MasterCurrentControl
  {0x02,0xa0,0x70},                 // RemapColorDepth
  {0x02,0xa1,0x00},                 // SetDisplayStartLine
  {0x02,0xa2,0x10},                 // SetDisplayOffset
  {0x01,0xa4},                      // SetDisplayMode
  {0x02,0xa8,0x2f},                 // SetMultiplexRatio
  {0x05,0xab,0x12,0x0c,0x14,0x12},  // DimModeSetting
  {0x01,0xac},                      // SetDisplayDim
  {0x01,0xae},                      // SetDisplayOff
  {0x01,0xaf},                      // SetDisplayNormal
  {0x02,0xad,0x8e},                 // SetMasterConfiguration
  {0x02,0xb1,0x44},                 // PhasePeriodAdjustment
  {0x02,0xb3,0xa0},                 // DisplayClockDivider
  {0x01,0xb9},                      // EnableLinearGrayScale
  {0x02,0xbb,0x12},                 // SetPrechargeLevel
  {0x03,0xbe,0x28},                 // SetVcomh
  {0x02,0xa0,0x70},                 // ColorDepth64k
};

void setup() {
  pinMode(pinSW,INPUT);
  pinMode(pinSS,OUTPUT);
  pinMode(pinRES,OUTPUT);
  pinMode(pinDC,OUTPUT);
  pinMode(pin15V,OUTPUT);
  SPI.begin();
  SPI.setBitOrder(MSBFIRST);
  SPI.setClockDivider(SPI_CLOCK_DIV4);
  SPI.setDataMode(SPI_MODE3);
  IS_C15ANP4_Init();
}

void IS_C15ANP4_Init() {
  digitalWrite(pin15V,LOW);
  digitalWrite(pinRES,LOW);
  delay(3);
  digitalWrite(pinRES,HIGH);
  digitalWrite(pin15V,HIGH);
  IS_C15ANP4_AdrInit();
  IS_C15ANP4_SendCommand(SetContrastColorA);
  IS_C15ANP4_SendCommand(SetContrastColorB);
  IS_C15ANP4_SendCommand(SetContrastColorC);
  IS_C15ANP4_SendCommand(MasterCurrentControl);
  IS_C15ANP4_SendCommand(SetDisplayStartLine);
  IS_C15ANP4_SendCommand(SetDisplayOffset);
  IS_C15ANP4_SendCommand(SetDisplayMode);
  IS_C15ANP4_SendCommand(SetMultiplexRatio);
  IS_C15ANP4_SendCommand(DimModeSetting);
  IS_C15ANP4_SendCommand(SetMasterConfiguration);
  IS_C15ANP4_SendCommand(PhasePeriodAdjustment);
  IS_C15ANP4_SendCommand(DisplayClockDivider);
  IS_C15ANP4_SendCommand(EnableLinearGrayScale);
  IS_C15ANP4_SendCommand(SetPrechargeLevel);
  IS_C15ANP4_SendCommand(SetVcomh);
  IS_C15ANP4_SendCommand(ColorDepth64k);
  IS_C15ANP4_SendCommand(SetDisplayNormal);
}

void IS_C15ANP4_AdrInit() {
  IS_C15ANP4_SendCommand(SetupColumnAddress);
  IS_C15ANP4_SendCommand(SetupRowaddress);
}

void IS_C15ANP4_Send(int no) {
  for (int i = 0;i < Fundamental[no][0];i++) {
    IS_C15ANP4_SendData(Fundamental[no][i + 1]);
  }
}

void IS_C15ANP4_SendCommand(int no) {
  digitalWrite(pinDC,CMD);
  IS_C15ANP4_Send(no);
}

void IS_C15ANP4_SendData(byte dat) {
  digitalWrite(pinSS,0);
  SPI.transfer(dat);
  digitalWrite(pinSS,1);
}

これで準備は整いました、次は実際に絵を出す方法をいくつか紹介していきます。
今回のプログラムにはメイン部分(loop)がありません。
コンパイルして確認したい方は「void loop() {}」を追記すればコンパイルだけはできます。

あとがき:
実はこれ、CQ出版社様「エレキジャック」のwebページに掲載されていたmbedにIS-C15ANP4を繋ぐ記事をArduino用に置き換えたものです。
http://www.eleki-jack.com/arm/2011/02/eloled-23.html