====== DI 機能 ====== MA-E3xx シリーズでは CPLD により実装していた、チャタリング除去フィルター、カウンター の機能をマイコンで実装しています。\\ 機能は I2C 経由(Bus No.1, I2C-Address 0x4f)で利用します。 \\ ===== アドレスマップ ===== DI 機能は I2C の下記アドレスにマップされています。 ^ Name ^ Address ^ Bit ^ Reset Value ^ Description ^ |Filtered DI(R/O)| 0x06 |[7:5] Reserved| | | |:::|:::|[4] OPT-Switch| |OPT-Switch| |:::|:::|[3:0] DI3..0| |DI Status((DI を 64Hz 2bit shift register でフィルタ処理(チャタリング除去)した状態を取得できます))| |DI Polarity(R/W)| 0x0b |[7:5] Reserved| xxx| | |:::|:::|[4] OPT-Switch| x|OPT-Switch((USBのコンソール横の Option Switch))| |:::|:::|[3:0] DI3..0 Polarity| 0000|0: Rising / 1: Falling| |Counter Control (R/W)| 0x10 |[7:5] Reserved| xxx| | |:::|:::|[4] Counter4 Start (OPT-Switch)| 0|1: Enable| |:::|:::|[3] Counter3 Start| 0|:::| |:::|:::|[2] Counter2 Start| 0|:::| |:::|:::|[1] Counter1 Start| 0|:::| |:::|:::|[0] Counter0 Start| 0|:::| |Counter Match Enable (R/W)| 0x11 |[7:5] Reserved| xxx| | |:::|:::|[4] Counter4 Match Event Enable| 0|1: Enable| |:::|:::|[3] Counter3 Match Event Enable| 0|:::| |:::|:::|[2] Counter2 Match Event Enable| 0|:::| |:::|:::|[1] Counter1 Match Event Enable| 0|:::| |:::|:::|[0] Counter0 Match Event Enable| 0|:::| |Counter Match Status (R/W1c)| 0x12 |[7:5] Reserved| xxx| | |:::|:::|[4] Counter4 Match| 0|1: Match / Write 1 to clear| |:::|:::|[3] Counter3 Match| 0|:::| |:::|:::|[2] Counter2 Match| 0|:::| |:::|:::|[1] Counter1 Match| 0|:::| |:::|:::|[0] Counter0 Match| 0|:::| |Counter Compare0 (R/W)| 0x13 |[7:0]| 00000000| | |Counter Compare1 (R/W)| 0x14 |[7:0]| 00000000| | |Counter Compare2 (R/W)| 0x15 |[7:0]| 00000000| | |Counter Compare3 (R/W)| 0x16 |[7:0]| 00000000| | |Counter Compare4 (R/W)| 0x17 |[7:0]| 00000000| | |Counter Value0 (R/W)| 0x18 |[7:0]| 00000000| | |Counter Value1 (R/W)| 0x19 |[7:0]| 00000000| | |Counter Value2 (R/W)| 0x1a |[7:0]| 00000000| | |Counter Value3 (R/W)| 0x1b |[7:0]| 00000000| | |Counter Value4 (R/W)| 0x1c |[7:0]| 00000000| | \\ ===== サンプルプログラム ===== ^ File ^ Stat ^ SHA1SUM ^ Info | |{{ :mas1xx_tips:use_msp430_via_i2c:msp430_di:libdi.tar.gz |}}|2021/11/15 13:31 3.1 KB|c23c8d6bffaac9249ea8d2f0be51c049a307c46a|DI サンプル| \\ import std/options import std/strformat import lib/msp430 proc main() = # ライブラリ初期化 let di = newMsp430(1, 0x4f) # Read DI Status let di_stat_opt = di.get_di_status() if di_stat_opt.isSome: echo &"* DI Value: {di_stat_opt.get()}" # Read DI Polarity let di_pol_opt = di.get_di_polarity() if di_pol_opt.isSome: echo &"* DI Polarity: {di_pol_opt.get()}" for idx in countUp(0, 4): # Read DI Counter Enable let enable_opt = di.get_counter_onoff(idx) if not enable_opt.isSome: continue let enable = enable_opt.get() if enable: echo &"* DI[{idx}] Counter is enable." else: # Enable DI Counter let res = di.onoff_counter(idx, true) echo &"* DI[{idx}] Counter: set enable -> result: {res}" # Read DI Counter Value let val_opt = di.get_counter_val(idx) if val_opt.isSome: let val = val_opt.get() echo &"* DI[{idx}] Counter Value: 0x{val:02x}" when isMainModule: main() \\ ==== Usage ==== root@gemini:~# /tmp/di_sample * DI Value: @[0, 0, 0, 0, 0] * DI Polarity: @[Rising, Rising, Rising, Rising, Rising] * DI[0] Counter: set enable -> result: true * DI[0] Counter Value: 0x00 * DI[1] Counter: set enable -> result: true * DI[1] Counter Value: 0x00 * DI[2] Counter: set enable -> result: true * DI[2] Counter Value: 0x00 * DI[3] Counter: set enable -> result: true * DI[3] Counter Value: 0x00 * DI[4] Counter: set enable -> result: true * DI[4] Counter Value: 0x00 root@gemini:~# /tmp/di_sample * DI Value: @[0, 0, 0, 0, 0] * DI Polarity: @[Rising, Rising, Rising, Rising, Rising] * DI[0] Counter is enable. * DI[0] Counter Value: 0x00 * DI[1] Counter is enable. * DI[1] Counter Value: 0x00 * DI[2] Counter is enable. * DI[2] Counter Value: 0x00 * DI[3] Counter is enable. * DI[3] Counter Value: 0x00 * DI[4] Counter is enable. * DI[4] Counter Value: 0x04 <----- OPT-Switch をポチポチ押した