搜索
bottom↓
回复: 3

请教电子称CS1180AD芯片程序问题,数据不正常,有时正常,但重量一加上,就乱跳。关机一会再

[复制链接]

出0入0汤圆

发表于 2011-3-13 18:54:07 | 显示全部楼层 |阅读模式
不知到底是转换速率不对,还是时钟不对,还是别的什么问题。都改过N次了还不行。只能改的更差。顺便贴上程序。使用的是STC 1T的单片机


void delay()
{                unsigned char i;
                for (i=0; i<10; i++)
                ;

}







//延时子程序
void delay_ms(unsigned int t)
{  unsigned int i,j;
   for(i=0;i<t;i++)
      for(j=0;j<200;j++)
         {        _nop_();        _nop_();
}
}





/*********************************************************************************************************
**         function name        :         
**         description                :
**         Arguments                :
**         Returns                        :
**        global varible        :
**        call   module        :
**       
**         Author                        :
**         Date                        :
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void  delay_50us(void)
                {
                unsigned char i;
                for (i=0; i<120; i++)
                ;
                } //
               
                void SPI_clock(void)
                {
                SCLK = LOW;
                delay();
                SCLK = HIGH;
                delay();
                }
/***************************************************************************************
函数原型: void SPI_send(unsigned char SPI_data) *功能 : 向spi总线上发送8位数据信号
*************************************************************************************/
                void SPI_send(unsigned char SPI_data)
                {
                unsigned char bitCount;
                for (bitCount=0; bitCount<8; bitCount++)
                {
                SDI = (bit)(SPI_data & 0x80);
                SPI_data <<= 1;
                SPI_clock();
                }
                }
/***************************************************************************************
函数原型: unsigned char SPI_receive(void) *功能 : 从spi总线上接受8位数据信号,并将接收到的数据作为一个字节返回
**************************************************************************************/
                unsigned char SPI_receive(void)
                {
                unsigned char bitCount;
                unsigned char SPI_data=0;
                SDO = 1;
                for (bitCount=0; bitCount<8; bitCount++)
                { SPI_data <<= 1;
                SCLK = HIGH;
                delay();
                SCLK = LOW;
                delay();
                if (SDO) { SPI_data++; }
                }
                return (SPI_data);
                }

/***************************************************************************************
函数原型: unsigned long ReadAdData(void) *功能 : 从CS1180中读取AD转换结果,并将结果以长整型数据返回
**************************************************************************************/
                unsigned int ReadAdData(void)
                { unsigned char i; union LongData a;
unsigned int k;
                CS = LOW; delay();
                a.byte[0] = 0;
                while (DRDY) ; //当DRDY为高时,不读取数据


                SPI_send(COMM_RDATA);
                delay_50us();
                for (i=1;i<4;i++)
                {
                a.byte = SPI_receive();
         shuju=a.byte;
                }

        k=a.word>>8;
                CS = HIGH;
                return k; //在发送读指令后,延时100us才能接收数据
                }
/*******************************************************
函数原型: void IniCS1180(void) *功能 : 初始化cs1180
**************************************************************************************/
                void IniCS1180(void)
                {
                unsigned char m; SCLK = HIGH;
                SDI = HIGH ;
                SDO = HIGH ;
                delay();
                CS = LOW;
                delay();
                SPI_send(COMM_RESET); //rst 1180
                delay();
                CS = HIGH;
                delay_50us();
                CS = LOW;
                delay();
                SPI_send(0x50); //写寄存器命令
                SPI_send(0x02);  //写寄存器命令
                SPI_send(0x00); //写入00H 内容,-SETUP寄存器
                SPI_send(0x01);//写入01H内容,MUX寄存器
                SPI_send(0x40); //写入02H内容,ACR寄存器


                CS = HIGH;
                delay_50us();

                CS = LOW;
        delay_ms(2);
                SPI_send(COMM_CALSELF); //用片内信号校准失调误差和增益误差
                delay();
                CS = HIGH;
                while (DRDY) ;
                while (!DRDY) ;  //发送3个指令 //0x00 pga = 7 //0x01 此处必须为01 //0x02 输出频率 15hz,参考电压5V
                delay_ms(10);
                while (DRDY) ;
                CS = LOW;
                delay();
                SPI_send(0x10);       
                delay();
                SPI_send(15);
                delay_50us();
                for (m=0; m <16; m++) { buf[m] = SPI_receive(); }
                }

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2011-3-13 21:02:07 | 显示全部楼层
搞定,错在把数据输入输出共用一个I/O口,有干扰

出0入0汤圆

发表于 2012-2-8 14:10:50 | 显示全部楼层
回复【1楼】odqqdo
-----------------------------------------------------------------------

您好,您在用这个芯片做什么啊?我也刚好用它,请教你个问题:您怎样处理转换好的数据啊?谢谢。

出0入0汤圆

发表于 2012-5-13 13:33:26 | 显示全部楼层
那怎么用IO 啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-24 02:31

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

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