打印

用过CS5532的高好人进来一下呀

[复制链接]
8975|37
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子尘埃|  楼主 | 2007-9-20 10:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近到一个新公司,公司里尽然没有示波器,要人买,又要等好几天.对着数据手册写了个驱动程序,可是不对.用过的高好人帮我看一下好吗?
/*--------------------------------------------


--------------------------------------------*/
void delay(INT8U n)
{

        while(--n){
         #asm("nop");   #asm("nop"); #asm("nop"); #asm("nop"); #asm("nop"); #asm("nop");}
}

/*--------------------------------------------

        CS5532初始化

---------------------------------------------*/
void CS5532_INIT(void)
{
        INT8U i,k;//temp;

        PORTB.3 = 0;
        ADCS = 0;
        ADSCLK = 0;
    ADSDI = 0;
        k=0;
        delay_ms(20);
        for(i=15;i>0;i--)sendCS5532_buff(0xff);
        sendCS5532_buff(0xfe);        //使串口复位成命令模式
        delay_ms(20);
        sendCS5532_buff(0x03);  //写配置寄存器
        sendCS5532_buff(0x20);
        sendCS5532_buff(0x40);  //注意A0,A1以后要开路
        sendCS5532_buff(0x00);
        sendCS5532_buff(0x00);  //写入32位数据,复位芯片
 /*      do{
                sendCS5532_buff(0x0b);          //读配置寄存器命令
                temp = readCS5532();
                i = readCS5532();
                i = readCS5532();
                i = readCS5532();   //读配置寄存器
                temp &= 0x10;
             //   k++;
            //    if(k>200) break;        //可以做个AD故障检测
        }while(temp != 0x10); */
        delay_ms(20);
        sendCS5532_buff(0x05);
        sendCS5532_buff(0b00110100);    //通道1 增益64 字速率1920hz
        sendCS5532_buff(0b10000000);    //单极性
        sendCS5532_buff(0x00);
        sendCS5532_buff(0x00);
        /*sendCS5532_buff(0x41);
        sendCS5532_buff(0xfe);
        sendCS5532_buff(0);
        sendCS5532_buff(0);
        sendCS5532_buff(0);
        sendCS5532_buff(0xfe);
        sendCS5532_buff(0);
        sendCS5532_buff(0);
        sendCS5532_buff(0);
        sendCS5532_buff(0xfe);
        sendCS5532_buff(0);
        sendCS5532_buff(0);
        sendCS5532_buff(0);
        sendCS5532_buff(0xfe);
        sendCS5532_buff(0);
        sendCS5532_buff(0);
        sendCS5532_buff(0);

        sendCS5532_buff(0x05);  //写向所有通道设置寄存器
        sendCS5532_buff(0b00110100);    //通道1 增益64 字速率1920hz
        sendCS5532_buff(0b10000000);    //双极性
        sendCS5532_buff(0b00110100);    //通道1 增益64 字速率1920hz
        sendCS5532_buff(0b10000000);    //双极性

        delay(10);
        delay(10);
        /* 测试读写CS5532程序是否正常
        sendCS5532_buff(0x0d);  //读取通道设置寄存器
        i = readCS5532();
        i = readCS5532();
        while(i == 0b11000000)BG = 1;   */
      //  sendCS5532_buff(0xc0);  //执行连续转换

    //    ADCS = 1;       //关闭AD
}
/*---------------------------------------------


                发送一个字节
                高位在前
----------------------------------------------*/
void sendCS5532_buff(INT8U temp)
{
    INT8U i;

  //      ADCS = 0;
        ADSCLK = 0;
        ADSDI = 0;
        for(i=8;i>0;i--) {
                if(temp&0x80) ADSDI = 1;
                else ADSDI = 0;
                temp <<=1;
                delay(2);
            ADSCLK=1;
                delay(5);
            ADSCLK=0;
                delay(2);
        }
        ADSDI = 0;
    //    delay(2);
   //     ADCS=1;
}

/*-------------------------------------------

                读取CS5532寄存器

-------------------------------------------*/
static INT8U readCS5532(void)
{
        INT8U i,temp;

        ADSCLK=0;
        delay(1);
    for(i=8;i>0;i--){
        temp<<=1;
        if(ADSDO) temp |= 1;
        else temp &= 0xfe;
                delay(2);
        ADSCLK=1;
                delay(5);
        ADSCLK=0;
                delay(2);
    }
        return(temp);
}
/*---------------------------------------------


               执行完稳定的单次转换
               cs5532采样

----------------------------------------------*/
INT32U cs5532_sample(void)
{
        INT8U i;
        INT32U addata_buff;

        sendCS5532_buff(0x80);
     //   sendCS5532_buff(0x0c);
        while(ADSDO);
        ADSDI = 0;
        delay(2);
        for(i=8;i>0;i--){
                ADSCLK = 1;
                delay(5);
                ADSCLK = 0;
                delay(5);
        }
        addata_buff = readCS5532();
        addata_buff <<=8;
        addata_buff |= readCS5532();
        addata_buff <<=8;
        addata_buff |= readCS5532();
        for(i=8;i>0;i--)
        {
                ADSCLK = 1;
                delay(5);
                ADSCLK = 0;
                delay(5);
        }
        return( addata_buff );
}

相关帖子

沙发
电子尘埃|  楼主 | 2007-9-20 12:45 | 只看该作者

救急呀!

void main(void)
{

端口初始化;
ADCS=0;
扬时20ms;
CS5532_INIT();
while(1){

.............
cs5532_sample();
...........
       }
}









}

