搜索
bottom↓
回复: 7

求助:PCF8563无法读出数据

[复制链接]

出0入0汤圆

发表于 2019-3-8 15:08:11 | 显示全部楼层 |阅读模式
本帖最后由 墨逸、 于 2019-3-8 15:09 编辑

如题,读出的数据一直是 2045-25-45  45:45:45
板子上的参数和原理图完全一致

  1. #include "mcu.h"

  2. u8        Time_data[7]={0X00,0X44,0X13,0X08,0X05,0X03,0X19};//初始化数组

  3. //===================================================
  4. void iic_delay(unsigned int t)
  5. {
  6.    unsigned int a;

  7.    for(a=1;a<=t;a++);       
  8.              
  9. }       
  10.                   
  11. //===================================================
  12. void iic_clock(void)
  13. {
  14.    iic_scl=0;
  15.    iic_delay(3);                 
  16.    iic_scl=1;
  17.    iic_delay(3);
  18.    iic_scl=0;
  19.    iic_delay(3);
  20. }

  21. //===================================================
  22. // void waitask()
  23. // {
  24. //    iic_sda=1;
  25. //    iic_scl=1;
  26. //    iic_delay(3);
  27. //    wait:
  28. //    if(iic_sda==1)goto wait;
  29. //    iic_scl=0;
  30. // }

  31. //===================================================
  32. // void noask()
  33. // {
  34. //    iic_sda=1;                //无应答产生
  35. //    iic_clock();
  36. // }

  37. //===================================================
  38. //启动器件子程序
  39. //*******************************************/
  40. void start_iic()
  41. {     
  42.     iic_sda=1;
  43.         iic_scl=1;
  44.         iic_sda=0;
  45.     iic_delay(3);
  46.         iic_scl=0;
  47.         iic_delay(3);
  48.   }
  49. ///*******************************************
  50. //停止器件子程序
  51. //*******************************************/
  52. void stop_iic()
  53. {  
  54.     iic_scl=0;
  55.     iic_sda=0;       
  56.         iic_scl=1;
  57.         iic_delay(3);
  58.         iic_sda=1;           
  59. }
  60. ///*******************************************
  61. //主机发送一个字节数据
  62. //*******************************************/
  63. void iic_SendByte(unsigned char bytedata)
  64. {  
  65.    unsigned char i;
  66.       
  67.    for(i=0;i<8;i++)
  68.    {                     
  69.                 if(bytedata & 0x80)  iic_sda=1;
  70.                 else                 iic_sda=0;
  71.                 iic_clock();
  72.                 bytedata<<=1;
  73.          }   
  74. }
  75. ///**************************************************
  76. //主机接收一个字节数据子程序
  77. //***************************************************/
  78. unsigned char iic_ReceiveByte(void)
  79. {
  80.    char i,bytedata=0;

  81.    iic_sda=1;
  82.    for(i=0;i<8;i++)
  83.       {                    
  84.                 bytedata<<=1;
  85.                 if(iic_sda) bytedata |= 0x01;
  86.                 iic_clock();                           
  87.                 }                        
  88.    return bytedata;
  89. }

  90. //================================================================
  91. void Wrbyte(unsigned char dat)//写一个字节
  92. {
  93.   iic_SendByte(dat);
  94.   iic_sda=1;   //写完一个字节后释放总线
  95.   iic_scl=1;   //加上脉冲, 相当于应答信号
  96.   iic_scl=0;
  97. }
  98. //================================================================
  99. unsigned char Rebyte(void)           //读一个字节
  100. {
  101.    unsigned char a;

  102.    a=iic_ReceiveByte();
  103.    iic_sda=1;           //写完一个字节后释放总线
  104.    iic_scl=0;           //加上脉冲, 相当于应答信号
  105.    return(a);
  106. }


  107. //==========读取时间==========
  108. void Read_8563(uchar * Time_tmp)
  109. {
  110.         uchar i;

  111.         for(i=0;i<7;i++)
  112.         {
  113.                 start_iic();
  114.                 Wrbyte(Wr_8563);   //写操作器件地址  
  115.                 Wrbyte(i+0x02);    //写入单元地址  
  116.                 start_iic();
  117.                 Wrbyte(Re_8563);   //读操作器件地址  
  118.                 switch(i)
  119.                 {
  120.                  case 0: Time_tmp[0]=(Rebyte())&0x7f;break;//获取秒数据
  121.                  case 1: Time_tmp[1]=(Rebyte())&0x7f;break;//获取分钟
  122.                  case 2: Time_tmp[2]=(Rebyte())&0x3f;break;//获取小时
  123.                  case 3: Time_tmp[3]=(Rebyte())&0x3f;break;//获取日
  124.                  case 4: Time_tmp[4]=(Rebyte())&0x07;if(Time_tmp[4]==0)Time_tmp[4]=7;break;//获取星期
  125.                  case 5: Time_tmp[5]=(Rebyte())&0x1f;break;//获取月
  126.                  case 6: Time_tmp[6]=(Rebyte())&0x7f;break;//获取年                          
  127.                  default:break;       
  128.                 }
  129.                 stop_iic();
  130.         }
  131.         for(i=0;i<7;i++)
  132.                 Time_tmp[i]=Time_tmp[i]/16*10+Time_tmp[i]%16;//BCD码转换成16进制
  133. }

  134. //==================================================================
  135. void set_8563(uchar * Time_tmp)
  136. {
  137.         unsigned char i;
  138.         for(i=0;i<7;i++)
  139.         {
  140.                 Time_tmp[i]=Time_tmp[i]/10*16+Time_tmp[i]%10;
  141.                 start_iic();
  142.                 Wrbyte(Wr_8563);//选择器件
  143.                 Wrbyte(0x02+i);//选择单元地址
  144.                 Wrbyte(Time_tmp[i]);//写入数据
  145.                 stop_iic();
  146.         }
  147. }


