マイコンArduinoを使って電光掲示板を作る。

マイコンArduinoを使って電光掲示板を作る。

 

続き

先ず、新しいモジュールSLX-5024に必要なケーブル類を作りました。

 

制御用ケーブルと電源ケーブル

ブレッドボードに差し込めるようにゼムクリップを切ってはんだ付け

 

接続した様子

LED点灯用電源と制御用電源は共用にしました。

 

Arduinoとモジュールの接続

信号線は11本 + GND

結線

マイコン            コネクタ

D0            1

D1            2

D2            3

D3            4

D4            5

D5            6

D6            8

D7            9

D8                10

D9                11

D10                 12

GND           7

 

電源            コネクタ

GND               1

5V             2

5V             3

GND            4

GND            5

5V             6

 

試しに電源だけを繋いで見ました。

明るすぎて周りが真っ暗に写っています。

 

このモジュールは本体のみで点灯可能です。ただ、データを送って無いのででたらめな表示になります。

 

実験用のコントロールが出来るプログラム

// slx_5024

void setup() {
  // put your setup code here, to run once:
  pinMode(0,OUTPUT); // デジタルピンのD0を出力に設定する
  pinMode(1,OUTPUT); // デジタルピンのD1を出力に設定する
  pinMode(2,OUTPUT); // デジタルピンのD2を出力に設定する
  pinMode(3,OUTPUT); // デジタルピンのD3を出力に設定する
  pinMode(4,OUTPUT); // デジタルピンのD4を出力に設定する
  pinMode(5,OUTPUT); // デジタルピンのD5を出力に設定する
  pinMode(6,OUTPUT); // デジタルピンのD6を出力に設定する
  pinMode(7,OUTPUT); // デジタルピンのD7を出力に設定する
  pinMode(8,OUTPUT); // デジタルピンのD8を出力に設定する
  pinMode(9,OUTPUT); // デジタルピンのD9を出力に設定する
  pinMode(10,OUTPUT); // デジタルピンのD10を出力に設定する

  digitalWrite(0,HIGH); // SE     L 自動でRAM切り替わり
  digitalWrite(1,LOW); // A/BB   書き込み用RAM選択
  digitalWrite(2,LOW); // A3     アドレス
  digitalWrite(3,LOW); // A2     アドレス
  digitalWrite(4,LOW); // A1     アドレス
  digitalWrite(5,LOW); // A0     アドレス
  digitalWrite(6,LOW); // GREEN  緑データ
  digitalWrite(7,LOW); // CLK    クロック
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(9,LOW); // RED    赤データ
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

  // アドレス0
  digitalWrite(5,LOW); // A0     アドレス
  digitalWrite(4,LOW); // A1     アドレス
  digitalWrite(3,LOW); // A2     アドレス
  digitalWrite(2,LOW); // A3     アドレス
  digitalWrite(9,LOW); // RED    赤データ
  digitalWrite(6,LOW); // GREEN  緑データ
  clock_n(32); // クロック
  digitalWrite(10,HIGH); // ALE   アドレスラッチ Hで有効
  digitalWrite(8,HIGH); // WE     書き込み信号 Hで書き込み
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

  // アドレス1
  digitalWrite(5,HIGH); // A0     アドレス
  digitalWrite(4,LOW); // A1     アドレス
  digitalWrite(3,LOW); // A2     アドレス
  digitalWrite(2,LOW); // A3     アドレス
  digitalWrite(9,LOW); // RED    赤データ
  digitalWrite(6,LOW); // GREEN  緑データ
  clock_n(32); // クロック
  digitalWrite(10,HIGH); // ALE   アドレスラッチ Hで有効
  digitalWrite(8,HIGH); // WE     書き込み信号 Hで書き込み
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

  // アドレス2
  digitalWrite(5,LOW); // A0     アドレス
  digitalWrite(4,HIGH); // A1     アドレス
  digitalWrite(3,LOW); // A2     アドレス
  digitalWrite(2,LOW); // A3     アドレス
  digitalWrite(9,LOW); // RED    赤データ
  digitalWrite(6,LOW); // GREEN  緑データ
  clock_n(32); // クロック
  digitalWrite(10,HIGH); // ALE   アドレスラッチ Hで有効
  digitalWrite(8,HIGH); // WE     書き込み信号 Hで書き込み
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

  // アドレス3
  digitalWrite(5,HIGH); // A0     アドレス
  digitalWrite(4,HIGH); // A1     アドレス
  digitalWrite(3,LOW); // A2     アドレス
  digitalWrite(2,LOW); // A3     アドレス
  digitalWrite(9,LOW); // RED    赤データ
  digitalWrite(6,LOW); // GREEN  緑データ
  clock_n(32); // クロック
  digitalWrite(10,HIGH); // ALE   アドレスラッチ Hで有効
  digitalWrite(8,HIGH); // WE     書き込み信号 Hで書き込み
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

  // アドレス4
  digitalWrite(5,LOW); // A0     アドレス
  digitalWrite(4,LOW); // A1     アドレス
  digitalWrite(3,HIGH); // A2     アドレス
  digitalWrite(2,LOW); // A3     アドレス
  digitalWrite(9,LOW); // RED    赤データ
  digitalWrite(6,LOW); // GREEN  緑データ
  clock_n(32); // クロック
  digitalWrite(10,HIGH); // ALE   アドレスラッチ Hで有効
  digitalWrite(8,HIGH); // WE     書き込み信号 Hで書き込み
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

  // アドレス5
  digitalWrite(5,HIGH); // A0     アドレス
  digitalWrite(4,LOW); // A1     アドレス
  digitalWrite(3,HIGH); // A2     アドレス
  digitalWrite(2,LOW); // A3     アドレス
  digitalWrite(9,LOW); // RED    赤データ
  digitalWrite(6,LOW); // GREEN  緑データ
  clock_n(32); // クロック
  digitalWrite(10,HIGH); // ALE   アドレスラッチ Hで有効
  digitalWrite(8,HIGH); // WE     書き込み信号 Hで書き込み
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

  // アドレス6
  digitalWrite(5,LOW); // A0     アドレス
  digitalWrite(4,HIGH); // A1     アドレス
  digitalWrite(3,HIGH); // A2     アドレス
  digitalWrite(2,LOW); // A3     アドレス
  digitalWrite(9,LOW); // RED    赤データ
  digitalWrite(6,LOW); // GREEN  緑データ
  clock_n(32); // クロック
  digitalWrite(10,HIGH); // ALE   アドレスラッチ Hで有効
  digitalWrite(8,HIGH); // WE     書き込み信号 Hで書き込み
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

  // アドレス7
  digitalWrite(5,HIGH); // A0     アドレス
  digitalWrite(4,HIGH); // A1     アドレス
  digitalWrite(3,HIGH); // A2     アドレス
  digitalWrite(2,LOW); // A3     アドレス
  digitalWrite(9,LOW); // RED    赤データ
  digitalWrite(6,LOW); // GREEN  緑データ
  clock_n(32); // クロック
  digitalWrite(10,HIGH); // ALE   アドレスラッチ Hで有効
  digitalWrite(8,HIGH); // WE     書き込み信号 Hで書き込み
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

  // アドレス8
  digitalWrite(5,LOW); // A0     アドレス
  digitalWrite(4,LOW); // A1     アドレス
  digitalWrite(3,LOW); // A2     アドレス
  digitalWrite(2,HIGH); // A3     アドレス
  digitalWrite(9,LOW); // RED    赤データ
  digitalWrite(6,LOW); // GREEN  緑データ
  clock_n(32); // クロック
  digitalWrite(10,HIGH); // ALE   アドレスラッチ Hで有効
  digitalWrite(8,HIGH); // WE     書き込み信号 Hで書き込み
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

  // アドレス9
  digitalWrite(5,HIGH); // A0     アドレス
  digitalWrite(4,LOW); // A1     アドレス
  digitalWrite(3,LOW); // A2     アドレス
  digitalWrite(2,HIGH); // A3     アドレス
  digitalWrite(9,LOW); // RED    赤データ
  digitalWrite(6,LOW); // GREEN  緑データ
  clock_n(32); // クロック
  digitalWrite(10,HIGH); // ALE   アドレスラッチ Hで有効
  digitalWrite(8,HIGH); // WE     書き込み信号 Hで書き込み
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

  // アドレス10
  digitalWrite(5,LOW); // A0     アドレス
  digitalWrite(4,HIGH); // A1     アドレス
  digitalWrite(3,LOW); // A2     アドレス
  digitalWrite(2,HIGH); // A3     アドレス
  digitalWrite(9,LOW); // RED    赤データ
  digitalWrite(6,LOW); // GREEN  緑データ
  clock_n(32); // クロック
  digitalWrite(10,HIGH); // ALE   アドレスラッチ Hで有効
  digitalWrite(8,HIGH); // WE     書き込み信号 Hで書き込み
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

  // アドレス11
  digitalWrite(5,HIGH); // A0     アドレス
  digitalWrite(4,HIGH); // A1     アドレス
  digitalWrite(3,LOW); // A2     アドレス
  digitalWrite(2,HIGH); // A3     アドレス
  digitalWrite(9,LOW); // RED    赤データ
  digitalWrite(6,LOW); // GREEN  緑データ
  clock_n(32); // クロック
  digitalWrite(10,HIGH); // ALE   アドレスラッチ Hで有効
  digitalWrite(8,HIGH); // WE     書き込み信号 Hで書き込み
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

  // アドレス12
  digitalWrite(5,LOW); // A0     アドレス
  digitalWrite(4,LOW); // A1     アドレス
  digitalWrite(3,HIGH); // A2     アドレス
  digitalWrite(2,HIGH); // A3     アドレス
  digitalWrite(9,LOW); // RED    赤データ
  digitalWrite(6,LOW); // GREEN  緑データ
  clock_n(32); // クロック
  digitalWrite(10,HIGH); // ALE   アドレスラッチ Hで有効
  digitalWrite(8,HIGH); // WE     書き込み信号 Hで書き込み
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

  // アドレス13
  digitalWrite(5,HIGH); // A0     アドレス
  digitalWrite(4,LOW); // A1     アドレス
  digitalWrite(3,HIGH); // A2     アドレス
  digitalWrite(2,HIGH); // A3     アドレス
  digitalWrite(9,LOW); // RED    赤データ
  digitalWrite(6,LOW); // GREEN  緑データ
  clock_n(32); // クロック
  digitalWrite(10,HIGH); // ALE   アドレスラッチ Hで有効
  digitalWrite(8,HIGH); // WE     書き込み信号 Hで書き込み
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

  // アドレス14
  digitalWrite(5,LOW); // A0     アドレス
  digitalWrite(4,HIGH); // A1     アドレス
  digitalWrite(3,HIGH); // A2     アドレス
  digitalWrite(2,HIGH); // A3     アドレス
  digitalWrite(9,LOW); // RED    赤データ
  digitalWrite(6,LOW); // GREEN  緑データ
  clock_n(32); // クロック
  digitalWrite(10,HIGH); // ALE   アドレスラッチ Hで有効
  digitalWrite(8,HIGH); // WE     書き込み信号 Hで書き込み
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

  // アドレス15
  digitalWrite(5,HIGH); // A0     アドレス
  digitalWrite(4,HIGH); // A1     アドレス
  digitalWrite(3,HIGH); // A2     アドレス
  digitalWrite(2,HIGH); // A3     アドレス
  digitalWrite(9,LOW); // RED    赤データ
  digitalWrite(6,LOW); // GREEN  緑データ
  clock_n(32); // クロック
  digitalWrite(10,HIGH); // ALE   アドレスラッチ Hで有効
  digitalWrite(8,HIGH); // WE     書き込み信号 Hで書き込み
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

  digitalWrite(1,HIGH); // A/BB   書き込み用RAM選択
}

