了bug,我该怎么秀玩个游戏玩出优越感了

【ds1302】我与DS1302——个人关于DS1302使用的一点心得_牛宝宝文章网【ds1302】我与DS1302——个人关于DS1302使用的一点心得专题:准确地说,我是从2012年的秋天开始接触DS1302这个芯片的。时年大四,正在做电子专业的专业实习。我们的题目是“智能家居”,其中用到了DS1302这个芯片。当时做下来只是知道了这个东西是干什么用的,至于怎么用,可以说是完全没弄明白。但当时在网上找了相关的资料,也下载了一些前辈写的程序,当时扔到Proteus上去仿真,大概知道了改哪条语句可以实现什么功能什么的。时隔一年以后,已经是毕业的人了。刚刚到公司报道,工作还比较闲,晚上或周末就有时间学点电路什么的,就又把DS1302翻了出来。这期间买了IC和关键的32.768kHz的晶振。于是就把电路给搭了出来。这次算是一次入门,虽然没能完全搞透,但知道了以下几点:1.DS1302的驱动分为往里写和往外读;2.片内集成了一部分RAM,这部分内容是不受晶振影响的;个人观点,这部分应用很鸡肋。3.往里写数据和往外读数据的时候,IO口方向(input或output)是不同的:在写数据的时候是先发8位的地址位,再发8位的时间信息(或将要写入RAM的内容),此过程中,IO口方向一直是output。而读数据时,同样也是要先发8位的地址位,但之后要将IO口状态改为input,这时将开始允许从DS1302传来信息。这里我只是说允许信息过来,而不是说接收信息,因为信息是一位一位传过来的,要加以整理并储存下来才算是接受,这是软件对应上的事情,但不考虑这些的话,至少此时是有信息过来的,只是你如何读取并保存的问题。最近斥资2000元添购了我人生的第一台示波器。要说示波器大家都很熟悉,学电的没有没用过的。但有自己的示波器的人恐怕不多。为什么要强调一下是“我”的示波器呢,这里不免啰嗦几句,谈谈我对中国现行教育的一点看法。我的大学后半程算是在专业知识上下了些工夫的。这从我两届大学生电子设计竞赛和优秀毕业设计等荣誉上可以验证。当然,我现在仍要本着学习的态度在这个行业里发展自我,但我认为我在大学里接受到的专业技能方面的资源肯定是大于其他同学的,我经常出入实验室,示波器,函数发生器也总用,但都是在老师的指导下使用,老师说这个东西要测一下,就去测。至于如果想做一些自己想做的实验,总是觉得不是很方便。我的母校在我大二的时候,将模电实验室的示波器全部更新成数字示波器,这些示波器在高校中应该说算数一数二了,但很遗憾,在实验课之外,这些家伙鲜有人问津。近几年我的母校有了很多的课外实践活动,老师和同学们都开始热衷做项目。也有相当的一部分实验资源被共享出来。这是好事。但对于学生来说,不可一味地埋头在一个项目中,要挑起头做实验,广泛地涉猎,而老师要做的就是引导。闲话至此。买了示波器以后做的第一个实验是TDA2030功率放大器的性能测定。发现了不少问题,由于本篇主要讲DS1302,所以暂不总结关于TDA2030的东西。第二个实验就是观测DS1302的通讯波形。这次终于让我搞懂了它。以下为DS1302的学习心得:通过示波器观察通讯信号的波形是一种必要的手段,尤其是当电路不能正常工作的时候。不能正常工作首先可以去判断硬件方面是不是OK。一些论坛上有人认为晶振不起振是硬件的问题,个人认为并非是这样。举个例子:用DS1302与某单片机连接,为单片机烧写给DS1302写入时间信息的软件,正常动作以后,改烧写只能读数据的软件,(此过程中DS1302一直有电)发现也可正常读数,但给DS1302断电再上电,却发现不能正常读数。用万用表测晶振两端电压,应该是一端为高电平一端为低电平,证明晶振没有起振吗?是和晶振两端的电容有关吗?晶振这里没有起振是显然的,但却不一定是硬件的问题。上例中重新上电以后,单片机没有执行给DS1302写入命令的指令,也就造成DS1302上秒寄存器的最高位可能不是0,这一位决定了DS1302是计数还是暂停,为1的话,DS1302是不计数的。当然,是否确实如此还需验证。关于晶振还有就是其两端电容究竟用多大,有的资料写用6pF,有的说用30pF,还有说可以不用的。后两种我没试过,第一种是OK的。另两种会再以后确认一下是否可以。这里有一点,匹配的电容和走时的精准度是有关系的。这里不要妄信一些论坛上是一些人说什么晶振质量不好,什么芯片质量不好的混话。我测了一下晶振一端的波形,如下图图1 DS1302晶振一侧波形(1通道)没有示波器的话用万用表量也可以,电压值是多少并不是关键问题,主要是晶振两端对地的电压如果相等,那么基本可以断定晶振是正常工作的。这也说明,在软件方面,至少写秒寄存器这部分是OK的。可能还有人会纠结上拉电阻的问题。有的电路图上三条通信线RST(也称OE)、SDA和CLK都有上拉电阻(10k左右),有的就只是在SDA线上加了上拉电阻。这里建议大家去研究研究IO口的输入输出状态相关的知识(可以参照本博客中另一篇关于STC12C5410学习笔记的文章,本文不再赘述)。只说一句,现在除了89C51、89C52这种很入门级的单片机,基本都可以通过设定相应的寄存器去控制各个IO口的状态。由于RST和CLK这两条线对单片机来说都是输出线,这样一般都会将这两个IO口设定成内部上拉的模式,所以一般外部就不用再加电阻了。但SDA不同,以为读和写数据时,SDA的IO口方向一个是输入一个是输出,输出的话也是用内部上拉模式,但输入的话一般会选择高阻模式,此时没有内部上拉电阻,所以要外接一个上拉电阻来给DS1302这边提供高电平和电流。这个上拉电阻不要太小,我试过加120Ω的上拉电阻,在51单片机上运行,波形完全走样。但在arduino上运行似乎还好。原因有可能是两者IO口低输出时的对地等效电阻不同。很多资料上都是用的10kΩ的上拉电阻,我测试后也是好用的。本文中的测试波形都是在arduino平台上测试得到的,arduino有个好处就是有个很方便的串口查看器,在电脑上可以轻松读取串口上送多来的信息。但好像目前在工业上的应用很有限,尤其是国内,主要是一些年轻的电子爱好者或一些搞机械或者搞美术的创客们用的多一点。它就是可以设定IO口方向的。但文本给出的程序代码主要是基于51单片机的,而且是89C52这种不带IO方向设定功能的。原因就是我也很想搞清楚没有IO口方向控制时,单片机怎么区分输出和输入的操作。我会一边测试一边写这篇笔记。首先来看看正常工作的波形是什么样的:图2 读取一次完整时间信息的波形(SDA和CLK)图2所示是读取一次完整时间信息的SDA和CLK的波形。通道1表示SDA,通道2表示CLK,从左至右可以看出CLK明显被分成7份,这些依次代表对秒、分、时、日、月、星期、年这7个信息读取时的CLK,对应的通道1是SDA(数据)信息。注意,这里都是读操作。我将读取秒的那部分波形展开,如图3.图3 秒信息读取的时序图(待续)转载请保留本文连接:分享到:相关文章声明:《【ds1302】我与DS1302——个人关于DS1302使用的一点心得》由“张华强”分享发布,如因用户分享而无意侵犯到您的合法权益,请联系我们删除。TA的分享最近用单片机做一个用LCD显示的时钟,可我想做到断电后仍然计时,就是不知道如何入手|我爱单片机 - 数码之家
查看完整版本: [--
赞助商链接
请教一下各位高手高手高高手~~~~~~~~~~~~~~~~~~~~~~我的程序是(没有写年月日星期的):#include &reg52.h&#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;sbit rs=P3^5;sbit lcden=P3^4;sbit s1=P3^3;sbit s2=P3^1;sbit s3=P3^2;sbit rd=P3^7;uchar num,count,s1char shi,fen,uchar code table[]=&&
TUE&;uchar code table1[]=&&&& 00:00:00&;void delay(uint i){&uint j,k;&for(j=i;j&0;j--)&&for(k=110;k&0;k--);}void write_com(uchar com){&rs=0;&P0=&delay(5);&lcden=1;&delay(5);&lcden=0;}void write_data(uchar date){&rs=1;&P0=&delay(5);&lcden=1;&delay(5);&lcden=0;}void write_sfm(uchar add,uchar date){&uchar shi,&shi=date/10;&ge=date%10;&write_com(0x80+0x40+add);&write_data(0x30+shi);&write_data(0x30+ge);}void keyscan(){&rd=0;&if(s1==0)&{&&delay(10);&&if(s1==0);&&{&&&while(!s1);&&&s1num++;&&&if(s1num==1)&&&{&&&&TR0=0;&&&&write_com(0x80+0x40+11);&&&&write_com(0x0f);&&&}&&&if(s1num==2)&&&{&&&&write_com(0x80+0x40+8);&&&}&&&if(s1num==3)&&&{&&&&write_com(0x80+0x40+5);&&&}&&&if(s1num==4)&&&{&&&&s1num=0;&&&&write_com(0x0c);&&&&TR0=1;&&&}&&}&}&if(s1num!=0)&{&&if(s2==0)&&{&&&delay(5);&&&if(s2==0)&&&{&&&&while(!s2);&&&&if(s1num==1)&&&&{&&&&&miao++;&&&&&if(miao==60)&&&&&&miao=0;&&&&&write_com(0x80+0x40+10);&&&&&write_sfm(10,miao);&&&&&write_com(0x10);&&&&}&&&&if(s1num==2)&&&&{&&&&&fen++;&&&&&if(fen==60)&&&&&&fen=0;&&&&&write_com(0x80+0x40+7);&&&&&write_sfm(7,fen);&&&&&write_com(0x10);&&&&&}&&&&if(s1num==3)&&&&{&&&&&shi++;&&&&&if(shi==24)&&&&&&shi=0;&&&&&write_com(0x80+0x40+4);&&&&&write_sfm(4,shi);&&&&&write_com(0x10);&&&&&}&&&&}&&&}&&&if(s3==0)&&{&&&delay(5);&&&if(s3==0)&&&{&&&&while(!s3);&&&&if(s1num==1)&&&&{&&&&&miao--;&&&&&if(miao==-1)&&&&&&miao=59;&&&&&write_com(0x80+0x40+10);&&&&&write_sfm(10,miao);&&&&&write_com(0x10);&&&&&&&&}&&&&if(s1num==2)&&&&{&&&&&fen--;&&&&&if(fen==-1)&&&&&&&fen=59;&&&&&write_com(0x80+0x40+7);&&&&&write_sfm(7,fen);&&&&&write_com(0x10);&&&&&&&&&&&}&&&&if(s1num==3)&&&&{&&&&&shi--;&&&&&if(shi==-1)&&&&&&shi=23;&&&&&write_com(0x80+0x40+4);&&&&&write_sfm(4,shi);&&&&&write_com(0x10);&&&&&&}&&&&}&&&}&&}&}void init(){&dula=0;&wela=0;&lcden=0;&write_com(0x38);&write_com(0x0c);&write_com(0x06);&write_com(0x01);&write_com(0x80);&for(num=0;num&14;num++)&{&&write_data(table[num]);&&delay(5);&}&write_com(0x80+0x40);&for(num=0;num&12;num++)&{&&write_data(table1[num]);&&delay(5);&}&TMOD=0x01;&TH0=()/256;&TL0=()%256;&EA=1;&ET0=1;&TR0=1;}void main(){&init();&while(1)&{&&keyscan();&}}void time_sfm() interrupt 1{&TH0=()/256;&TL0=()%256;&count++;&if(count==20)&&{&&&count=0;&&&miao++;&&&if(miao==60)&&&{&&&&fen++;&&&&miao=0;&&&&if(fen==60)&&&&{&&&&&shi++;&&&&&fen=0;&&&&&if(shi==24)&&&&&{&&&&&&shi=0;&&&&&}&&&&&write_sfm(4,shi);&&&&}&&&&write_sfm(7,fen);&&&}&&&write_sfm(10,miao);&&}}
赞助商链接
如果能做到断电继续几时就好了
赞助商链接
断电要使用电池对单片机供电吧?
电池是必须的,程序跟硬件结构有关。
知道,不过应该怎样加电池呢?
应该加在什么地方能让单片机正常工作而LCD又部用显示呢?
加时钟IC吧&& DS1302最便宜了配个电池&&或者 简单点的 IO多的话 12C887内置了电池和晶振&&也不错&&而且网上的驱动也很多网上买吧&&一个几毛钱&&顺便买点18B20(这个贵哈)同时添加温度功能也不错
用12887就好了,自动带电池的,1302不推荐,用啥晶振时间都不准!
我突然间想到一个办法,想问一下各位高手,如果我断电的时候只在LCD上断电,单片机得VCC和GND上继续通电,那它会继续计时的吗??
说道用芯片,我很多都不会,说起来真是惭愧啊
LCD屏不用多少电的,单片机只要有工作电压,还是能走时的,如果断电后,不让LCD显示,可以 对电源做些改进
断电后记时,用1302芯片。
也可以用三极管控制液晶电源&&按键唤醒LCD就行了
8楼说的没错,1302真的很不准12楼说的没错,电池的话用锂电,升压用论坛上的MC34063恩,1602液晶的背光电流比较大,大概要20多MA,我粗量了一下,1302加单片机加液晶也就不带背光12.45MA,但带背光35.6MA还有个问题就是,重开液晶后记得初始化液晶呀
两种方案比较简单:1.用个18650之类的,停电也能走一个月,一个月内想必也来电了吧2.用时钟芯片就好
用DS1302 能涓流充电 用一个大电容 或者电源 就行 它的耗电很低而切DS1302 能记录年月日 时分秒 还有闰年调整功能 我也才学51 最近才开始做这个用1302就得改程序了 得大改才行 最好加上按键 可以调整时间的 要是按你这程序来看的话 就得用电池给51供电&&虽然51不太费电 但是也没1302省电啊 呵呵还有1602不也费电么 呵呵 有啥咱俩探讨探讨 我打算这周末开始焊这个板子 这几天先看书 学习学习 还有 推荐你 看看成熟的例子 取其优势吧 当然时钟芯片还有别的例如DS12887是并行的祝你成功
在LCD的电源线上加个轻触开关就可以了~~
当然会的。
断电后计时,用时钟芯片吧。
我查资料的时候,说用时钟芯片的最多。。。。。。。。不过我都去尝试一下
很好,谢谢~~~~~~
查看完整版本: [--
Powered by
Time 0.209890 second(s),query:5 Gzip enabled查看: 5209|回复: 9
请教DS1302只记忆不走时的问题
高级会员, 积分 1033, 距离下一级还需 3967 积分
主题帖子积分精华0
阅读权限30
仿做了一个16*64翻页点阵时钟,但奇怪的是:1302不加后备电池可以正常走时,但一加后备电池,断电后再接电,它可以记忆断电前的时间,断电后它时间不会走,当时怀疑是1302的问题,又去买了一个,但这次是记忆的时间是乱码,比如显示 12:85:57 ,分钟竟然超过了60
请问哪位朋友遇过这种问题,是不是又我的1302问题?哪们大哥可否告知一下
钻石会员, 积分 15947, 距离下一级还需 34053 积分
主题帖子积分精华0
阅读权限50
超过了60的话多为1302问题(由见国产的多)
淘宝JS主题帖子积分精华1
阅读权限200
现在的DS1302问题可真多
主题帖子积分精华2
阅读权限200
用DS12C887吧,俺是不想用DS1302了,宁愿用软件时钟
钻石会员, 积分 18235, 距离下一级还需 31765 积分
主题帖子积分精华2
阅读权限50
12C887是好用,但缺点:1、价格太高,2、体积较大,3、占用口线太多。正品的1302好像问题并不是太多。
高级会员, 积分 1033, 距离下一级还需 3967 积分
主题帖子积分精华0
阅读权限30
但怎样才能买到正品的DS1302呢?可以用眼观识别吗?是不是价钱越贵的就是好的啊?
主题帖子积分精华4
阅读权限200
12C887是好用,但缺点:1、价格太高,2、体积较大,3、占用口线太多。正品的1302好像问题并不是太多。
fxhfxh 发表于
的确如此。
不过,正品的1302,
好像不是“问题并不是太多”,
而是没有“问题”。
钻石会员, 积分 21697, 距离下一级还需 28303 积分
主题帖子积分精华0
阅读权限50
& & 我最近也遇见你这样的问题,不知道LZ后来是怎么解决的?
初级会员, 积分 156, 距离下一级还需 -146 积分
主题帖子积分精华0
阅读权限10
& & 晶振停摆了。
钻石会员, 积分 21326, 距离下一级还需 28674 积分
主题帖子积分精华0
阅读权限50
我的这次买沈老师得16x40的点阵电子种也出现了这个问题.最后感觉还是后背电池的问题.我用的后背电池是废旧mp3的电池.用在mp3上只能用一会.拆下放了好久.这次用在点阵钟上时应该没一点电了.刚装上的时候就是钟只显示妙点跳动.就是不走时.最后这个时间长了.可能是电池充进电了吧.我拆掉电池测电压在3.6伏左右就又装机上了.然后开机竟然走时乐。以后就一直正常...我觉得出现这个现象应该是后背电池的问题..使用的后背电池不应该大容量的.一般在60—100毫安左右.另外保证后背电池装机使用时电压充足..
Powered by

我要回帖

更多关于 玩个游戏玩出优越感了 的文章

 

随机推荐