0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

KOMAINO の LED MATRIX を制御する。

Posted at

#はじめに

 最近、KOMAINO というマイコンボードを入手して、いろいろ触ってみようとしましたが、あまり情報がなかったので、試した結果を記述します。
因みに、本家のページも閉鎖中でした。

#具体的に

##1.ローカル接続

 Windows10 上で稼働する Arduino IDE と接続するため、ピンをワイヤーでボードの外へ引き出しました。
使用したUSBTTL は、5Vで稼働するものでしたので、レベルコンバータを使用しました。

  1)RST:プッシュボタンで、GNDへ短絡できるようにする。
  2)TP1:プッシュボタンで、GNDへ短絡できるようにする。
  3)TP3:レベルコンバータ経由で、USBTTL の TXD へ接続する。
  4)TP2:レベルコンバータ経由で、USBTTL の RXD へ接続する。
  5)電池ボックスの赤:USBTTL 5V へ結線する。同時にレベルコンバータの HV へ接続する。
  6)電池ボックスの黒:USBTTL GND へ結線する。同時にレベルコンバータの GND へ接続する。
  7)レギュレータの VOUT(2ピン)をレベルコンバータの LV へ接続する。
  
 これで、Arduino IDE で、「Generic ESP8266 Module」を選択して、マイコンボードに書き込むことができます。(ESP8266の環境をインストールしておく必要がある)
 ただし、実際に書き込むタイミングで、TP1 を押しながら RST を押し離し、書き込みが終了するまで、TP1 を押しっぱなしにする必要がありました。

##2.LED MATRIX

 LED は、L16A という I2C I/O expander で行います。
 Port0 と Port1 の下位5ビットが、LED MATRIX の列と行に対応しています。
 LED MATRIC の左上を (C0, R0)とすると

 	(C0, R0) (C1, R0) (C2, R0) (C3, R0) (C4, R0)
 	(C0, R1) (C1, R1) (C2, R1) (C3, R1) (C4, R1)
 	(C0, R2) (C1, R2) (C2, R2) (C3, R2) (C4, R2)
 	(C0, R3) (C1, R3) (C2, R3) (C3, R3) (C4, R3)
 	(C0, R4) (C1, R4) (C2, R4) (C3, R4) (C4, R4)

 となり、それぞれがPort0, Port1 のビットに対応しています。
 
   Port0: xx xx xx C4 C3 C2 C1 C0
   Port1: xx xx xx R4 R3 R2 R1 R0

 Cx を 1 にし、Rx を 0 にすれば点燈します。例えば、(C0, R1)を 点燈するには、Port0:00000001、Port1:00011101 とします。

 なお電源オン後は、Port0、Port1 の全ビットが Input mode になっているので、該当するビットを Output mode にする必要があります。
 
 参考までに、テストで使用したスケッチを掲載します。

//=================================================
//      COMAINO LED test
//-------------------------------------------------

#include <Wire.h>

//-------------------------------------------------
#define I2C_ADDR 0x20

#define OutputPort0     0x02
#define OutputPort1     0x03
#define ConfigPort0     0x06
#define ConfigPort1     0x07

#define LED_COL_0       B00000001
#define LED_COL_1       B00000010
#define LED_COL_2       B00000100
#define LED_COL_3       B00001000
#define LED_COL_4       B00010000

#define LED_ROW_0       B00000001
#define LED_ROW_1       B00000010
#define LED_ROW_2       B00000100
#define LED_ROW_3       B00001000
#define LED_ROW_4       B00010000

//-------------------------------------------------
uint8_t led_pattern[] = {
  B00000000, B00011111,
  B00000001, B00011110,
  B00000010, B00011101,
  B00000100, B00011011,
  B00001000, B00010111,
  B00010000, B00001111,
  B00010000, B00010111,
  B00010000, B00011011,
  B00010000, B00011101,
  B00010000, B00011110,
  B00010001, B00001110,
  B00001010, B00010101,
  B00001110, B00010001,
  B00011111, B00000000,
};

//-------------------------------------------------
void setup() {
  Serial.begin(9600);
  Serial.println("start LED test");

  Wire.begin(4, 5);   // (SDA:IO4, SCL:IO5)

  // L16A 初期化
  writeI2C(ConfigPort0, B11100000);         // LED ピンを Output に設定する。
  writeI2C(ConfigPort1, B11100000);
}

//-------------------------------------------------
void loop() {
  static  int16_t inx = 0;

  writeI2C(OutputPort0, led_pattern[inx++]);
  writeI2C(OutputPort1, led_pattern[inx++]);
  if (inx > sizeof(led_pattern) - 1)
    inx = 0;  

  delay (1000);
}

//-------------------------------------------------
void writeI2C(uint8_t reg, uint8_t value) {
  uint16_t  r;
 
  Serial.print  (reg, HEX);
  Serial.print  (" ");
  Serial.println(value, HEX);
  
  Wire.beginTransmission(I2C_ADDR);
  Wire.write(reg);
  Wire.write(value);
  Wire.endTransmission();
}
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?