金巴黎彩票开户:

 找回密码
 立即注册

只需一步,快速开始

微信扫一扫,快速登录

搜索
查看: 1668|回复: 9

金巴黎彩票开户: [C51] RX8025AC时钟芯片驱动有问题的新手可以看看

t6娱乐vip真人
1#
发表于 2020-1-4 20:54:21 | 只看该作者 |倒序浏览 |阅读模式

认识众多玩家高手/拆客/DIYer,查阅更多资源,一起学习技术知识

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

x
本帖最后由 慕名而来 于 2020-1-5 10:47 编辑

最近坛里有玩RX8025时钟芯片的,据说精度仅次于DS3231但是比DS1302好过几条街,关键是这货很便宜,于是跟风撸了些、编编程序来消闲解闷打发时间,查了一下网上的资料,发现这货真的不新鲜,看到最早介绍这个芯片的资料是2003年发表的,真的是挺古老的东西了,常见的有两种尾缀的芯片RX8025AC和RX8025T。
虽然它们都是IIC总线驱动,但是,两种芯片不只是尾缀字母不同、晶振温补与否,驱动也是不同的,RX8025T很容易驱动,只要有DS3231的驱动程序,调整一下写/读地址以及相关时间参数的寄存器地址就可以直接使用了,而RX8025AC则不同,用上述程序是驱动不起来的,下面是我经过实验得到的一点新手玩这东西的经验,如果你是新手并且你也入手了RX8025AC这种芯片而且始终没有正常的驱动运行起来,不妨看看本文,相信一定会解决问题的,如果是专业做产品的高手并且很忙就请去忙吧,如果您是高手并且有时间而且发现了我说的东西有问题也真心请求及时指正,以免误人子弟。
第一种情况:将芯片用手工烙铁焊在板子上(打板或转接板),通电写程序实验,无论怎么调试程序都如同泥牛入海无声无息。
检查方法如下:拆除所有连线,短接Pin6&pin7,连接V+,连接GND,此时用万用表测量pin3的对地电压,如果电压为电源电压的一半左右,证明芯片正常,否则就是芯片损坏了,芯片损坏的原因我只想到了焊接超温(是否芯片本身***不知道),很囧的说我坏了两片。我的这个实验只是测试芯片的32768Hz脉冲输出功能,它只与芯片的好坏有关与芯片的编程无关。
第二种情况:一切都正常,但显示内容混乱,显示的不是自己设定的数据。
这种情况下如果排除了接线错误等问题,请按照我推荐的读写顺序试试看,虽然这款芯片网络资源也有不少,但是说实话我几乎试过了大部分代码,叶落归根时发现其实好用的代码与RX8025T相差很少,程序越复杂越不好用,其实IIC总线驱动代码中基础部分并无不同,不同的IIC芯片驱动所不同的仅在于CLK的相位不同,而RX8025AC与RX8025T的CLK相位是相同的,不同的只有寄存器地址需要放在高4位上这个是必须的,而网上所说的寄存器地址的低4位在读的时候需要或1,对于这种说法不必太认真,真心的说经过实验或1与否并无任何影响,好用的读/写顺序见下图,图片是我根据自己的程序画的,其中S为IIC启动、A为ACK、N为NACK、P为IIC停止。


注:请不要用这个图与中文的PDF资料中的顺序对比,也不要问我诸如IIC再启动、从机不应答信号等等有无体现等问题,因为我真的没弄懂这些,也希望高手能指点一二。

打赏

参与人数 1M币 +30 收起 理由
阿睦 + 30

查看全部打赏

2#
发表于 2020-1-4 23:25:41 | 只看该作者
建议楼主把已有资料百度网盘共享下,也准备开始试一试这个。
3#
 楼主| 发表于 2020-1-5 10:49:51 | 只看该作者
lyy-cy 发表于 2020-1-4 23:25
建议楼主把已有资料百度网盘共享下,也准备开始试一试这个。

