搜索
bottom↓
回复: 21

我用pcf8563时钟芯片,芯片设置时间,读取时间正常,能读能写,但芯片时钟为何不走啊,愁死了

[复制链接]

出0入0汤圆

发表于 2005-12-23 09:35:19 | 显示全部楼层 |阅读模式
请各位高人帮帮我呀,我初始化时设置8563的0x00地址为00,设置0x01地址为00,0x02为00,0x03为0x45,0x04为0x12,即时间为12:45:00,时间也设进去了,读出的也对,可时钟就是不走。愁啊!

阿莫论坛20周年了!感谢大家的支持与爱护!!

阿莫论坛才是最爱国的,关心国家的经济、社会的发展、担心国家被别国牵连卷入战争、知道珍惜来之不易的和平发展,知道师夷之长,关注世界的先进文化与技术,也探讨中国文化的博大精深,也懂得警惕民粹主义的祸国殃民等等等等,无不是爱国忧民的表现。(坛友:tianxian)

出0入0汤圆

发表于 2005-12-23 10:42:38 | 显示全部楼层
把程序上传一下,这样大家方便帮助你分析!另外问一下芯片多少MONEY ?

出0入0汤圆

发表于 2005-12-23 11:00:02 | 显示全部楼层
有一个寄存器的启动时间运行位置位没有?

出0入0汤圆

发表于 2009-3-31 22:37:01 | 显示全部楼层
哪位用过的能解一下吗?我也是一样的情况,头大!!

出0入90汤圆

发表于 2009-3-31 23:47:31 | 显示全部楼层
这个芯片我用过,有个寄存器是用来让芯片开始运行的,初始化最后需要设置一下!!!!!!至于是什么,很久没用,忘记了!

出0入0汤圆

发表于 2009-4-1 00:26:18 | 显示全部楼层
CS1里面总共只有三个位有效,试着看datasheet里面关于CS1的介绍

一般来说pcf8563不用特别设置,初始状态就是OK的,如果你将它修改了,可能会出现意想不到的事情

TEST1:bit7    STOP:bit5   TESTC:bit3

如果还有问题,将CS1,CS2的值放上来,大家一起看一下

出0入0汤圆

发表于 2009-4-1 08:07:35 | 显示全部楼层
void write_add(unsigned char address,unsigned char date)   
{                                          
         bit ack;
        I2C_start(); //开始信号
        ack=I2C_write(0xa2);       //写要寻的设备地址   既8563的地址  //找芯片所在地址
       // if(ack==0) DisplayOneChar(0,14,'e'); // //调用应答信号
        I2C_write(address);  //写控制寄存器00H  //找芯片内部存储器地址
        delay_us(20);
        I2C_write(date);  //写入的内容为 //        写入数据,写进芯片内部存储器
        I2C_stop();       //停止信号 //调用终止信号子程序,终止信号写入
                                
}      
void write_8563(unsigned char w_miao,unsigned char w_fen,unsigned char w_shi,unsigned char w_day,unsigned char w_week,unsigned char w_month,unsigned char w_year)
{  
    //I2C_init();//init();
   I2C_start();      //开始信号//调用起始信号子程序
   write_add(0x00,0x00); //写控制字
    delay_us(2000);
   write_add(0x01,0x00); //写中断控制字
   write_add(0x02, w_miao); //写秒的初始值
   delay_us(2000);
   write_add(0x03,w_fen);
   delay_us(200);
   write_add(0x4,w_shi);
   delay_us(2000);
   write_add(0x05,w_day);
   delay_us(2000);
   write_add(0x06,w_week);
   delay_us(2000);
   write_add(0x7,w_month);
   delay_us(2000);
   write_add(0x8,w_year);
   delay_us(2000);
   
}  


在main()中是这样调用这个函数来初始化的:


write_8563(0x51,0x59,0x23,0x11,0x01,0x09,0x2008);//初始化秒 分 时,日,星期,月,年