复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2019-3-8 15:12:04 | 显示全部楼层
C6有换用过12P,没反应;
晶振有更换过,没反应;
芯片有换过,没反应;
上拉电阻换过1K/10K,没反应;
测量PCF8563的PIN1,电压0.6V,应该是已经起振
代码是原来测试OK的,现在拿过来,结果无法应用,怀疑是硬件问题,但是硬件电路(原理图)原来也是测试OK的。
求助诸位前辈,会是什么问题呢?

出200入657汤圆

发表于 2019-3-8 15:18:31 | 显示全部楼层
假的吧。 那个max更高端一款rtc芯片就有国产假冒的,能用但是经常有问题的那种气死你
————————————————————————————————————————————
在中国入职工程师的第一步:知道哪些芯片有国产的,这种芯片要非常小心
比如在下刚入行的时候就被国产的线性电源芯片和dc-dc电源坑死了

出0入0汤圆

发表于 2019-3-8 15:21:47 | 显示全部楼层
代码没有读
建议你连接IIC到逻辑分析仪上,首先看IIC通信是否正确(比如主机的时序对不对,起始停止位对不对,速率合不合适),同时可以看到是否从机回ACK之类的,可以间接判断出iic器件是不是工作了。
时序全队以后,如果还是读的不对,就看看是不是器件有些特殊指令之类的了
你上这么长代码,没有谁会一字一句去读的,很难直接解决你的问题

出0入0汤圆

 楼主| 发表于 2019-3-8 15:26:23 | 显示全部楼层
ziruo2002ab 发表于 2019-3-8 15:18
假的吧。 那个max更高端一款rtc芯片就有国产假冒的,能用但是经常有问题的那种气死你
—————————— ...

换用的芯片是不同厂家的,总不至于都是坏的吧,应该可以排除此问题的吧?

出200入657汤圆

发表于 2019-3-8 15:29:39 | 显示全部楼层
墨逸、 发表于 2019-3-8 15:26
换用的芯片是不同厂家的,总不至于都是坏的吧,应该可以排除此问题的吧? ...

你要确认芯片来源没问题就当我没说 。调试期间嘛,千万不要省着么点钱。

出0入0汤圆

 楼主| 发表于 2019-3-8 16:00:40 | 显示全部楼层
ziruo2002ab 发表于 2019-3-8 15:29
你要确认芯片来源没问题就当我没说 。调试期间嘛,千万不要省着么点钱。 ...

现在怀疑芯片问题了

刚刚又换了一块芯片,结果其读出的数据疑似是随机的

2008-10-00  14:48:51
2002-11-31  30:60:60
2050-00-08  11:40:04
2052-11-20  20:08:50
2054-08-00  04:02:13
2070-00-08  10:50:40
2052-00-02  13:52:71
2060-08-10  00:54:48
2004-02-12  31:70:60
2050-10-14  08:53:40
2013-12-30  20:60:08
2040-14-14  00:04:02
2071-10-20  08:50:54

出0入0汤圆

发表于 2019-3-8 16:27:01 | 显示全部楼层
墨逸、 发表于 2019-3-8 16:00
现在怀疑芯片问题了

刚刚又换了一块芯片,结果其读出的数据疑似是随机的

我觉得你还是该查下iic的时序
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-23 14:13

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

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