好的,等手里的测试全部完成了会整理发帖,届时可以开源代码交流经验。
4#
发表于 2020-1-5 19:37:56 | 只看该作者
楼主把已有资料百度网盘共享下,也准备开始试一试这个。
5#
发表于 2020-1-6 11:08:22 | 只看该作者
这芯片我用过,以下代码是成功应用的。STVD工程中的R8025AC驱动片断希望能帮到楼主。
  1. /********************************************************************/


  2. void SDA_OUT(void)   //配置SDA引脚为输出

  3. {

  4.         PB_DDR|=0x20;//PB5

  5.         PB_CR1|=0x20;//推挽输出

  6.         PB_CR2&=0xdf;        

  7. }

  8. void SDA_IN(void)   //配置SDA引脚为输入

  9. {

  10.         PB_DDR&=0xdf;//PB5

  11.         PB_CR1&=0xdf;//悬浮输入

  12.         PB_CR2&=0xdf;        

  13. }

  14. void SCL_OUT(void)  //配置SCL引脚为输出

  15. {

  16.         PB_DDR|=0x10;//PB4

  17.         PB_CR1|=0x10;//推挽输出

  18.         PB_CR2&=0xef;        

  19. }

  20. void SCL_IN(void)   //配置SCL引脚为输入

  21. {

  22.         PB_DDR&=0xef;//PB5

  23.         PB_CR1&=0xef;//悬浮输入

  24.         PB_CR2&=0xef;        

  25. }
  26. void IIC_Start(void)
  27. {
  28.         SDA_OUT();     
  29.         SCL=1;
  30.         SDA=1;
  31.         Delay_us(1);
  32.         SDA=0;
  33.         Delay_us(1);
  34.         SCL=0;       
  35.         Delay_us(1);
  36.        
  37.        
  38.        
  39. }          

  40. void IIC_Stop(void)
  41. {
  42.         u8 i;
  43.         SDA_OUT();//sda??ê?3?
  44.         SDA=0;
  45.         Delay_us(1);
  46.         SCL=1;
  47.         Delay_us(1);
  48.         SDA=1;
  49.         for(i=0;i<5;i++)
  50.         {
  51.                 Delay_us(1);
  52.         }                          
  53. }

  54. u8 IIC_Wait_Ack(void)
  55. {
  56.         u8 ucErrTime=0;
  57.         SDA_IN();      //SDAéè???aê?è?  
  58.         Delay_us(1);   
  59.         Delay_us(1);
  60.         while(READ_SDA)
  61.         {
  62.                 ucErrTime++;
  63.                 if(ucErrTime>250)
  64.                 {
  65.                         IIC_Stop();
  66.                         return 1;
  67.                 }
  68.                
  69.         }
  70.         SCL=0;//ê±?óê?3?0           
  71.         return 0;  
  72. }

  73. void IIC_Ack(void)
  74. {
  75.        
  76.         SDA_OUT();
  77.         SDA=0;;
  78.         Delay_us(1);
  79.         SCL=1;
  80.         Delay_us(1);
  81.         SCL=0;
  82.         Delay_us(1);
  83. }
  84.             
  85. void IIC_NAck(void)
  86. {
  87.         SDA_OUT();
  88.         SDA=1;;
  89.         Delay_us(1);
  90.         SCL=1;
  91.         Delay_us(1);
  92.         SCL=0;
  93.         Delay_us(1);
  94. }                                                                              
  95.                   
  96. void IIC_Send_Byte(u8 txd)
  97. {
  98.         u8 i;
  99.         SDA_OUT();
  100.         for(i=0;i<8;i++)
  101.         {
  102.                 if(txd & 0x80) SDA=1;
  103.                 else SDA=0;
  104.                 txd <<= 1;
  105.                 Delay_us(1);
  106.             SCL=1;
  107.                 Delay_us(1);
  108.                 SCL=0;       
  109.         }
  110.         Delay_us(1);
  111.         SCL=1;
  112.         Delay_us(1);
  113.         SCL=0;
  114. }             

  115. u8 IIC_Read_Byte(unsigned char ack)
  116. {
  117.         u8 i,receive=0;
  118.         SDA_IN();//SDA 引脚输入模式
  119.        
  120.                 for(i=0;i<8;i++)
  121.                 {
  122.                         SCL=1;
  123.                         Delay_us(1);
  124.                         receive <<=1;
  125.                         if(READ_SDA) receive |= 0x01;
  126.                        
  127.                         SCL=0;
  128.                         Delay_us(1);
  129.                 }
  130.                 SDA_OUT();
  131.                 return receive;
  132.                
  133. }


  134. void R8025AC_Read(u8 sadd, u8 *buf, u8 len)
  135. {
  136.         u8 i;
  137.         IIC_Start();
  138.         IIC_Send_Byte(0x64);
  139.         IIC_Send_Byte(sadd<<4|0x01);
  140.         IIC_Start();
  141.         IIC_Send_Byte(0x65);
  142.         for(i=0;i<len-1;i++)
  143.         {
  144.                 buf[i] = IIC_Read_Byte(1);
  145.                 IIC_Ack();
  146.         }
  147.         buf[i] = IIC_Read_Byte(0);
  148.         IIC_NAck();
  149.         IIC_Stop();
  150. }

  151. void R8025AC_Write(u8 sadd,u8 *buf,u8 len)
  152. {
  153.         u8 i;
  154.        
  155.         IIC_Start();
  156.         IIC_Send_Byte(0X64);
  157.         IIC_Send_Byte(sadd<<4);
  158.        
  159.         for(i=0;i<len;i++)
  160.         {
  161.                 IIC_Send_Byte(buf[i]);
  162.         }
  163.         IIC_Stop();
  164. }
  165. /********************************************************************/
