HD74LV166A(他74HC166等)を使ってArduinoのインプットを増やす

Arduinoの…入力を増やしたいのです…!
そんな一心で色々試して、実現した記録です。

UNOの場合はデジタル13ピン、アナログ6ピン。
これが全てデジタルの入力に使えるわけですが、
どうしても入力や出力が足りなくなる事がある。
少し調べるとおそらくほとんど全ての方が
きむ茶工房ガレージハウスさんのページにたどり着くはず。
necobitも大いに勉強させてもらいました。
すごくわかりやすかったです。

ここで使われている74HC165というチップ、
残念な事に我らが秋月では取り扱いがない。
その代わりにルネサスのHD74LV166ATという表面実装の
チップが売っている。
74…166…?ってどんなチップなんだろう。
で、色々検索しまくっていたら、
166とピンアサインが違うのが165という情報があったので、
じゃあ使えるじゃん!と買ってみました。(後にこれは間違いだとわかる)

2017-08-09 15.54.07
165と166のピンアサインは全然違うので比較しながら配線
比較が楽なので166のデータシートは東芝のやつを引用。
一応配線とレジスタの反応は同じ事を確認済み。

2017-08-09 17.46.21
こんな感じです。(本当はSSOPだけどDIP化基板使ってるから…)
テストだけなので、プルアップ、プルダウン抵抗は使わず
緑の配線を5Vに繋いだりGNDに繋いだりすると
HLが変わる雑仕様です。みんなはちゃんとプルアップ/ダウンしよう!

んで、早速きむ茶工房さんのコードを書き込んで動作確認。
DGvtGE9U0AAUMUU
Waiting…はデバッグ用に書き足したんですが、
最初はちゃんと読み取ってくれるけど、
すぐに0になってしまい、その後は入力をHにしても全く反応せず。
なんかおかしい。

で、その状態で2日ほどあーでもないこーでもない
配線は間違ってないDIP化キットへの半田付けも大丈夫と
色々調べても変わらず。穴があくほどデータシートとの
にらめっこをしていると…

2017-08-09 15.29.08
これだー!
165はS/LピンをLにするとその瞬間にピンの内容を
パラレルレジスタ(でいいのかな、よくわからん)に記憶するが、
166はS/LをLにして、クロック(CK)を立ち上げる必要があったんだ!

というわけで、
きむ茶工房さんのコードをの一部変更。

byte ShiftIn(int dataPin,int clockPin,int loadPin)
{
     unsigned char x ;
     int  i ;

     x = 0 ;
     digitalWrite(loadPin,LOW) ;          // 入力端子(A-H)の情報をレジスタに読込めと指示する
      digitalWrite(clockPin,HIGH) ;        // ここが追加した所 /クロックピンをHに立ち上げて入力端子情報をレジスタに格納
      digitalWrite(clockPin,LOW) ;         // ここも追加した所 /元に戻す
     digitalWrite(loadPin,HIGH) ;
     x = x | (digitalRead(dataPin) << 7) ;// H端子の内容を受信する
     for (i=6 ; i>=0 ; i--) {             // G端子~A端子まで繰り返す
          digitalWrite(clockPin,HIGH) ;         // 1ビットシフト指示を出す
          digitalWrite(clockPin,LOW) ;
          x = x | (digitalRead(dataPin) << i) ; // シフトされた内容を受信する
     }
     return x ;
}

これで無事HD74LV166ATの入力を読み取る事が出来た。
165は166のピンアサイン違いという情報は間違いで、
真理値表も結構違うという結果だった。
個人的には、データシートをまともに読み取れるようになったのが
大きな進歩なので大変嬉しい。2日かかったけど。
みんなどんどんスイッチを増やそう!

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

スイッチサイエンス Arduinoをはじめようキット
価格:4320円(税込、送料別) (2017/8/9時点)

 


投稿日

カテゴリー:

投稿者:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください