打印

小白发问:为何输出电压不够

[复制链接]
2787|29
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huandaczq|  楼主 | 2017-11-21 15:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
做了一个最简单的测试:使用芯片:pic16f72
背景:7805供电vdd,输出电压trisc=0x00, portc=0xff,trisa=0x00;porta=0;rc0接发光二极管正极,经过350欧电阻负极接ra。
结果:二极管不发光
检测:测得vdd的工电压4.97v,rc7个端口都是1.4v左右的电压,ra都0.6左右的电压。说明rc口输入的驱动(二极管)电压太小了,看芯片手册有20~25ma的灌电流,应该不会这么少。
总结:自己摸了2天了,是在想不出什么办法。各种办法都试试了,也去百度了,实在想不出什么其他原因,所以特地来问问大神们!

相关帖子

沙发
jianghong2017| | 2017-11-21 15:37 | 只看该作者
图呢?没图说个**!

使用特权

评论回复
板凳
jianghong2017| | 2017-11-21 15:38 | 只看该作者
J B

使用特权

评论回复
地板
huandaczq|  楼主 | 2017-11-21 16:00 | 只看该作者
jianghong2017 发表于 2017-11-21 15:37
图呢?没图说个**!

就是芯片直接接5v电压。rc5----350电阻----发光二极管----ra5。测rc5电压只有1.5v,不是5v左右!

使用特权

评论回复
5
chunyang| | 2017-11-21 18:24 | 只看该作者
huandaczq 发表于 2017-11-21 16:00
就是芯片直接接5v电压。rc5----350电阻----发光二极管----ra5。测rc5电压只有1.5v,不是5v左右! ...

IO输出电压会受负载影响,负载越大则电压越低,仔细看器件手册。

使用特权

评论回复
6
dandantcb| | 2017-11-21 18:49 | 只看该作者
io没配置对或该io输出能力不够

使用特权

评论回复
7
天生创想OA软件| | 2017-11-22 09:28 | 只看该作者
我也不是很懂

使用特权

评论回复
8
huandaczq|  楼主 | 2017-11-22 14:55 | 只看该作者
chunyang 发表于 2017-11-21 18:24
IO输出电压会受负载影响,负载越大则电压越低,仔细看器件手册。

谢谢,芯片手册看了n词英文版本的。复杂的都还没看,就是做简单的电量led灯,原理都懂了,我发现io口的输出不受我控制,我即使设置trisc=0,portc=0x0f(0000,1111)结果发现两个问题。【1】用电压表测量,所有rc口的电压都是一样的?【2】芯片的vss口一旦接到7895的地线,io口全部为0v

使用特权

评论回复
9
huandaczq|  楼主 | 2017-11-22 14:58 | 只看该作者
dandantcb 发表于 2017-11-21 18:49
io没配置对或该io输出能力不够

单单的/mclr接高电平(试过低电平结果一样)vdd接7805度5v。trisc=0,portc=0x0f,但是c口全部电压一致在1.5v左右,和设置的一般低一半高不一样!为什么?

使用特权

评论回复
10
chunyang| | 2017-11-22 18:31 | 只看该作者
huandaczq 发表于 2017-11-22 14:55
谢谢,芯片手册看了n词英文版本的。复杂的都还没看,就是做简单的电量led灯,原理都懂了,我发现io口的输 ...

如果空载IO电压也不够,说明你的编程有问题,输出的是方波了(空载时,如果IO状态不变,要么电压接近电源电压,要么接近于0,处于中间态一定是在输出脉冲)。至于你后一个问题,给出图来并清晰、完整的描述问题。

使用特权