复制代码


6#
 楼主| 发表于 2020-1-6 18:08:24 | 只看该作者
wpppmlah 发表于 2020-1-6 11:08
这芯片我用过,以下代码是成功应用的。STVD工程中的R8025AC驱动片断希望能帮到楼主。

非常感谢坛友的代码分享,我是玩通了RX8025T以后开始玩RX8025AC的,结果弄了两天也没弄通,而后开始认真检查硬件才发现是芯片挂了,说来奇怪的是我自己做的转接板同时焊了一片8025T和一片8025AC,结果那个8025T的板子毫无问题而这个8025AC竟然坏掉了,重新弄好硬件后用原来的8025T的代码稍加改动就可以了,层主分享的代码也有看过,用到STC单片机上时端口方向的设置、延时函数要进行修改所以我没试但还是感谢你的热心分享。
7#
发表于 2020-1-8 10:19:29 | 只看该作者
本帖最后由 infozx 于 2020-1-8 10:26 编辑

我搞得那个高频烙铁里用了这个Epson得时钟芯片8025T,折腾了几次,写地址没问题;但发现读取得寄存器地址位跟实际地址漂移了1个,不知道为啥,反正能读,后来就一直那样了懒得深究。

8025能获取得厂家标准资料不多,都是犹抱琵琶半遮面得;上一个跟这种一样蛋疼得芯片是LT8920,datasheet讳莫如深,几十个寄存器配置参数跟神符一样,没有厂家人员得支持只能浑水摸鱼。

  1. void R8025AC_Read(u8 sadd, u8 *buf, u8 len)
  2. {
  3.         u8 i;
  4.     i=0;
  5.    
  6.     while(I2C_GetFlagStatus(I2C_FLAG_BUSBUSY));  //等待总线空闲
  7.     I2C_AcknowledgeConfig(I2C_ACK_CURR);  //开启发送ACK
  8.    
  9.         I2C_GenerateSTART(ENABLE);  //开启I2C起始位
  10.    
  11.     I2C_GenerateSTART(ENABLE);  //开启I2C起始位
  12.     while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));   /*EV5,主模式*/
  13.     I2C_Send7bitAddress(0x64, I2C_DIRECTION_TX);   //发送iic从器件物理地址,最低位0,写操作; 器件地址0x64
  14.     while(!I2C_CheckEvent(I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
  15.    
  16.     I2C_SendData((sadd<<4)|0x01); //寄存器地址
  17.     while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));
  18.    
  19.         //---//
  20.     I2C_GenerateSTART(ENABLE);//开启I2C1起始位
  21.     while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));   /*EV5,主模式*/
  22.     I2C_Send7bitAddress(0x65, I2C_DIRECTION_RX);   //发送iic从器件物理地址,最低位1,读操作; 器件地址 --
  23.     while(!I2C_CheckEvent(I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
  24.    
  25.    
  26.         for(i=0;i<len-1;i++)
  27.         {
  28.         while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_RECEIVED));  //等待数据接收器非空
  29.         buf[i]=I2C_ReceiveData();    //读取一个字节数据
  30.         }
  31.        
  32.     while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_RECEIVED));  //等待数据接收器非空
  33.     buf[i]=I2C_ReceiveData();    //读取最后一个字节数据
  34.        
  35.     I2C_AcknowledgeConfig(I2C_ACK_NONE);  //停止发送ACK

  36.     I2C_GenerateSTOP(ENABLE);//发送STOP,关闭I2C1总线
  37. }

  38. void R8025AC_Write(u8 sadd,u8 *buf,u8 len)
  39. {
  40.         u8 i;
  41.     i=0;
  42.    
  43.     while(I2C_GetFlagStatus(I2C_FLAG_BUSBUSY));  //等待总线空闲
  44.     I2C_AcknowledgeConfig(I2C_ACK_CURR);  //开启发送ACK
  45.    
  46.         I2C_GenerateSTART(ENABLE);  //开启I2C起始位
  47.    
  48.     I2C_GenerateSTART(ENABLE);  //开启I2C起始位
  49.     while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));   /*EV5,主模式*/
  50.     I2C_Send7bitAddress(0x64, I2C_DIRECTION_TX);   //发送iic从器件物理地址,最低位0,写操作; 器件地址0x64
  51.     while(!I2C_CheckEvent(I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
  52.    
  53.     I2C_SendData((sadd<<4)|0x01); //寄存器地址
  54.     while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));
  55.    
  56.         for(i=0;i<len;i++)
  57.         {
  58.         while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));  //等待数据发送完毕
  59.         I2C_SendData(buf[i]);    //发送一个字节数据
  60.         }   
  61.        
  62.         I2C_GenerateSTOP(ENABLE);//发送STOP,金巴黎彩票开户:关闭I2C1总线
  63. }