能读出来秒位是0X51,但是一直不变,分和年也一样,写入什么,读出的也是什么,大家看是什么回事?共用的I2C的读写24C16G正常.

出0入0汤圆

发表于 2009-4-1 09:03:38 | 显示全部楼层
还要加上启动时钟命令
   setpcf8563(0x0d,0x83);                /*启动clkout 1HZ*/
   setpcf8563(0x00,0x08);                /*启动时间*/  
   setpcf8563(0x01,0x01);                /*使能倒计时中断*/
   setpcf8563(0x0e,0x82);                /*启动到计时中断*/
   setpcf8563(0x0f,0x01);                /*倒计时时间为1S*/
这是我用过的,你根据自己的需要修改!!

出0入0汤圆

发表于 2009-4-1 09:14:59 | 显示全部楼层
会不会是你读写到了24c16啊或者晶体没有起震。我调试时也是确保TWI先能读写24Cxx。
提供一个我以前写的PCF8563程序,是AT ARM的,不过读写逻辑应该一样,你参考一下。
PCF8563 FOR AT-ARMourdev_431080.zip(文件大小:2K) (原文件名:PCF8563.zip)

出0入0汤圆

发表于 2009-4-1 13:11:35 | 显示全部楼层
外接的32.727K 晶体,是一般手表是常用的,如果外昌体不起振PCF8563还能写入数据吗?

出0入0汤圆

发表于 2009-4-2 20:53:24 | 显示全部楼层
应是32.768K晶体,因外形和一办电子表上的差不多,也没有型号,大猜是吧。如果8563的外接晶体不起振I2C能正常传数据吗?我用的是M8 的PC口模拟I2C时序。还有哪位DX用过8563的经验和注意事项贴出来大家共享一下,多谢了!

出0入0汤圆

发表于 2009-4-2 21:20:58 | 显示全部楼层
不起振不影响IIC的访问和操作。

最重要的就是要那个启动位设置一下。如果不行,检查一下晶体,是不是6pF和12pF的弄混了。

出0入0汤圆

发表于 2009-4-2 21:22:12 | 显示全部楼层
void rtc_start(void)  //启动实时时钟
{
  rtc_write(0,0);
}

void rtc_exiting(void)  //关闭实时时钟
{
  rtc_write(0,0x20);
}

unsigned char PCF8563_INIT(void)
{
        unsigned char retry=0;
  rtc_start();  //启动实时时钟
  SetPCF8563(8,0x09);     //设置年
  SetPCF8563(7,0x03);     //设置月
  SetPCF8563(5,0x29);     //设置日
  SetPCF8563(4,0x23);     //设置时
  SetPCF8563(3,0x40);     //设置分
  SetPCF8563(2,0x00);     //设置秒
  SetPCF8563(6,0x00);     //设置星期
  while(rtc_read(8) != 0x08)  //通过检测年寄存器来判断是否初始化成功
                {
                        rtc_start();  //启动实时时钟
                  SetPCF8563(8,0x09);     //设置年
                  SetPCF8563(7,0x03);     //设置月
                  SetPCF8563(5,0x29);     //设置日
                  SetPCF8563(4,0x23);     //设置时
                  SetPCF8563(3,0x40);     //设置分
                  SetPCF8563(2,0x00);     //设置秒
                    SetPCF8563(6,0x00);     //设置星期
                  if(retry++ >10 )return 1;  //不能修改时钟寄存器 初始化失败
                }
        return 0;
}

出0入0汤圆

发表于 2009-4-2 22:24:37 | 显示全部楼层
while(rtc_read(8) != 0x08)  //通过检测年寄存器来判断是否初始化成功

这句应为 while(rtc_read(8) != 0x09)吧,因为上面写入的是  SetPCF8563(8,0x09);     //设置年

出0入0汤圆

