搜索
bottom↓
回复: 4

CS5532读数据不成功,寻求原因

[复制链接]

出0入0汤圆

发表于 2013-1-22 22:25:46 | 显示全部楼层 |阅读模式
本帖最后由 haolaishi 于 2013-1-22 22:30 编辑

单片机用的STC12C5A60S2,1T的单片机,现已验证5532复位成功,但是读取AD值时都为ff?
现在有几个疑问
1.5532只有一个数据存储寄存器,可是有两个通道,如何确定所读数值是哪一通道的呢?
2.通道设置寄存器setup的作用,如何对应物理通道呢?
3.数据存储寄存器是否有8bit的读命令,如何读取呢?
如果有哪位前辈用过5532,求指教,下面附上程序。。。
  1. /**************************************
  2. ;WWW.STCMCU.COM
  3. ;Mobile:13922805190
  4. ;0755-82948412
  5. AT24C04测试程序
  6. 主芯片  : STC12C5A60S2 (1T)
  7. 工作频率: 12.000MHz
  8. **************************************/
  9. #include "cs5532.h"

  10. mtb_1[5]={0x03,0x22,0x00,0x00,0x00};//0x03写配置寄存器  0x20选择复位,参考电压选择2.5~VA+,其余默认   复位AD,并配置功能
  11. unsigned char xdata tep5[4]={0};
  12. unsigned char xdata tep4[4]={0};
  13. //////写一个字节数据到5532
  14. void WriteCs5532(unsigned char da)   
  15. {     
  16.         unsigned char loop;
  17.         ad_sck=0;

  18.     delay_1us();
  19.         for(loop=0;loop<8;loop++)
  20.         {
  21.                 da=da<<1;
  22.                 ad_di=CY;
  23.                 ad_sck=1;

  24.                  delay_1us();
  25.                 ad_sck=0;

  26.         delay_1us();
  27.         }
  28. }
  29. /////从cs5532内部单元读出一个字节
  30. unsigned char ReadCs5532(void)  ///读a/d
  31. {
  32.         unsigned char loop,da;
  33.         ad_sck=0;

  34.         delay_1us();
  35.         for(loop=0;loop<8;loop++)
  36.         {
  37.                 da=da<<1;
  38.                 da=da|ad_do;
  39.                 ad_sck=1;

  40.                  delay_1us();
  41.                 ad_sck=0;

  42.                  delay_1us();
  43.         }
  44.         return(da);
  45. }

  46. unsigned long ReadCs5532_ADvalue(void)  ///读a/d转换寄存器中的值    此段即读AD值得程序,有疑问?
  47. {
  48.     unsigned char i;
  49.         unsigned long temp0=0,temp1=0,temp2=0,temp3=0,reg=0;
  50.     for(i=0;i<8;i++)
  51.     {
  52.       WriteCs5532(0xff);
  53.     }

  54.     temp0=ReadCs5532();
  55.          temp1=ReadCs5532();
  56.           temp2=ReadCs5532();
  57.            temp3=ReadCs5532();
  58.          

  59.            reg=temp0<<24|temp1<<16|temp2<<8|temp3;
  60.                    return reg>>11;

  61. }

  62. unsigned long ReadCs5532_Reg(void)  ///读a/d转换寄存器中的值
  63. {
  64.     unsigned long temp;//返回值
  65.         tep5[0]=ReadCs5532();
  66.         tep5[1]=ReadCs5532();
  67.         tep5[2]=ReadCs5532();
  68.         tep5[3]=ReadCs5532();
  69.         temp=((unsigned long)tep5[0])<<24|((unsigned long)tep5[1])<<16|((unsigned long)tep5[2])<<8|((unsigned long)tep5[3]);
  70.         return temp;
  71. }
  72. void InitCs5532(void)     ///a/d初始化
  73. {
  74.         unsigned char loop;//配置寄存器中的32位数据
  75.         

  76.         ad_do=1;
  77.         ad_di=0;
  78.         ad_sck=0;
  79.     delay_10ms(2);

  80.         for (loop=0;loop<31;loop++)//初始化,写15个字节SYNC1
  81.     {
  82.                  WriteCs5532(0xff);
  83.     }        
  84.         WriteCs5532(0xfe);        //写一个字节的SYNC0

  85.         for (loop=0;loop<5;loop++)          //写入复位命令
  86.         {
  87.                 WriteCs5532(mtb_1[loop]);
  88.         }
  89.         
  90.         WriteCs5532(0x0b); //读配置寄存器
  91.         if(ReadCs5532_Reg()==0x10000000)//验证是否复位成功
  92.         {
  93.         PutString(0,18,"rest is ok!");

  94.         }
  95.         else
  96.         {
  97.         PutString(0,18,"rest is wrong!");
  98.         }
  99.         WriteCs5532(0x03);//写配置寄存器
  100.         WriteCs5532(0x00);//
  101.         WriteCs5532(0x08);
  102.         WriteCs5532(0x00);
  103.         WriteCs5532(0x00);


  104.     WriteCs5532(0x05);// 写通道设置寄存器         **通道设置寄存器,有疑问?
  105.         WriteCs5532(0x40);//物理通道2,增益1
  106.         WriteCs5532(0x80);//通道2的偏移和增益
  107.         WriteCs5532(0x40);
  108.         WriteCs5532(0x80);

  109.         WriteCs5532(0xc0); //执行转换命令 向CS5532中写入启动A/D连续转换   (8位串口命令)

  110.         }
复制代码

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-1-24 10:13:54 | 显示全部楼层
支持,咱俩的问题一样,初始化成功,但读回的数据溢出,等回答

出0入0汤圆

发表于 2013-1-29 10:41:23 | 显示全部楼层
兄弟,电源接的有问题吧,我的解决了

出0入0汤圆

发表于 2013-1-29 10:46:32 | 显示全部楼层
请问我用cs5530和你们5532用法一样吗?或者告诉我下这两者的区别

出0入0汤圆

发表于 2013-1-29 10:59:12 | 显示全部楼层
首先验证一下SPI接口通信是否正常,一定要保定最基本的东西是对的。内部应该有一些默认的参数,读回来看看能不能对上,如果不能对上那就是通信接口有问题。

然后再看看外围电路的接法是不是正确, 正负12V,5V,参考电压等。有一次我的供电电压没接对,也直接导致不能正常读出数据。

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

本版积分规则

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

GMT+8, 2024-5-18 09:53

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

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