CS5463如何测电压

2020-01-22 12:09发布

我在网上搞了一个程序移植过来,程序大体思路是这样的 先初始化定时器 然后串口 CS5463  然后进行校准 最好通过定时器到了一定时间开始只读0X18电压数据寄存器 结果读出来的数据全为0
我这里么有啥工具 我只是想简单的测一个电压 求做过的人指导一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
31条回答
lxa0
1楼-- · 2020-01-22 13:16
把你网上搞了一个程序发上来
把你的硬件图传上来  
.............
wujin715
2楼-- · 2020-01-22 16:20
好像有个位是开始测量 不过那是测量频率 你怎么连电压都测不出来 你的硬件电路没问题吧
wujin715
3楼-- · 2020-01-22 22:18
去年用过 现在这个项目还在 所以就只能把最基本的串口初始化跟读写函数贴出来  如果最基本的没问题 剩下的就是看DATASHEET了  有时间看看英文的DATAsheet 中文的不清楚
void SpiInit()
{
unsigned char i,j,write_temp;
        SDI=0;
        SCLK=0;
        CS2=0;

        SDO=1;

        for(i=0;i<3;i++)
        {
                write_temp=0xff;
                for(j=0;j<8;j++)
                {
                        write_temp<<=1;
                        SDI=CY;                                                //Any Digital Input Rise/Fall Time < 1us
                        _nop_();
                        SCLK=1;                                                //Rise Time SCLK < 100us
                        _nop_();
//                        delay100us();
                        SCLK=0;                                                //Fall Time SCLK < 100us
                        _nop_();
//                        delay100us();
                }
        }
        write_temp=0xfe;
        for(j=0;j<8;j++)
        {
                write_temp<<=1;
                SDI=CY;                                                //Any Digital Input Rise/Fall Time < 1us
                _nop_();
                SCLK=1;                                                //Rise Time SCLK < 100us
                _nop_();
//                        delay100us();
                SCLK=0;                                                //Fall Time SCLK < 100us
                _nop_();
//                        delay100us();
        }
        CS2=1;
}
/*****************************************
函数名称:SdiWrite
功    能:Write Command & Data to CS5463
参    数:pointer--The Char Array of Command + Data (1 + 3)
返 回 值:无
******************************************/
void SdiWrite (unsigned char *pointer)
{
        unsigned char i,j,write_temp;


        CS2=0;
        for(i=0;i<4;i++)
        {
                write_temp=pointer[i];
                for(j=0;j<8;j++)
                {
                        write_temp<<=1;
                        SDI=CY;                                                //Any Digital Input Rise/Fall Time < 1us
                        _nop_();
                        SCLK=1;                                                //Rise Time SCLK < 100us
                        _nop_();
//                        delay100us();
                        SCLK=0;                                                //Fall Time SCLK < 100us
                        _nop_();
//                        delay100us();
                }
        }
        SDI=1;
        CS2=1;
}
/*****************************************
函数名称:SdoRead
功    能:Write Command to CS5463 & Read Data from CS5463
参    数:pointer-->The Char Array of Command + Data (1 + 3)
返 回 值:无
******************************************/
void SdoRead (unsigned char *pointer)
{
        unsigned char i,j,cmd;

        CS2=0;

        cmd=pointer[0];
        for(i=0;i<8;i++)
        {
                cmd<<=1;
                SDI=CY;                                                //Any Digital Input Rise/Fall Time < 1us
                _nop_();
                SCLK=1;                                                //SCLK Rise Time < 100us
                _nop_();
//                delay100us();
                SCLK=0;                                                //SCLK Fall Time < 100us
                _nop_();
//                delay100us();
        }
        SDI=1;
        for(i=1;i<4;i++)
        {
                for(j=0;j<8;j++)
                {
                        SDO=1;                                        //读取数据前先置高
                        pointer[i]<<=1;
                        SCLK=1;
                        _nop_();
//                        delay100us();
                        if(SDO)
                                pointer[i]++;
//                        temp=SDO;
//                        pointer[i]+=temp;
                        SCLK=0;
                        _nop_();
//                        delay100us();;       
                }
        }
        CS2=1;
}

我用的是stc89c52 晶振11.0592MHz
ningting06
4楼-- · 2020-01-23 01:21
wujin715 发表于 2014-8-12 19:21
去年用过 现在这个项目还在 所以就只能把最基本的串口初始化跟读写函数贴出来  如果最基本的没问题 剩下的 ...

这是SPI协议 这里我是没问题的
void main()
{         
   timer_init();
        com_init();                        //串口初始化
        InitCS5460A();                //CS5460A初始化
        //Calibraton_run();        //通道增益校准
while(1)
{       
        if(flag==1)
        {
       
        RunCS5460A();        //读取转换值
        flag=0;
        }

        }
}


void RunCS5460A()
{
               

        Read_CS5460A(Buf,0x1e);
        if(Buf[0]&0x80)
        {
                Read_CS5460A(Buf,0x18);  
                SendSerialData(Buf,3);                  //232V         这里发出的东西始终是0 难道一定要做校准 我在考虑下一步做校准 不过看手册貌似很麻烦
                ClearCS5460A();
        }


else         SendSerial_Data(9);
}

wujin715
5楼-- · 2020-01-23 04:45
 精彩回答 2  元偷偷看……
ningting06
6楼-- · 2020-01-23 07:58
wujin715 发表于 2014-8-13 11:31
不用非要校准 有个连续测量 你开了没  CS5463芯片初始化没问题吧?

void InitCS5460A()//初始化CS5460A
{
       
        RestCS5460A();//复位CS5490A
        Sync_CS5460A();
        Wr_configure();//配置
        Load_Calibraton();
        ClearCS5460A();
        Wr_interrupt();
        Wr_Control();
        Buf[0] = 0xE8;
        Write_CS5460A(Buf,1); //启动CS5460A       
}
这片子 非常不熟悉 还求多多指导指导

一周热门 更多>