关于内部上拉电阻的疑问
本帖最后由 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的电压要求,有高手知道这是怎么回事吗?
如何才能实现模拟口的内部上拉呢 开了上拉后,相当于把A2通过内部电阻连接到VCC了,当然读到的就是1024(或者1000左右的随机值)了 这是按钮没按下的值,说明 上拉起效果了 代码改为:
int n =analogRead(A2);
Serial.println(n);
if(n<50) 飞翔的红猪 发表于 2013-10-16 09:35 static/image/common/back.gif
开了上拉后,相当于把A2通过内部电阻连接到VCC了,当然读到的就是1024(或者1000左右的随机值)了
这么说的话就失去上拉的作用了,直接是5V高电位,还怎么通讯呢 yyy_zc 发表于 2013-10-16 12:56 static/image/common/back.gif
代码改为:
int n =analogRead(A2);
什么意思?要延迟一下?还是要串口监视? shenhaiyu 发表于 2013-10-17 15:52 static/image/common/back.gif
什么意思?要延迟一下?还是要串口监视?
关键是模拟量了,需要 if(n<50) 而不是 if (n == low(0)) 把A2当数字端口用,弄个上拉是没有问题的;但是把它当模拟端口用就不要弄上拉了,上拉会影响模拟量。尤其是进行AD转换的时候,千万不要在模拟量的端口加上拉! 646097010 发表于 2013-11-21 21:33 static/image/common/back.gif
把A2当数字端口用,弄个上拉是没有问题的;但是把它当模拟端口用就不要弄上拉了,上拉会影响模拟量。尤其是 ...
上拉是为了防止干扰,实际上就是把模拟口当数字口用,可是达不到效果啊
代码改为:
int n =analogRead(A2);
Serial.println(n);
if(n<50)
数字和模拟的转换而以 yyy_zc 发表于 2013-11-23 21:52 static/image/common/back.gif
代码改为:
int n =analogRead(A2);
呃,好吧,只是还没有从根本上解决我的问题哦~
页:
[1]