标题:
DS1302与AVR小系统(Atmega16)一起使用时遇到的问题
[打印本页]
作者:
51黑黑黑
时间:
2016-3-4 14:14
标题:
DS1302与AVR小系统(Atmega16)一起使用时遇到的问题
本次需要实现的是一个基于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口,不影响下载。
发图一张做纪念。也希望这篇文章能帮助有需要的人。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1