void loop() {
}

void clock() {
  digitalWrite(7,HIGH); // クロック
  digitalWrite(7,LOW);  // クロック
}

void clock_n(int n) {
  for (int i = 0;i < n;i++)
    clock();
}

 

このプログラムを実行

アドレス0からアドレス15までアドレスが違うだけでやっていることは同じです。

digitalWrite(9,LOW); // RED    赤データ
digitalWrite(6,LOW); // GREEN  緑データ

両データともLをセットしてclock_n(32); // クロック、それを全列行っています。

クロックを送った後にALE、WEで書き込み操作

最後のdigitalWrite(1,HIGH); // A/BB   書き込み用RAM選択

即ち全面クリア。

基本このプログラムをfor文などで回すだけ。

 

実験

// アドレス0
  digitalWrite(5,LOW); // A0     アドレス
  digitalWrite(4,LOW); // A1     アドレス
  digitalWrite(3,LOW); // A2     アドレス
  digitalWrite(2,LOW); // A3     アドレス
  digitalWrite(9,HIGH); // RED    赤データ
  digitalWrite(6,LOW); // GREEN  緑データ
  clock_n(32); // クロック
  digitalWrite(10,HIGH); // ALE   アドレスラッチ Hで有効
  digitalWrite(8,HIGH); // WE     書き込み信号 Hで書き込み
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

 

