有没有可能通过一个ADC口读取8位拨码开关,省IO

2019-12-27 18:55发布

感觉为了这个拨码开关占用了8个IO有点不值得。

思路是这样的:
下拉电阻是4.7K,而上拉电阻依次是1k,2.2k,4.7k,10k,20k,47k,100k,220k,通过拨码开关控制上拉电阻并联。
这样因为任意多个电阻并联都不会与其他电阻阻值相同(因为至少差距1倍了),

这样程序采样一次ADC,然后算出上拉电阻的总阻值。
因为8位拨码开关有256种组合,然后依次算出每种组合的并联电阻值,一共运算256次,就可以知道有哪几位开关闭合了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
33条回答
lihui_mc
1楼-- · 2019-12-28 14:05
huangguimina4 发表于 2017-6-10 17:20
查表不就快了??

是的,你说的很对
kebaojun305
2楼-- · 2019-12-28 17:16
本帖最后由 kebaojun305 于 2017-6-10 17:25 编辑
lihui_mc 发表于 2017-6-10 17:20
是的,其实考虑过T型电阻网络DAC的,不过那个需要单刀双掷开关


你就找找  R-2R  电阻网络就行了, 确实 是需要单刀双掷开关。还是用IO口吧。 找个 几毛的单片机 搞定。
jiaren
3楼-- · 2019-12-28 19:18
不需要运算,只需要读取AD查表就行啦。
将每种情况的AD值放到一个表里,由小到大,或由大到小。工作时查表比较就是了。
初始确定AD值,可以通过计算,也可以通过调试时察看AD值。
jiaren
4楼-- · 2019-12-28 20:58
 精彩回答 2  元偷偷看……
lihui_mc
5楼-- · 2019-12-28 21:14
jiaren 发表于 2017-6-10 17:26
汽车方向盘的按键就是这种AD形式的,只是方向盘按键没有同时按下的处理,一次只能按一个。 ...

是的,你的算法是很快的,如果10位AD就占1kB而已,确实高效。
takashiki
6楼-- · 2019-12-28 21:42
不要打我,我觉得是不可以的,完全无法实现。用个74HC165吧或者分两组占用2个IO,方便好多。
就算你用1‰误差的电阻,256个开关量,这个误差范围你可以想想。尤其你的电阻还不是比例的。普通的5%、1%误差的,你根本就区分不出来。

一周热门 更多>