发表于 2009-4-2 22:43:05 | 显示全部楼层
完全按12楼的初始化,一样是不变,但数据读出来的和写入的是一样的,就是不走。试验如下:
unsigned char PCF8563_INIT(void)
{
  unsigned char retry=0;
  write_add(0x00,0x00);  //启动实时时钟
  write_add(0x08,0x08);     //设置年
  write_add(0x07,0x03);     //设置月
  write_add(0x05,0x29);     //设置日
  write_add(0x04,0x23);     //设置时
  write_add(0x03,0x40);     //设置分
  write_add(0x02,0x00);     //设置秒
  write_add(0x06,0x00);     //设置星期
  while(read_add(0x08)!= 0x08)  //通过检测年寄存器来判断是否初始化成功
                {
                   write_add(0x00,0x00);   //启动实时时钟
                   write_add(0x08,0x09);     //设置年
                   write_add(0x07,0x03);     //设置月
                   write_add(0x05,0x29);     //设置日
                   write_add(0x04,0x23);     //设置时
                   write_add(0x03,0x40);     //设置分
                   write_add(0x02,0x00);     //设置秒
                   write_add(0x06,0x00);     //设置星期
                  if(retry++ >10 )return 1;  //不能修改时钟寄存器 初始化失败
                }
        return 0;
}
main()
{
unsigned char  rtc=0;
  rtc=PCF8563_INIT();
while(rtc)  DisplayOneChar(15,1,'e');//如果没有正常初始化,死循环,显示"E"字符

}  结果却不有显示'e",也就是说正常初始化了8563,还是不走

出0入0汤圆

发表于 2009-4-3 13:41:07 | 显示全部楼层
忘了修改程序。。。。。。。

前面部分应该跟后面的一样时间   改了忘记了。不过也不影响初始化。

不知道8563是否需要RTC时钟做内部通信模块时钟?  因为I2C有可能不依赖这个32.765K

所以能配置,但是可能因为你的RTC晶振部分不启动,也是不走的。

更换晶振和辅助电容看看那里问题了。  电容用10pf看看   由示波器的话直接接上去就能看见是不是起震了

软件方面我不是懂很多,我做硬件的,你可以把电路发上来大家看看,这么简单的东西

应该很容易解决的,因为上周无聊做了一个时钟模块  这东西不需要什么特别条件  只要接对了就能工作的

出0入0汤圆

发表于 2009-4-3 18:18:39 | 显示全部楼层
我还没有示波器,只有一只数字表,看来只有更换晶振和电容试试  下面是原理图。

(原文件名:8563.JPG)

出0入0汤圆

发表于 2009-4-3 18:36:36 | 显示全部楼层
15楼,你测的8563  1,2脚电压值在正常晶振起振的情况下是多少啊?晶振两端和C2,C3的电压是多少?多谢了

出0入0汤圆

发表于 2009-4-3 22:35:02 | 显示全部楼层
看看晶振的旁边接地的电容,偶有块FPGA的板子上刚开始也是这样,后来发现电容有问题,换了就好了(仅供参考)

出0入0汤圆

发表于 2009-8-6 17:22:33 | 显示全部楼层
我碰到新问题,呵呵。
读取回来的数据全是0!但设置数据成功。
另外以前用过这个芯片,一直很正常。用AVR没问题。现在我改用C8051F,设置成1秒时钟输出正常,这说明IIC通讯地址、数据写入正常。但读取的时候一直是0(所有数据)。
     一直没有找到原因,然后将示波器用上,时序基本相同,就不明白为什么在AVR上用可以,在C8051F上竟然读取回来是0?都采用的是硬件IIC的方法。
    我再继续找吧。应该不会是同挂在总线上的一片512影响吧?是铁电的512.

出0入0汤圆

发表于 2009-12-7 09:19:29 | 显示全部楼层
我用nios也出现了这个问题,是不是太快了。

出0入0汤圆

发表于 2011-11-27 10:05:38 | 显示全部楼层
求救,我的PCF8563时钟,会走,可是调整完的时间就是写不进去...
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-9-13 15:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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