8916|7

4

帖子

0

资源

一粒金砂(初级)

谁有CS5530的程序啊? [复制链接]

弄了一晚上了还是有问题,不是读到FFFFFFF就是读到个固定值,怎么拉传感器都不动

回复

2

帖子

0

资源

一粒金砂(初级)

应该是主控和模块的通信没有成功,,,,,先保证接口协议正确。

回复

1

帖子

0

资源

一粒金砂(初级)

以解决,准备结贴
贴上程序以备后人参考,另BS下搞硬件那几个家伙,输入信号要求+-XX MV的,丫的给我2个X V的输入信号,难怪我读出来的都是FF

  1. //cs5530.h
  2. #ifndef __cs5530_h__
  3. #define __cs5530_h__

  4. #define  SYNC1               0xff
  5. #define  SYNC0               0xfe
  6. #define  NULL_BYTE           0x00
  7. // Command Register
  8. #define  CMD_WRITE           (0x00<<3)//写寄存器命令
  9. #define  CMD_READ            (0x01<<3)//读寄存器命令

  10. #define  REG_OFFSET          0x01   //偏移寄存器
  11. #define  REG_GAIN            0x02   //增益寄存器
  12. #define  REG_CONFIG          0x03   //配置寄存器


  13. #define  START_SINGLE        (0x00<<6) //单次转换
  14. #define  START_CONTINUOUS    (0x01<<6)//连续转换

  15. #define  NORMAL_CONVERSION   (0x80+0x00)//转换命令
  16. #define  SYSTEM_OFFSET_CAL   (0x80+0x05)//执行偏移校准
  17. #define  SYSTEM_GAIN_CAL     (0x80+0x06)// 执行增益校准
  18. // Configuration Register
  19. #define  STANDBY_MODE        (0x00L<<31)//待机模式
  20. #define  SLEEP_MODE          (0x01L<<31)//休眠模式
  21. #define  POWER_SAVE_MODE     (0x01L<<30)  //节电模式

  22. #define  NORMAL_MODE         (0x00L<<29)    //正常操作
  23. #define  SYSTEM_RESET        (0x01L<<29)//激活一个复位周期 复位后自动清0

  24. #define  RESET_STATUS        (0x01L<<28)   //复位有效 系统已复位 只读

  25. #define  SHORT_INPUTS        (0x00L<<27)   //输入正常输入 个通道输入不断接


  26. #define  VREF_HIGH           (0x00L<<25)  //参考电压 2.5~((VA+)-(VA-))V
  27. #define  VREF_LOW            (0x01L<<25)//参考电压 1~2.5V

  28. #define  CR_A1_0             (0x00L<<24)
  29. #define  CR_A1_1             (0x01L<<24)

  30. #define  CR_A0_0             (0x00L<<23)
  31. #define  CR_A0_1             (0x01L<<23)

  32. #define  LINE_FREQ_60        (0x00L<<19)  //滤波数率选择 缺省输入字
  33. #define  LINE_FREQ_50        (0x01L<<19)  //输出字数率及相应滤波器特性乘以系数5/6

  34. #define  DATARATE_100        (0x00L<<11)   //字数率 不同位就不同
  35. #define  DATARATE_50         (0x01L<<11)
  36. #define  DATARATE_25         (0x02L<<11)
  37. #define  DATARATE_12P5       (0x03L<<11)
  38. #define  DATARATE_6P25       (0x04L<<11)
  39. #define  DATARATE_3200       (0x08L<<11)
  40. #define  DATARATE_1600       (0x09L<<11)
  41. #define  DATARATE_800        (0x0aL<<11)
  42. #define  DATARATE_400        (0x0bL<<11)
  43. #define  DATARATE_200        (0x0cL<<11)

  44. #define  BIPOLAR_MODE        (0x00L<<10)  //极性选择双极性模式
  45. #define  UNIPOLAR_MODE       (0x01L<<10)//极性选择单极性模式

  46. #define  TURN_OFF_300NA       (0x00L<<9)  //不激活电流源
  47. #define  TURN_ON_300NA       (0x01L<<9)  //激活电流源300ma
  48. void CS5530_Serial_Reset(void);
  49. void CS5530_System_Reset(void);
  50. void CS5530_Config(void);
  51. unsigned char CS5530_ADC_Ready(void);
  52. unsigned long CS5530_Result(void);
  53. #endif
复制代码



回复

1

帖子

0

资源

一粒金砂(初级)

