找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2168|回复: 0
打印 上一主题 下一主题
收起左侧

DS1302与AVR小系统(Atmega16)一起使用时遇到的问题

[复制链接]
跳转到指定楼层
楼主
ID:105323 发表于 2016-3-4 14:14 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
  本次需要实现的是一个基于Atmega16的时钟系统。由于要求设计电路(竞赛用),所以选用了ATmega16小系统、DS1302时钟模块、1602液晶模块。这三者用排线(杜邦线)连接起来。后期可以把DS1302和1602焊接到万用板上。   程序调试过程中遇到了很多问题,最严重的是DS1302不工作。怎么个不工作法呢?向DS1302的31字节的RAM写一个字节的数据(比如0xA5),再读,发现与写的不一致(不是0x00就是0xFF)。程序如下:



   别说这种相对复杂的写了,即便我写一个控制寄存器,再读,内容都不一样(见下面两句代码,向C_WP写入0x80,读出的exist的值不是00就是FF)




   我操纵DS1302的代码,之前在另一块ATmega16学习版上已经调试通过,只不过那块板子上的DS1302是焊接到PCB板的,而不是用杜邦线连接的。所以一开始,我怀疑自己的DS1302坏了。于是我又购买了不同商家的DS1302若干,结果都不能工作。

   郁闷得很,上网搜索各种资料,都没发现明确的答复。有说DS1302晶振不启振的,有说要加电容或电阻的。还有个人提问,他的DS1302怎么在ATmega的某些引脚上不工作。这个提问给了我启发。我原来是把DS1302的三个口(CLK,DATA,RST)连接到了PB和PC口。现在,我把它们连到了PA0,PA1,PA2。再跑程序,发现DS1302正常工作了!!!

   接下来就是用1602液晶显示DS1302存储的当前时间。我的代码中,1602使用了PB、PA和PD口。我这样连接上1602,发现液晶没有显示。通过刚才的调试,我猜可能DS1302也用PA口,影响了液晶,所以我把液晶用PA口的引脚(VL,调节背光的)移到了PC口,但也不行。最后我把这个口远远地移到了小系统上我不用的SPI下载口的一个引脚,结果液晶正常显示了!!也就是说,DS1302用了PA口,1602液晶用了PB、PD口,以及SPI口的一个小引脚。

   这样看来,ATmega小系统的PA、PB、PC、PD口的带输出设备的能力不同?还会相互干扰?这是我第一次用单片机搭建电路,不知理解是否正确,但从表面现象来看就像是这样。这已经超出了我从书本上学来的知识的范畴,汗!

    还有个小插曲,我的AVR小系统有两个VCC和GND。但DS1302要用1个GND,1602液晶要用2个GND,这样加起来是3,超过了小系统引出的GND数目。之前我为了解决这个问题,又买了另一个商家的小系统,但不好用还生锈。这次也是灵光乍现,我看SPI口的电路图,里面有4个GND,真是太好了。于是我用了其中一个GND给DS1302模块。结果工作正常。虽然占用了SPI口,但我还可以用Jtag口,不影响下载。
  发图一张做纪念。也希望这篇文章能帮助有需要的人。





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表