去年夏天在家养病的时候,闲着无聊,把过去的爱好(其实是工作)捡了起来,迫不及待地上网买了一个51的开发板(890RMB,代价不菲),功能挺全,使用挺方便,样子挺好看,可就是没用过几次...等手头的两个小玩意儿做好了,也就到了该去正经上班的时候了,于是这个开发板就闲置了下来。后来又迷上了AVR,它被再次启用的可能性就更小了,直到最近做那个温控器的时候又想起了它,因为我绝对不是个焊机派,也懒得设计电路板,一般就是用万能板做永久的电路板,电路试验和最终产品是同一个东西,如果刚开始设计思路就是对的,那很好,很节约时间,如果一开始就是错的话,估计我是不会在重新拆下来焊接过了,那么这个东西基本上算是终结了。
如此看来,有一个开发板还是个不错的选择,但是重新买个开放板显然不太合算,因为我也不知道玩这个能玩多久。记忆中应该有个51转AVR的转换板,可以把AVR引脚转换成51的引脚排列方式,如果把它放到51开发板上用,岂不省了很多钱么?于是上网一搜,还真不少,最后选择了一家带可调基准电压的转换板。其实这个板子用到开发板上还是有问题的,因为51是高电平复位,AVR正相反,所谓可以同时用在51和AVR上的说法的前提是板上带51/AVR切换功能,显然我手头的开发板是没有这个开关的,不过这个东西也不贵,买回来再慢慢研究。 东西到手后,大致的分析了引脚转换的情况,发现端口转换还是挺人性的,PA~PD对应了P0~P3,这样连线的时候不至于考虑个半天端口顺序的问题,ISP端口也是一一对应的,似乎可以直接使用开发板上的ISP接口和烧录软件,不过最后试验证明,还是因为复位电平的不同,无法使用原有的ISP接口(至少我没有实现),在几乎放弃的时候,AVR的一个特性救了我,就是AVR的RESET脚可以直接接高电平,复位的稳定时间由熔丝决定,延时最多65MS,所以只要在RESET脚接一个合适电阻,保证ISP的可靠性,以及不和原有的复位电路冲突就可以了,我的做法是在在转换板上焊一个22欧的电阻,而ISP单独引出来,程序的下载由USBASP来完成。编写了一个小小程序(入门的LED闪烁程序)测试了一下,ISP下载正常,程序运行正常,端口顺序正确,51开发板正式救活! 51开发板模块还是很丰富的,其中很重要的一个就是LCD1602液晶显示模块,不过这个模块的连线是固定的,不能更改,要改只能改程序,正好手头有一个LCD1602 4位数据线的驱动程序(已经在一个MINI开发板上测试过了,可以运行的),按板上的接线示意图修改好程序,原来的程序使用了一个PA口,高4位做数据线,低2位做RS和EN,RW直接接地,现在改成4位数据线还是用PA口,RS使用PC0,EN使用PC2,RW使用PC1,由于不能将开发板的RW脚接地,所以改为由程序拉低到低电平。整个测试过程看是简单,只不过是改几个端口号而已,其实花了差不多一个晚上,直到今天的凌晨1点才发现了问题所在。期间改过程序写法,用MINI开发板验证等等手段,程序就是无法运行,后来实在没辙,随手改了一下EN的端口,由PC2改成PC1,这才运行正常,而且改其他端口都可以,就是不能用PC2,于是自然想到是否是PC2有什么特别之处,查了资料得知,PC2是JTAG的测试时钟接口,在JTAG使能的情况下是不能用作IO口,于是在熔丝位里把JTAG使能改成了禁止,程序运行成功!接下来就是移植到51开发板上测试,测试也是成功,只是程序只有在ISP下载后才能运行,上电的时候不能运行,很显然是复位不好,再在熔丝位里将复位等待时间改成65ms,成功! 至此,已经能51开发板开发AVR单片机了,拿下转换板,照样可以开发51芯片,随便还学习了一把熔丝位的某些用法(比如这个JTAG使能位),昨天测试转换板的时候由于失误手头两片M16被锁死,后来是借用了51开发板上的晶振解了锁,这样又学会了解锁AVR芯片,总之收获很大!
|