ユーザ用ツール

サイト用ツール


mas1xx_tips:use_msp430_via_i2c:msp430_di:start

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

次のリビジョン
前のリビジョン
mas1xx_tips:use_msp430_via_i2c:msp430_di:start [2021/11/15 13:15] – 作成 adminmas1xx_tips:use_msp430_via_i2c:msp430_di:start [2025/02/28 15:31] (現在) admin
行 2: 行 2:
  
 MA-E3xx シリーズでは CPLD により実装していた、チャタリング除去フィルター、カウンター の機能をマイコンで実装しています。\\ MA-E3xx シリーズでは CPLD により実装していた、チャタリング除去フィルター、カウンター の機能をマイコンで実装しています。\\
-機能は I2C 経由で利用します。+機能は I2C 経由(Bus No.1, I2C-Address 0x4f)で利用します。
  
 \\ \\
行 13: 行 13:
 |Filtered DI(R/O)|  0x06  |[7:5] Reserved| | | |Filtered DI(R/O)|  0x06  |[7:5] Reserved| | |
 |:::|:::|[4] OPT-Switch| |OPT-Switch| |:::|:::|[4] OPT-Switch| |OPT-Switch|
-|:::|:::|[3:0] DI3..0| |DI Status|+|:::|:::|[3:0] DI3..0| |DI Status((DI を 64Hz 2bit shift register でフィルタ処理(チャタリング除去)した状態を取得できます))| 
 +|Raw DI(R/O)|  0x07  |[7:5] Reserved| | | 
 +|:::|:::|[4] OPT-Switch| |OPT-Switch| 
 +|:::|:::|[3:0] DI3..0| |DI Status(チャタリング除去フィルタなし)| 
 +|DI Event Enable(R/W)|  0x0a  |[7:5] Reserved|  xxx| | 
 +|:::|:::|[4] OPT-Switch|  x|OPT-Switch((USBのコンソール横の Option Switch))| 
 +|:::|:::|[3:0] DI3..0 Enable|  0000|1: Enable|
 |DI Polarity(R/W)|  0x0b  |[7:5] Reserved|  xxx| | |DI Polarity(R/W)|  0x0b  |[7:5] Reserved|  xxx| |
-|:::|:::|[4] OPT-Switch|  x|OPT-Switch|+|:::|:::|[4] OPT-Switch|  x|OPT-Switch((USBのコンソール横の Option Switch))|
 |:::|:::|[3:0] DI3..0 Polarity|  0000|0: Rising / 1: Falling| |:::|:::|[3:0] DI3..0 Polarity|  0000|0: Rising / 1: Falling|
 |Counter Control (R/W)|  0x10  |[7:5] Reserved|  xxx| | |Counter Control (R/W)|  0x10  |[7:5] Reserved|  xxx| |
行 48: 行 54:
 \\ \\
  
 +===== サンプルプログラム =====
 +
 +^  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 サンプル|
 +
 +\\
 +
 +<codify nim>
 +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()
 +</codify>
 +
 +\\
 +
 +==== Usage ====
 +
 +<code>
 +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 をポチポチ押した
 +</code>
  
  
  
  
mas1xx_tips/use_msp430_via_i2c/msp430_di/start.1636949724.txt.gz · 最終更新: 2021/11/15 13:15 by admin