单片机遇到干扰
本帖最后由 baofu 于 2021-3-14 21:13 编辑STC12C5410AD的单片机,晶振25MHz。实验带动一个七段LED数码管,显示从0到9
的数,数字更换间隔时间1秒,不断循环。
单片机板子和数码管都是自己用洞洞板焊成的,但两者不在一块板子上,用杜邦线连接两者,杜邦线虽然质量不高,但都经过检查是没有问题的。数码管每个LED都有1K的限流电阻。单片机与数码管使用同一个5V电源供电。
程序烧写后,能显示,但多数时间显示的数字缺少笔画。奇怪的是,当想用万用表测量时,仅仅将黑表笔搭接到板子电源负极,红表笔还在悬空状态,显示的数字就不缺少笔画了。
现在怀疑两点:
1.干扰,因为杜邦线长度有十几厘米,相互干扰显然存在,但不知道怎样避免。
2.IO口模式设置不对。但这难以解释表笔影响现象。
请教有经验的老师,先谢谢了! 线长了不行 电源换成充电宝试试?
我也不懂,怀疑电源不好。 干扰的可能性不大,电压低,接触电阻大倒有可能,
一般数码管等LED都用三极管来驱动,直接io驱动可靠性低 共同探讨
1k限流电阻好像有点大了,另外,如果必须用开关电源供电,就选质量稍好一些的。
假设LED数码压降是1.8V,每段电流5mA(如果是动态显示可设10mA或更高),(5-1.8)/5mA≈560Ω
但不建议用静态显示,因为IO端口负担过重(7x5=35mA) 1、单片机电源脚以最短路径并联一个 100n 左右电容退耦
2、注意是否接触不良
3、死太惨真烂,换 AVR:lol 不太可能是干扰的问题,最好配合图纸看,不然没法猜大概是什么原因。 杜邦线接触不良 首先,谢谢各位的热心指导。
问题已经解决,但又出现了新问题,并与原来相关;先说解决的。
最初出问题的程序片段:
{ unsigned chari=0;
while(1)
{
P1=Cu8DigTable;//显示数字
Delay(800000) ;//延时
i++; //转下一个数字
if(i>24)i=0; //循环
}
后来加入了P1=Cu8DigTable;
这个Cu8DigTable里面的字符是0x00,就是什么也不显示,效果是P1口每一位都是低电平,相当于统一拉低电平:
{ unsigned chari=0;
while(1)
{
P1=Cu8DigTable;//显示数字
Delay(800000) ;//延时
P1=Cu8DigTable; //P1口统一拉低电平
i++;
if(i>24)i=0;
}
这样显示正常了,问题好像解决了。
但为什么会这样?是单片机反应慢?跟不上信号的迅速变化?还是数码管电路有什么我还不了解的特性?请有经验的朋友指教。 烧录器显示的MCU频率是多少? 烧录时显示MCU频率是25.04MHz,和我用的晶振频率是一致的。 看看是否电源波纹或地布线导致的。 我看了一下你的程序,是P1口带一个8字LED,属于静态驱动,还是一秒一变化,就算线加到1米长,也不应该出现缺少笔划的现象。P1端口要设置为推挽模式。 本帖最后由 w6955 于 2021-3-16 19:18 编辑
洞洞板这种东西也能用到25M??PCB打板的都是大傻?把频率放到6M就得了。一个洞洞板可能真上不去那么高。另外一个重要问题,驱动数码管为什么要用高电平驱动??单片机只在低电平才有较强驱动能力。所以应该使用共阳极数码管低电平驱动。 从你的叙述看,首先输出0就都不亮了说明你用的是高电平驱动数码管发光的,1K限流电阻在5伏时不知道你的数码输出“8”这个时候是多大电流,估计IC里面电路应付这个电流够呛。建议换个共阳极数码管再实验看看,毕竟MCU这个东西拉电流才是正道。
页:
[1]
2