shenhaiyu 发表于 2013-10-16 01:23:36

关于内部上拉电阻的疑问

本帖最后由 shenhaiyu 于 2013-10-16 01:26 编辑

之前看过坛子里有关芯片内部上垃电阻的教程:
http://www.geek-workshop.com/thread-2874-1-1.html

但是今天实验的时候,发现并不适用于UNO的模拟口。


如果把上面帖子中的开关从 Pin-2 改接到 Pin-A2,代码改写为如下:

/*
作者:极客工坊
时间:2012年12月18日
IDE版本号:1.0.1
发布地址:www.geek-workshop.com
作用:使用单片机内部上拉实现按键功能
*/
void setup ()
{
pinMode(A2,INPUT_PULLUP);               //将2号管脚设置为输入并且内部上拉模式
pinMode(12,OUTPUT);
}

void loop()
{
int n =digitalRead(A2);                   //创建一个变量n,将4号数字口的状态采集出来赋值给他。
if (n==LOW)                           //判断n是否为低电平,如果是执行下面的语句,不是则跳过。
{

    delay(1000);
    digitalWrite(12,HIGH);
    delay(5000);
    digitalWrite(12,LOW);

}
}



这样一点问题没有,可是如果把上面代码中的

int n =digitalRead(A2);


改为:

int n =analogRead(A2);
Serial.println(n);



那么会发现串口中输出的n值始终在1017左右变化,根本无法达到LOW的电压要求,有高手知道这是怎么回事吗?
如何才能实现模拟口的内部上拉呢

飞翔的红猪 发表于 2013-10-16 09:35:22

开了上拉后,相当于把A2通过内部电阻连接到VCC了,当然读到的就是1024(或者1000左右的随机值)了

yyy_zc 发表于 2013-10-16 12:55:32

这是按钮没按下的值,说明 上拉起效果了

yyy_zc 发表于 2013-10-16 12:56:57

代码改为:

int n =analogRead(A2);
Serial.println(n);
if(n<50)

shenhaiyu 发表于 2013-10-17 15:51:09

飞翔的红猪 发表于 2013-10-16 09:35 static/image/common/back.gif
开了上拉后,相当于把A2通过内部电阻连接到VCC了,当然读到的就是1024(或者1000左右的随机值)了

这么说的话就失去上拉的作用了,直接是5V高电位,还怎么通讯呢

shenhaiyu 发表于 2013-10-17 15:52:00

yyy_zc 发表于 2013-10-16 12:56 static/image/common/back.gif
代码改为:

int n =analogRead(A2);


什么意思?要延迟一下?还是要串口监视?

yyy_zc 发表于 2013-10-17 22:21:55

shenhaiyu 发表于 2013-10-17 15:52 static/image/common/back.gif
什么意思?要延迟一下?还是要串口监视?

关键是模拟量了,需要 if(n<50) 而不是 if (n == low(0))

646097010 发表于 2013-11-21 21:33:39

把A2当数字端口用,弄个上拉是没有问题的;但是把它当模拟端口用就不要弄上拉了,上拉会影响模拟量。尤其是进行AD转换的时候,千万不要在模拟量的端口加上拉!

shenhaiyu 发表于 2013-11-23 20:53:36

646097010 发表于 2013-11-21 21:33 static/image/common/back.gif
把A2当数字端口用,弄个上拉是没有问题的;但是把它当模拟端口用就不要弄上拉了,上拉会影响模拟量。尤其是 ...

上拉是为了防止干扰,实际上就是把模拟口当数字口用,可是达不到效果啊

yyy_zc 发表于 2013-11-23 21:52:08


代码改为:

int n =analogRead(A2);
Serial.println(n);
if(n<50)

数字和模拟的转换而以

shenhaiyu 发表于 2013-11-24 12:55:00

yyy_zc 发表于 2013-11-23 21:52 static/image/common/back.gif
代码改为:

int n =analogRead(A2);


呃,好吧,只是还没有从根本上解决我的问题哦~
页: [1]
查看完整版本: 关于内部上拉电阻的疑问