打印

关于PIC16F877A驱动8*8点阵的问题

[复制链接]
3066|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fengyao|  楼主 | 2013-3-28 22:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 fengyao 于 2013-3-29 13:22 编辑

        使用过8*8点阵的朋友都知道,点阵的引脚排布是不规律的,对于洞洞板上的布线来说是个大问题。最近在制作点阵模块时,由于IO口不紧张,我采用了直接驱动的方法(共阴式点阵,PORTB,PORTD驱动点阵),考虑到引脚排布问题我将PORTB与1-8引脚相连,PORTD与9-16引脚相连,使用一个函数,将一组原本不相邻的IO口进行赋值,如:
void Line(unsigned char i)
{
         RB0=(i&0x80)>>7;
         RB5=(i&0x40)>>6;
         .......(不一一列举,引脚顺序和源程序不一致,只是为了说明意思,此子函数对共阴极进行赋值,相当于原来的PORTB=0xxx,只是将原本共阴极引脚按顺序排放,想要达到和对PORTB直接赋值相同的效果)
}
         但程序运行结果和预想有偏差,首先,灯的亮度不一致,每一列亮度都不同,有的亮,有的暗,而且最后的图案完全乱掉。请求大神看看错误出在哪里??(配置位我已经设置过了,关闭了在线调试,低电压编程。换用PORTA口,使用数字模式(配置ADCON1)也不行)
沙发
fengyao|  楼主 | 2013-3-28 22:56 | 只看该作者
    再添加一个问题,最近想做一个秒表,想要精确一点,使用timer1的外接时钟晶振(32.768KHz),可是不知道怎么接……求高手指点。。

使用特权

评论回复
板凳
ocon| | 2013-3-29 00:30 | 只看该作者
1、驱动能力不够,加大限流电阻后能显示,但亮度太低。
2、没用过双时钟,你查一下数据手册,印象中不需要外部振荡电路。

使用特权

评论回复
地板
fengyao|  楼主 | 2013-3-29 09:02 | 只看该作者
ocon 发表于 2013-3-29 00:30
1、驱动能力不够,加大限流电阻后能显示,但亮度太低。
2、没用过双时钟,你查一下数据手册,印象中不需要 ...

  我没有加限流电阻……考虑到877本身IO口输出20mA,经过实际测试发现可以,为了简化电路就没有加。但是使用PB,PC口依次连接共阴,共阳1,2,3……脚,赋值采用PORTB=0xxx,PORTD=0xxx后就可以,只是使用上面的函数后出现问题,而且我发现即使在上面说的连接方式下,只是把原来的PORTB=……换为函数赋值(函数中IO口顺序调整一致),就出现上述的问题……不知道是怎么回事。是不是要在每个引脚前加一个三极管驱动?

使用特权

评论回复
5
yewuyi| | 2013-3-29 09:41 | 只看该作者
1、可能因为没有限流电阻而造成IO口出现了读-修改-写现象
2、端口一个位一个位的赋值本身也有一定的时间延迟
3、IO没有限流而造成IO口输出负载过重导致异常。
4、合理的限流是必须的,使用老型号的PIC芯片,尽量增加一个IO口输出缓冲变量,修改某个位状态时直接修改这个变量的对应位,然后在函数最后将这个变量整体赋值给IO端口寄存器,在新型号的PIC上增加了LATX寄存器,就不需要这样了,可以直接修改LATX对应的位即可。

使用特权

评论回复
6
ocon| | 2013-3-29 11:59 | 只看该作者
本帖最后由 ocon 于 2013-3-29 17:39 编辑

如果每位LED是20毫安,一行全亮就是160毫安,超过了手册中单个引脚25毫安的电流上限,所以要加三极管或驱动芯片等扩流元件。

可以通过IO上的限流电阻来保证VDD引脚上的总电流不超过250毫安、VSS引脚上的总电流不超过300毫安,以符合手册规定的上限。

手册中规定,进行IO某引脚位操作时,同一个口其他输出引脚上状态也会被读进来再写回去,正常情况下这不会造成问题,因为原来输出的是什么状态写回去还会是什么状态,但是,当你超限使用IO时,比如你让25毫安的IO去驱动160毫安的负载,本来输出的高电平可能会被外部电路LED等强行拉到低电平附近,改写单个IO时,同一个口其他输出引脚上读进来的实际值可能跟原来的不同,自动写回去以后状态就可能会改变,这种超限使用导致的异常叫做“读-修改-写”错误。

如果你必须超限使用单片机,或者想让单片机在偶尔出现超限时IO状态尽可能不乱,那么可以使用端口整体赋值,这时写入此端口所有IO引脚的值完全来自指令,与IO引脚原来的实际电压大小无关。

使用特权

评论回复
7
fengyao|  楼主 | 2013-3-29 13:13 | 只看该作者
  我好像明白了,受教了!我只是初学者,果然还是欠缺很多知识啊,数据手册一定要好好看!

使用特权

评论回复
8
hzpxxxyyy| | 2013-4-4 09:27 | 只看该作者
原来如此,学习了。

使用特权

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

本版积分规则

4

主题

15

帖子

0

粉丝