感谢下写这个程序的前辈

  1. //CS5530.C
  2. #include "w79e824.h"
  3. #include "cs5530.h"
  4. #include

  5. sbit cs5530_clk=P0^5;
  6. sbit cs5530_cs=P1^6;
  7. sbit cs5530_sdi=P0^7;
  8. sbit cs5530_sdo=P0^6;

  9. sbit MOSI=P0^7;
  10. sbit SCK=P0^5;
  11. sbit MISO=P0^6;

  12. #define cs5530_clk_h cs5530_clk=1
  13. #define cs5530_clk_l cs5530_clk=0;
  14. #define cs5530_cs_h cs5530_cs=1
  15. #define cs5530_cs_l cs5530_cs=0
  16. #define cs5530_in_h cs5530_sdi=1
  17. #define cs5530_in_l cs5530_sdi=0
  18. #define cs5530_out cs5530_sdo

  19. #define uint8_t unsigned char
  20. #define uint32_t unsigned long

  21. #define uchar unsigned char
  22. #define uint unsigned int

  23. void delay5530(uint iMs)
  24. {
  25.         uint cou;
  26.         uchar i;
  27.         for(cou=0;cou
  28.         {
  29.                 for(i=0;i<130;i++)
  30.                 {
  31.                         _nop_();
  32.                 }
  33.         }
  34. }

  35. uchar SPI_RW(uchar byte)
  36. {
  37.         uchar ctr;
  38. //        cs5530_cs_l;

  39.         for(ctr=0;ctr<8;ctr++) // output 8-bit
  40.         {
  41.                 MOSI=(byte & 0x80); // output 'byte', MSB to MOSI
  42.                 byte=(byte<<1); // shift next bit into MSB..
  43.                 SCK=1; // Set SCK high
  44.                 _nop_();_nop_();_nop_();_nop_();//..
  45.                 _nop_();_nop_();_nop_();_nop_();//
  46.                 _nop_();_nop_();_nop_();_nop_();///..
  47.                 _nop_();_nop_();_nop_();_nop_();//
  48.                 byte|=MISO; // capture current MISO bit
  49.                 SCK=0; // ..then set SCK low again
  50.                 _nop_();_nop_();_nop_();_nop_();///..
  51.                 _nop_();_nop_();_nop_();_nop_();//
  52.                 _nop_();_nop_();_nop_();_nop_();///..
  53.                 _nop_();_nop_();_nop_();_nop_();//
  54.         }
  55. //        cs5530_cs_h;
  56.         return(byte); // return read byte
  57. }
  58. void cs5530_write(uint8_t write_cs5530data)
  59. {
  60.         cs5530_cs_l;       
  61. /*        SPDR=write_cs5530data;
  62.         while(!(SPSR & (1<
  63. */
  64.         SPI_RW(write_cs5530data);
  65.         cs5530_cs_h;       
  66. }

  67. uint8_t cs5530_read(void)
  68. {   uint8_t ad_number;
  69.     cs5530_cs_l;

  70. /*   
  71.         SPDR=0xFF;        ///先发送一个空操作指令
  72.         while(!(SPSR & (1<
  73.         ad_number=SPI_RW(0x00);

  74. /*        ad_number=SPDR;              //读SPI
  75.         SPSR=0x00;*/
  76.         cs5530_cs_h;
  77.         return ad_number;
  78. }


  79. uint32_t  CS5530_Read_Dword ( void )
  80. {
  81.     unsigned long return_data;
  82.     return_data=cs5530_read();
  83.     return_data<<=8;
  84.     return_data+=cs5530_read();
  85.         return_data<<=8;
  86.     return_data+=cs5530_read();
  87.         return_data<<=8;
  88.     return_data+=cs5530_read();       
  89.         return_data=return_data>>9;
  90.     return (return_data);
  91. }
  92.           
  93. uint8_t cs5530_check_over(void)
  94. {
  95.     uint8_t return_data;
  96.     cs5530_cs_h;
  97.     _nop_();
  98.     cs5530_clk_l;
  99.     _nop_();
  100.     _nop_();
  101.     cs5530_cs_l;
  102.     _nop_();
  103.         _nop_();
  104.         _nop_();
  105.     return_data=cs5530_out;
  106.         return_data>>=3;
  107.     cs5530_cs_h;
  108.     return (return_data);
  109. }
  110.           
  111. void CS5530_Write_Dword ( uint32_t ld )      
  112. {
  113.         union type1
  114.         {
  115.                 uchar ch[4];
  116.                 unsigned long lon;
  117.         };
  118. union type1 temp;
  119.    temp.lon= ld;//
  120.    cs5530_write (temp.ch[0] ) ;//
  121.    cs5530_write (temp.ch[1] ) ;
  122.    cs5530_write (temp.ch[2] ) ;
  123.    cs5530_write (temp.ch[3] ) ;
  124. }
  125.           
  126. void CS5530_Serial_Reset(void)   //1
  127. {  
  128.    uint8_t i = 18;
  129.    while ( i-- )
  130.    cs5530_write ( SYNC1 ) ;
  131.    cs5530_write ( SYNC0 ) ;
  132. }
  133.           
  134. void CS5530_System_Reset ( void )   //
  135. {
  136.         uint8_t read_data,cs5530_rst;
  137.         cs5530_write (CMD_WRITE+REG_CONFIG) ;  //写配置寄存器
  138.     CS5530_Write_Dword (SYSTEM_RESET) ;            //初始化 0x20000000
  139.     delay5530(1);
  140.     cs5530_write(CMD_READ+REG_CONFIG);
  141.         read_data=cs5530_read();
  142.         cs5530_rst=read_data;
  143.         read_data=cs5530_read();
  144.         read_data=cs5530_read();
  145.         read_data=cs5530_read();
  146.     while(cs5530_rst&0x10)
  147.     {   
  148.             cs5530_write(CMD_READ + REG_CONFIG);//读配置寄存器//
  149.             read_data=cs5530_read();
  150.             cs5530_rst=read_data;
  151.             read_data=cs5530_read();
  152.             read_data=cs5530_read();
  153.             read_data=cs5530_read();
  154.         }
  155.    cs5530_write ( CMD_WRITE + REG_CONFIG ) ; //配置寄存器
  156.    CS5530_Write_Dword ( NORMAL_MODE ) ;   //0x00000000
  157.   }
  158.           
  159. void CS5530_Config (void)  //3
  160.    {
  161.      cs5530_write ( CMD_WRITE + REG_CONFIG ) ;   ///写配置寄存器 DATARATE_800  LINE_FREQ_50DATARATE_960  UNIPOLAR_MODEDATARATE_6P25
  162.      CS5530_Write_Dword ( NORMAL_MODE +  VREF_HIGH + CR_A0_0 + CR_A1_0 + SHORT_INPUTS +  LINE_FREQ_60 +DATARATE_200  + BIPOLAR_MODE + TURN_OFF_300NA ) ;   
  163.      cs5530_write (START_CONTINUOUS + NORMAL_CONVERSION ) ;//连续转换START_SINGLE
  164. //         cs5530_read();
  165. //         cs5530_read();
  166. //         cs5530_read();
  167. //         cs5530_read();
  168. }

  169. uint32_t CS5530_Result ( void )
  170. {  
  171.    cs5530_write (NULL_BYTE) ;
  172.    return(uint32_t)(CS5530_Read_Dword ()) ;//
  173. }


  174. long CS5530_Adc(void)
  175. {
  176.         long temp;
  177.         cs5530_cs=1;
  178.         cs5530_clk=0;
  179.         cs5530_cs=0;
  180.                 _nop_();_nop_();_nop_();_nop_();///..
  181.                 _nop_();_nop_();_nop_();_nop_();//
  182.                 _nop_();_nop_();_nop_();_nop_();///..
  183.                 _nop_();_nop_();_nop_();_nop_();//
  184.         SPI_RW(0x80);
  185.         while(cs5530_sdo==1);
  186.         SPI_RW(0x00);
  187.         temp=0;
  188.         temp+=SPI_RW(0x00);
  189.         temp<<=8;
  190.         temp+=SPI_RW(0x00);
  191.         temp<<=8;
  192.         temp+=SPI_RW(0x00);
  193.         temp<<=8;
  194.         temp+=SPI_RW(0x00);
  195.         cs5530_cs_h;
  196.         return(temp);
  197. }

  198. unsigned long CS5530_ReadReg(uchar reg)
  199. {
  200.         unsigned long temp;
  201.         cs5530_cs=1;
  202.         cs5530_clk=0;
  203.         cs5530_cs=0;
  204.                 _nop_();_nop_();_nop_();_nop_();///..
  205.                 _nop_();_nop_();_nop_();_nop_();//
  206.                 _nop_();_nop_();_nop_();_nop_();///..
  207.                 _nop_();_nop_();_nop_();_nop_();//
  208.         SPI_RW(reg);
  209.         temp=SPI_RW(0X00);
  210.         temp<<=8;
  211.         temp+=SPI_RW(0x00);
  212.         temp<<=8;
  213.         temp+=SPI_RW(0x00);
  214.         temp<<=8;
  215.         temp+=SPI_RW(0x00);
  216.         return(temp);
  217.         cs5530_cs=1;
  218. }
复制代码

[/code]

回复

1

帖子

0

资源

一粒金砂(初级)

问一下楼主,我读取CS5530数据寄存器也是不对,其他寄存器都是正确的,另外偏移寄存器和增益寄存器怎么设置。电路图如下

CS5530.JPG

回复

15

帖子

0

资源

一粒金砂(初级)

正好要用到

谢谢分享,同时十分感谢原作者

回复

1

帖子

0

资源

一粒金砂(中级)

请教你问题

你好   我看这个程序   读字节函数里面怎么处理的啊,你用这个程序没问题了吗   如果你看到我的留言  希望你加QQ413351855   我想请教下你

回复

1

帖子

0

资源

一粒金砂(初级)

我也遇到同样的问题,请问楼主解决了吗?

回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/7 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表