複数スイッチを利用する際のピン数節約 その2

先日「複数のスイッチを利用する際のピン数節約」の記事を紹介したが、別の方法も見つけたのでそれを紹介。

その1とその2は以下の通り。

分圧方式その1f:id:MarkovChainMonteCarlo:20200914192000j:plain

分圧方式その2f:id:MarkovChainMonteCarlo:20200920124131j:plain

方式 メリット デメリット
その1 プルアップ、プルダウンどちらでも使用可能
出力インピーダンスが一定(Rd)なので、ノイズに強い
後付けが容易
分圧比を計算しないといけない
計算で求めた抵抗値はほぼ売っていない
その2 用いる抵抗値は1種類でいいため、作成が容易(R/2は並列にすればOK)
計算の必要がない
プルアップでは使えない
分圧の抵抗列(図だと縦に並んだ抵抗)に影響を与えない範囲でRdを決定するため、非常にノイズに弱い
未検証ですが、Arduinoで使えないのではないか
方式2がプルアップで使用できない理由

ここで方式2がプルアップで使用できない理由ですが、PIC(16f18857)においてADCは以下の通りとなっています。 f:id:MarkovChainMonteCarlo:20200920131523j:plain

プルアップにすると、出力インピーダンスが100k以上と非常に大きいため、サンプルホールドキャパシタ(C_HOLD)を十分充電できず、何も押していない時でも電源電圧に達することができません。
よって、GNDに落としてあげる必要があります。(V_refはGNDの前提)

Arduinoで使えない?

一方ArduinoのチップであるATmega328のADCは以下の通りであり、サンプルホールドキャパシタ(C_S/H)の下側電圧はVcc/2となっており、GNDではありません。 f:id:MarkovChainMonteCarlo:20200920131831j:plain そのため、100kのプルダウン抵抗ではGNDに落としきれない可能性があります。
なお、当方はArduinoを持っていないため未検証です。あしからず。