// アドレス0
  digitalWrite(5,LOW); // A0     アドレス
  digitalWrite(4,LOW); // A1     アドレス
  digitalWrite(3,LOW); // A2     アドレス
  digitalWrite(2,LOW); // A3     アドレス
  digitalWrite(9,LOW); // RED    赤データ
  digitalWrite(6,HIGH); // GREEN  緑データ
  clock_n(32); // クロック
  digitalWrite(10,HIGH); // ALE   アドレスラッチ Hで有効
  digitalWrite(8,HIGH); // WE     書き込み信号 Hで書き込み
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

 

// アドレス0
  digitalWrite(5,LOW); // A0     アドレス
  digitalWrite(4,LOW); // A1     アドレス
  digitalWrite(3,LOW); // A2     アドレス
  digitalWrite(2,LOW); // A3     アドレス
  digitalWrite(9,HIGH); // RED    赤データ
  digitalWrite(6,HIGH); // GREEN  緑データ
  clock_n(32); // クロック
  digitalWrite(10,HIGH); // ALE   アドレスラッチ Hで有効
  digitalWrite(8,HIGH); // WE     書き込み信号 Hで書き込み
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

 

  // アドレス8
  digitalWrite(5,LOW); // A0     アドレス
  digitalWrite(4,LOW); // A1     アドレス
  digitalWrite(3,LOW); // A2     アドレス
  digitalWrite(2,HIGH); // A3     アドレス
  digitalWrite(9,HIGH); // RED    赤データ
  digitalWrite(6,LOW); // GREEN  緑データ
  clock_n(16); // クロック
  digitalWrite(9,LOW); // RED    赤データ
  digitalWrite(6,HIGH); // GREEN  緑データ
  clock_n(16); // クロック
  digitalWrite(10,HIGH); // ALE   アドレスラッチ Hで有効
  digitalWrite(8,HIGH); // WE     書き込み信号 Hで書き込み
  digitalWrite(8,LOW); // WE     書き込み信号 Hで書き込み
  digitalWrite(10,LOW); // ALE   アドレスラッチ Hで有効

それぞれ基本のプログラムと違うのは太字の部分だけです。

 

色々と書き替えて試して下さい。

 

次回はfor文などで小さくまとめていきます。

 

では、また。

 

mckeechan.hatenadiary.com