评论回复
11
huandaczq|  楼主 | 2017-11-23 09:43 | 只看该作者
chunyang 发表于 2017-11-22 18:31
如果空载IO电压也不够,说明你的编程有问题,输出的是方波了(空载时,如果IO状态不变,要么电压接近电源 ...

谢谢你的回答!
【大前提】:我还接阻容上电复位,直接接了高电平因为还没算好时间,所以只是为了让电路先运行起来,具体的后面在接。也没有外部晶振,芯片手册上,如果我没理解错误的话,是有自己内部rc osc的(英文版本)
【1】那个不同电压我想明白了,是因为后面负载不同,所以输出不同!
【2】电源电压4.97V左右,比较稳定,这点没问题了,现在芯片直接全部io口空载,直接2条线。第一条是电源的4.97V,第二点是防止复位的(~mclr),接高电平。
【3】编程是设置了A口5个为输出,C口8个为输出。输出为一半高一半低。然后直接去测管教电压,全部a口c口全部在4.35V左右。上电复位tris会变为1,能测到4V以上电压说明io口被成功设置为输出了,但是为什么输出高低电平这条指令被忽略掉了(0x0f)
【4】如你所说,电源电压4.97V,为何输出是方波:4.34V(等效)
编程就是最简单的:
void main{TRISA=0;PORTA=0x07;TRISC=0;PORTC=0x0f;}
总结:从输入变为输出,程序肯定是执行了输出这条程序,但是为什么一半高一半低这条没有被执行?

使用特权

评论回复
12
天生创想OA软件| | 2017-11-23 20:38 | 只看该作者
什么情况?

使用特权

评论回复
13
chunyang| | 2017-11-23 22:52 | 只看该作者
huandaczq 发表于 2017-11-23 09:43
谢谢你的回答!
【大前提】:我还接阻容上电复位,直接接了高电平因为还没算好时间,所以只是为了让电路 ...

先确认MCU正常运行了再说,估计你的MCU根本就没运行。使用片内本振需要正确配置,复位电路也必须具备。另外,程序也不是你写的那么简单就行,写端口后要有个循坏,自己好好想想为什么要这么做。

使用特权

评论回复
14
QuakeGod| | 2017-11-23 23:10 | 只看该作者
另外,灌电流也不是你这么用的啊。
往芯片里的电流才叫灌电流。你这么接需要的是拉电流。

使用特权

评论回复
15
caijie001| | 2017-11-24 07:18 | 只看该作者
chunyang 发表于 2017-11-21 18:24
IO输出电压会受负载影响,负载越大则电压越低,仔细看器件手册。

原来芯片io还有这种说法的啊,请问对应普通单片机的io,多大才算是大负载呢

使用特权

评论回复
16
caijie001| | 2017-11-24 07:20 | 只看该作者
huandaczq 发表于 2017-11-22 14:55
谢谢,芯片手册看了n词英文版本的。复杂的都还没看,就是做简单的电量led灯,原理都懂了,我发现io口的输 ...

对应这种情况你可以用示波器测一下,如果是方波,万用表测得电压不够是正常的,说不定是毕竟LED闪太快,你看不见

使用特权

评论回复
17
caijie001| | 2017-11-24 07:24 | 只看该作者
chunyang 发表于 2017-11-23 22:52
先确认MCU正常运行了再说,估计你的MCU根本就没运行。使用片内本振需要正确配置,复位电路也必须具备。另 ...

据我所知,keil等开发平台会自动帮你循环的,假如像他那样的没有while循环的程序,会自动执行完再循环

使用特权

评论回复
18
huandaczq|  楼主 | 2017-11-24 09:33 | 只看该作者

就是所有管脚都带电

使用特权

评论回复
19
huandaczq|  楼主 | 2017-11-24 09:38 | 只看该作者
chunyang 发表于 2017-11-23 22:52
先确认MCU正常运行了再说,估计你的MCU根本就没运行。使用片内本振需要正确配置,复位电路也必须具备。另 ...

就是感觉就是mcu没正常运行。因为所有管脚都带电压。【1】config寄存器各种配置都试过了也不行。【2】程序简单复杂应该问题不大,因为目的只是为了检测io口正否正常输出高低电平。【3】至于你说的循环,while(1);肯定写了。如果程序编译错误的话,编译hex文件的时候就会出提示错误的。

使用特权

评论回复
20
huandaczq|  楼主 | 2017-11-24 09:50 | 只看该作者
QuakeGod 发表于 2017-11-23 23:10
另外,灌电流也不是你这么用的啊。
往芯片里的电流才叫灌电流。你这么接需要的是拉电流。
...

感谢你的纠正!开始为也觉得是灌电流是往芯片里的方向叫灌电流,后来某一集郭天祥视频里貌似说反了,结果我也被带歪了。(当然也可能是我自己理解错误)
不过无论怎么说,这只是一个叫法,我的目的是控制输出(和我编程的一致),但是所有的管脚包括(vss)都是高电平,也接了晶振了。我百度了一下,有一个网友也出现过这样的问题,回答者的答案是,pic上电复位,导致所有(除了/mclr)其他都带高电平,这现象和我基本一样。但是芯片手册是,上电复位tris寄存器是变1(输入)有矛盾了。
【1】如果是和那个网友一样的问题,那么就是我的晶振没有让芯片驱动,通常2次震荡周期,芯片一个机器指令,没有接收到2个震荡的“驱动”所有,芯片无法执行“trisc=0 或者portc=0x0f的指令,一直停留在复位的全部高电平阶段,那么这样的现象就可以解释了
【2】如果是芯片手册上说的那样,上电复位tris寄存器变1,那么就有新的问题了,【2.1】portc口全部变输出被执行了,但是porta等其他口也跟着变输出口,是没有道理的【2.2】既然trisc=0;被执行了,那么portc=0x0f没有被执行,那么也相互矛盾了。
总结:如果按照我上面【1】【2】的分析,客观上觉得【1】比较符合实际情况;主观上觉得【2】,感觉芯片手册一半不会错,但是【2】引发的【2.1】【2.2】的问题,完全毫无任何解答的推测!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

186

帖子

0

粉丝