使用特权

评论回复
板凳
zhenglixin| | 2007-9-20 13:43 | 只看该作者

re:

连示波器都没有,什么皮包公司啊?唉

使用特权

评论回复
地板
onemillion| | 2007-9-20 13:55 | 只看该作者

ls,

好多人,不但没示波器,
而且调试程序都不用仿真器。
 甚至直接用手写二进制程序。

使用特权

评论回复
5
电子尘埃|  楼主 | 2007-9-20 14:14 | 只看该作者

甚至直接用手写二进制程序。

LS 夸张了吧

使用特权

评论回复
6
onemillion| | 2007-9-20 14:26 | 只看该作者

哈,一点也不夸张,

  还有传说中的牛人,通过快速不停的按电话键盘的0,1键上网的,

使用特权

评论回复
7
ayb_ice| | 2007-9-20 14:39 | 只看该作者

"甚至直接用手写二进制程序。"

专家啊...

使用特权

评论回复
8
电子尘埃|  楼主 | 2007-9-20 14:51 | 只看该作者

噢,楼上高人,你用过CS5532吗?

在下急呀,你帮着救救急呀,打到CS5532的技术支持那里去,说我不是他那买的芯片不理俺,

使用特权

评论回复
9
孤独泪| | 2007-9-20 14:59 | 只看该作者

我用过,你可以联系我

可以说对cs5532已经是非常熟悉了,可以倒着的把驱动代码写出来。
你不会用它来做重量测量吧

使用特权

评论回复
10
孤独泪| | 2007-9-20 15:03 | 只看该作者

你的程序搞得那么复杂,头晕。

使用特权

评论回复
11
电子尘埃|  楼主 | 2007-9-20 15:53 | 只看该作者

楼上高手,怎么联系你呀

我写了两天都没有调出来

使用特权

评论回复
12
电子尘埃|  楼主 | 2007-9-20 15:54 | 只看该作者

中间那里有一大段是注释掉了

使用特权

评论回复
13
电子尘埃|  楼主 | 2007-9-20 16:01 | 只看该作者

GOTO 孤独累

/*--------------------------------------------

        CS5532初始化
现在其实就用这一段,我是哪个步骤出现了错误呀,
现在扫描结果时,就等在这里了while(ADSDO);
---------------------------------------------*/
void CS5532_INIT(void)
{
        INT8U i;

        PORTB.3 = 0;
        //
        ADCS = 0;
        ADSCLK = 0;
        ADSDI = 0;
        k=0;
        delay_ms(20);   
        for(i=15;i>0;i--)sendCS5532_buff(0xff);
        sendCS5532_buff(0xfe);        //使串口复位成命令模式
        delay_ms(20);  
        sendCS5532_buff(0x03);  //写配置寄存器
        sendCS5532_buff(0x20);
        sendCS5532_buff(0x40);  //注意A0,A1以后要开路
        sendCS5532_buff(0x20);
        sendCS5532_buff(0x40);  //写入32位数据,复位芯片    

        sendCS5532_buff(0x05);
        sendCS5532_buff(0b00110100);    //通道1 增益64 字速率1920hz
        sendCS5532_buff(0b10000000);    //单极性
        sendCS5532_buff(0x00);
        sendCS5532_buff(0x00); 
}

使用特权

评论回复
14
孤独泪| | 2007-9-20 16:21 | 只看该作者

有问题,请留email,赶在下班之前,我写出来发给你。

手头没有现成的。

使用特权

评论回复
15
电子尘埃|  楼主 | 2007-9-20 16:26 | 只看该作者

wuzhishu1234@163.com

使用特权

评论回复
16
onemillion| | 2007-9-20 16:30 | 只看该作者

孤独泪

  顺便也发一份来欣赏一下!谢谢!

   850775998@qq.com

使用特权

评论回复
17
电子尘埃|  楼主 | 2007-9-20 16:34 | 只看该作者

太感谢 孤独泪 我仔细看看你的程序,不懂的还问你噢

使用特权

评论回复
18
电子尘埃|  楼主 | 2007-9-21 10:11 | 只看该作者

跟我写的那个差不多呀,

for(i=15;i>0;i--)sendCS5532_buff(0xff);
//这里你写了30次,我只有写15次,别的都差不多呀

使用特权

评论回复
19
电子尘埃|  楼主 | 2007-9-21 10:42 | 只看该作者

是我没有搞灵清

再次谢谢 孤独泪, 

使用特权

评论回复
20
孤独泪| | 2007-9-21 11:37 | 只看该作者

我看了区别还是很大的。

复位之后延时的时间,启动ad转换的方式。

使用特权

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

本版积分规则

51

主题

444

帖子

0

粉丝