这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 非软件错,也非硬件错,是软件硬件一块错

共21条 1/3 1 2 3 跳转至

非软件错,也非硬件错,是软件硬件一块错

菜鸟
2013-09-23 13:28:41     打赏

今天遇到一个小bug,如题目所说,是软件和硬件凑到一块出的错。
   如下图,是硬件。

这是用一个晶体管控制继电器的输出,pkn接单片机的输出,R14是上拉电阻。这个图的出处,是以前的设计,我直接抄过来用了。一向也还好用。
   但是必须指出,前一段用万用表量过单片机的pkn引脚,在输出为高时,只有0.7V的电压,理论上应为单片机的供电电压5V。这大概是被晶体管拉低了。单片机是Microchip的dsPic,单腿的输出可到8mA,看样子单片机勉为其难了。长期这样会不会损坏单片机?

   出问题的是下面一段程序,要根据pkn的状态进入一段程序:
       if(PORTBbits.PKN == 1)
       {  …… }
   结果有一万次路过这个块,该进而没有进去。这是为什么?
   检查了半天,逻辑没有错。

   不废话了。想到了前面说的,在程序让pkn输出为高的时候,它被三极管拉低到0.7V,这时三极管是开通的,但是单片机管脚的状态却是“0”。所以上面的判断语句,从程序本身没有错,因为已在稍早时对PORTBbits.PKN赋1了,但是这个脚的实际状态却是“0”。

    这个程序,把PORTBbits.PKN,改为LATBbits.PKN,就是正确的。因为此时读、写的是输出锁存的状态,即使管脚的实际状态为零,锁存也告诉我们,他内心的态度是1。
    程序虽然对了,硬件还是不好,因为管脚还是要被拉低为零。而且R14的上拉是没有用处的。应把上拉的R14改为串在单片机管脚与三极管基极之间。

 




关键词: 软件     也非     硬件     一块    

院士
2013-09-23 15:20:05     打赏
2楼
看了标题,我以前为是绕口令!~~~

菜鸟
2013-09-23 16:49:14     打赏
3楼
学习了

工程师
2013-09-23 21:46:10     打赏
4楼
我还以为你想说 Negatives make a positive

院士
2013-09-23 22:20:37     打赏
5楼
楼上的英语好棒啊——话说楼上您说得介是嘛啊~~

高工
2013-09-23 22:43:16     打赏
6楼

此乃真上拉电阻也。小提一句,这个上拉确实是拉错了。而如果把它该到单片机和三极管基极之间,应该称为限流电阻,明确了名称也就记得了功能,下次就不容易出现这样的错误了。


突然想到,在这个电路中其实这个三极管本应该是个mos吧?这样就对了吧。


高工
2013-09-23 22:47:00     打赏
7楼
有点意思,学习研究一下。

高工
2013-09-23 23:12:30     打赏
8楼
都是很好的经验

高工
2013-09-24 06:03:20     打赏
9楼

如果是没有内部上拉电阻的口,这样一改,那就真的错了。


菜鸟
2013-09-24 07:59:28     打赏
10楼
这怎么讲?

共21条 1/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]