复制代码



8#
 楼主| 发表于 2020-1-8 19:42:16 | 只看该作者
infozx 发表于 2020-1-8 10:19
我搞得那个高频烙铁里用了这个Epson得时钟芯片8025T,折腾了几次,写地址没问题;但发现读取得寄存器地址位 ...

建议仔细看一下芯片丝印,如果是R8025  T的话,你的代码中的sadd<<4)|0x01肯定是不对的,寄存器地址移入高4位的操作只适合R8025  AC这个芯片,对照说明书再查一下代码会解决问题的,也可以安装我的图片的顺序自己写这部分代码。
9#
发表于 2020-1-9 09:06:44 | 只看该作者
两种都玩过,垃圾智能电表上直接玩的,NEC单片机点的,没遇到啥麻烦
10#
 楼主| 发表于 2020-1-9 18:37:31 | 只看该作者
jcdzxh 发表于 2020-1-9 09:06
两种都玩过,垃圾智能电表上直接玩的,NEC单片机点的,没遇到啥麻烦

说心里话,这种芯片的IIC驱动真的没啥特别的,如果不是因为芯片焊坏了没留神应该没什么太多的感想。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|关于我们|联系我们|网站条款|数码之家 ( 闽ICP备05031405号 )

GMT+8, 2020-10-26 14:55 , Processed in 0.202800 second(s), 14 queries , Redis On.

Powered by t6娱乐vip真人

© 2001-2019 Comsenz Inc.

www.vni99.com登入 返回顶部 返回列表
百万发娱乐平台登陆 mg泡沫财富 威尼斯人寄包 电子游戏厅游戏大全登入 汇丰吉利彩票计划群大全
凤凰投注网网址 澳彩网正规直营网 永盛彩票在线开户直营网 大富豪彩票正规直营网 256彩票网址
j8彩票手机下载直营网 幸运飞艇网站 阳光彩票在线开户直营网 永乐彩票娱乐直营网 彩11平台
老虎机微信支付充值 金多宝彩票现金直营网 澳门ag娱乐场手机版登入 秒速时时彩app下载 天王娱乐城网站直营网