完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
` 电位器的信号输出接到单片机(ARDUINO UNO)的模拟口上,然后程序里读取这个模拟口的值。用串口监视器看,读取的值都是对的,0~1023. envelopeRate = analogRead(A0); Serial.println("envelopeRate"); Serial.println(envelopeRate); envelopeRate = map(envelopeRate, 0, 1023, 0, 255); //作用是将模拟量从[0,1023]映射到[0,255]区间。 或者不用map() envelopeRate = envelopeRate/4; 得到的值都是正常的。然后把值写到寄存器操作函数 WriteReg(0x0C, envelopeRate); 但是,只要电位器旋钮拧过12点方向,寄存器的操作函数就不正常了。 我以为是电位器的问题,试了多个电位器都是这个问题。 那么你可能会想,是不是envelopeRate的值超出范围了? OK,我改一下代码: if(envelopeRate >14) envelopeRate=14; 在调用WriteReg()前,我把值限制到14. 理论上这个值最大可以255. 也就是说,随便我怎么拧电位器,即便超过12点的角度,向右拧到头envelopeRate的值也是14. 运行代码测试, 拧大电位器,寄存器操作的参数可以看出是0~14产生对应的变化,旋钮值超过14的时候寄存器的值还是14. 接着拧电位器的角度到12点位置,从这个角度开始,寄存器的操作函数就懵逼了,没反应。只要电位器旋转超过12点位置就这样。 太诡异了。 也不知道有没有人遇到过类似的情况。怎么解决啊~ 好心塞。`
|
|
相关推荐
14个回答
|
|
|
有这时间发帖,量输出电压啊
|
|
|
|
|
|
|
|
|
通过叙述来看应该是电路问题,那么问题来了,如果是电路问题,就需要你上电路图了,另外1楼说的对,这种问题第一个要做的就是测输出电压啊。。。。
评分
|
||
|
|
||
|
可能是电位器有一个悬空点,就是旋转到头的时候触头就悬空了,要旋过一定距离才会接触到电位器的另一头,这段时间悬空所以导致异常,加下拉电阻就是把悬空状态拉到地了。
评分
|
||
|
|
||
|
猜的,具体的还是要按照楼上说的实测一下。
|
|
|
|
|
|
其实电压输出是正常的。 就是电阻拧到足够大的阻值的时候(电压小到一定程度),单片机上的输入端就当做悬空了。加个下拉电阻,输入端就是个准确的0了。 我猜是这样。 评分
|
||
|
|
||
stormer 发表于 2017-10-18 19:24 正常情况下,AD采样的时候是不会出现空的,哪怕是悬空,理论上都不会出现没有值的情况,但是一般不会有悬空出现。你说的小到一定程度被认为是空更不会出现,被认为是0是有可能的。 评分
|
||
|
|
||
|
AD采集外部不加附加电路就是会有问题的。
|
|
|
|
|
|
对ARDUINO UNO R3 来说,下拉电阻很重要!!!!!
|
|
|
|
|
|
|
|
|
|
|
|
听了你的描述及解决方法,我觉得和写寄存器没有关系啊,那开始的0~1023的值你是如何准确测量的
|
|
|
|
|
|
是不是电位器有一部分没有炭膜?建议先用万用表测一下电位器电阻变化情况
|
|
|
|
|
|
学习了
|
|
|
|
|
|
不错,很好的经验分享,辛苦麻烦了,欠缺这方面的资料,非常感谢。
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
435 浏览 0 评论
464 浏览 0 评论
450 浏览 0 评论
806 浏览 0 评论
RT-Thread与英飞凌(infineon)合作得板子PSOC 6 板子学习
748 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
17016 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-12 10:30 , Processed in 1.368261 second(s), Total 108, Slave 90 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
9390