セットアップや使用方法 2801
tinygoと74HC165を使用した入力ポートの拡張
初めに
前回は、74HC595を使用した液晶表示について紹介をしました。Xiaoのように入出力ピンが少ないとできるだけ、ICなどを活用して少ないピン数で制御しないとすぐに入出力ポートが不足します。今回は、74HC165を使用した入力ポートの拡張について紹介します。
74HC165とは
74HC165は、パラレル入力、シリアル出力のシフトレジスタを内蔵したロジックICで入力ピンの拡張をするときによく利用されています。
回路図
- 74HC165の1番ピンの(SH/LD)をHighからLowに変化させ、入力の状態をレジスタに保持させます。初めにA(11番ピン)に接続された状態が出力されているので、取り込みます。
- 取り込み後、2番ピン(CLK)のクロック入力のピンをHighにしてデータをシフトします。シフトされるとB(12番ピン)のデータに変更になるのでデータを取り込み、2番ピン(CLK)のクロック入力のピンをLowに変更します。
- あとは、2.の処理を繰り返せば、データを取り込めます。(データはC->D->...->G->Hの順で出力されます)
プログラムについて
プログラムは次のようになります。開発環境については、Seeed Xiaoを使用したTinyGoプログラミング~Lチカ編~ とtinygoと74HC595を使用したキャラクタ液晶表示 を参考にしてください。
main.go
package main
import (
"ShiftIn/ShiftIn"
"fmt"
"machine"
"time"
)
func main() {
var data uint8
/* 構造体の宣言 */
shft := ShiftIn.New(machine.D7, machine.D8, machine.D9)
for {
/* シフトレジよりデータを取得 */
data = shft.GetData()
fmt.Println(data)
time.Sleep(time.Millisecond * 100)
}
}
Shiftin.go
package ShiftIn
import (
"machine"
)
type ShiftIn struct {
data machine.Pin // シフトレジスタデータ入力ピン
clk machine.Pin // シフトレジスタクロックピン
sh machine.Pin // データロード制御
}
/* シフトレジスタ初期化 */
/* (74HC165) QH(Data) -> Pin9 CLK -> Pin2 SH/LD -> Pin1 */
func New(data machine.Pin, clk machine.Pin, sh machine.Pin) ShiftIn {
/* 構造体の宣言 */
shft := ShiftIn{}
/* 構造体に格納 */
shft.data = data
shft.clk = clk
shft.sh = sh
/* 各ピンの設定 */
shft.data.Configure(machine.PinConfig{Mode: machine.PinInput})
shft.clk.Configure(machine.PinConfig{Mode: machine.PinOutput})
shft.sh.Configure(machine.PinConfig{Mode: machine.PinOutput})
/* 初期状態の設定 */
sh.High()
clk.Low()
return shft
}
/* データ取得関数 */
func (shft *ShiftIn) GetData() uint8 {
/* 格納変数の宣言 */
var inData uint8
/* 無名関数の宣言 */
setBit := func(in bool) uint8 {
if shft.data.Get() {
return 0x00
} else {
return 0x01
}
}
// 格納変数クリア
inData = 0x00
// MSBを取得
shft.sh.Low()
shft.sh.High()
inData |= setBit(shft.data.Get())
/* 残りのビットを取得 */
for i := 1; i < 8; i++ {
inData <<= 1
shft.clk.High()
inData |= setBit(shft.data.Get())
shft.clk.Low()
}
/* データを返す */
return inData
}
最後に
今回は、74HC165を使用して、入力ポートを拡張する方法について紹介しました。SeeedXiaoのようにピン数が少ないとすぐに入出力ピンが不足します。今回の74HC165やtinygoと74HC595を使用したキャラクタ液晶表示 で紹介した74HC595を使うことで入出力を拡張することができます。TinyGoだけではなくピン数が少ないマイコンを使用するときには役に立つと思います。
今は、仕事が忙しく、時間が取れないのでちょっとしたものしか紹介できないですが、紹介する内容がみなさんの作品作りの参考になればと思います。
1
投稿者の人気記事
-
keiske-hongyo
さんが
2022/02/12
に
編集
をしました。
(メッセージ: 初版)
-
keiske-hongyo
さんが
2022/02/12
に
編集
をしました。
ログインしてコメントを投稿する