2016年8月16日火曜日

Arduino UNOで3 to 8 ラインデコーダ(TC74HC138AP)を使用する

ぼちぼち通常営業に戻ります.
Arduino UNOを使っていてピン数が足らなくなることがあります.
実効的にピンを増やす方法は幾つかありますが,
多ピンのうち1つだけを選択してLOWとして,他は全部HIGHにしたいときには
3 to 8ラインデコーダ(出力用)
8 to 3ラインエンコーダ(入力用)
がシンプルで有用な場合があります.

ここでは3 to 8 ラインデコーダについてのメモを残しておきます.

秋月で手にはいるものとしては
RENESAS製のHD74LS138
TOSHIBA製のTC74HC138AP
があります.
ここではCMOS版でお安いTC74HC138(30円)を使いますがHD74LS138(60円)もピン配置や使い方は同じです.


・ピンアサインと使い方
ピン配置は右の図の通りです.

1~3ピンに出力端子選択の3ビットの情報を入力します.

論理表はデータシートで確認するとして
動作のイメージは1, 2, 3のピンをそれぞれ
LOW, LOW,LOWとした時に
0番の出力(15ピン)がLOWとなり
1, 2, 3のピンをHIGH, LOW, LOWとした時に
1番の出力(14ピン)がLOWとなるといった具合に3ビットで
8チャネルを指定するというものです.


4~6は出力の選択ができます.
6はG1
4はG2A
5はG2B
で, G1がHIGHの時, G2A, G2BがともにLOWの時のみ出力します.
8ピンの制御をするだけであれば,G2A, G2Bはグランドに接続します.
(これらのピンをうまく使うことで並列接続してもっと多数の出力を制御できます)


16ピンは5V
8ピンはグランド
15~9と7が出力0~7に対応し,1~3ピンで指定したピンだけLOWになります.

簡単に実験してみましょう.



回路は写真のようにブレッドボード上で作成しました.
74HC138を置き,電源とGNDを繋いだら,出力0~7に対応する端子にそれぞれLEDのカソードを接続してみます.
アノード側には共通の1kΩの抵抗を通して5Vにつなぎます.

実験に使ったArduinoのスケッチを載せておきます.
void n_out(int npin){
  
  digitalWrite(13,LOW);
  digitalWrite(10, ((npin >>0) & B0001) );
  digitalWrite(11, ((npin >>1) & B0001) );
  digitalWrite(12, ((npin >>2) & B0001) );
  digitalWrite(13,HIGH);

}
void setup() {
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT); 
  pinMode(13, OUTPUT); 
}

void loop() {
 int delay_time=100;
 
 for(int i =0; i<8 delay="" delay_time="" for="" i="" int="" n_out="">=0;i--){
 n_out(i);  
 delay(delay_time);
 }   
}


この8ピンのうち一つのLEDを順番に点灯させて行っていることがわかります.


0 件のコメント: