打印

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

[复制链接]
2981|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xyz549040622|  楼主 | 2013-1-22 22:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xyz549040622 于 2013-1-22 22:27 编辑

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

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

    delay_1us();
        for(loop=0;loop<8;loop++)
        {
                da=da<<1;
                ad_di=CY;
                ad_sck=1;

                 delay_1us();
                ad_sck=0;

        delay_1us();
        }
}
/////从cs5532内部单元读出一个字节
unsigned char ReadCs5532(void)  ///读a/d
{
        unsigned char loop,da;
        ad_sck=0;

        delay_1us();
        for(loop=0;loop<8;loop++)
        {
                da=da<<1;
                da=da|ad_do;
                ad_sck=1;

                 delay_1us();
                ad_sck=0;

                 delay_1us();
        }
        return(da);
}

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

    temp0=ReadCs5532();
         temp1=ReadCs5532();
          temp2=ReadCs5532();
           temp3=ReadCs5532();
         

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

}

unsigned long ReadCs5532_Reg(void)  ///读a/d转换寄存器中的值
{
    unsigned long temp;//返回值
        tep5[0]=ReadCs5532();
        tep5[1]=ReadCs5532();
        tep5[2]=ReadCs5532();
        tep5[3]=ReadCs5532();
        temp=((unsigned long)tep5[0])<<24|((unsigned long)tep5[1])<<16|((unsigned long)tep5[2])<<8|((unsigned long)tep5[3]);
        return temp;
}
void InitCs5532(void)     ///a/d初始化
{
        unsigned char loop;//配置寄存器中的32位数据
        

        ad_do=1;
        ad_di=0;
        ad_sck=0;
    delay_10ms(2);

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

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

        }
        else
        {
        PutString(0,18,"rest is wrong!");
        }
        WriteCs5532(0x03);//写配置寄存器
        WriteCs5532(0x00);//
        WriteCs5532(0x08);
        WriteCs5532(0x00);
        WriteCs5532(0x00);


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

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

        }



相关帖子

沙发
ayb_ice| | 2013-1-23 08:06 | 只看该作者
手册多看几遍就搞定了,要仔细看,不要挑章节看

使用特权

评论回复
板凳
jlass| | 2013-1-23 09:29 | 只看该作者
5532好像某人的名字:lol

使用特权

评论回复
地板
xyz549040622|  楼主 | 2013-1-29 09:56 | 只看该作者
求赐教。。。

使用特权

评论回复
5
21克爱| | 2013-4-7 16:12 | 只看该作者
xyz549040622 发表于 2013-1-29 09:56
求赐教。。。

你好,请问你的cs5532调试出来了吗   我也在调   现在调不出来

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群: 嵌入式系统arm初学者 224636155←← +→→点击-->小 i 精品课全集,21ic公开课~~←←→→点击-->小 i 精品课全集,给你全方位的技能策划~~←←

2789

主题

19276

帖子

104

粉丝