打印

关于MAX1270的问题

[复制链接]
1948|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
superhj1987|  楼主 | 2009-8-4 23:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
采用STC12C5A60S2单片机。使用单片机带的硬件SPI口与MAX1270连接。使用MAX1270的内部时钟模式。程序大体如下:
void startAD(uchar idata adCh,uchar idata scale,uint idata *x){//adCh选择通道,scale选择输入电压范围:0:0~5V 1:-5~+5V 2:0~10V  3:-10~+10V   
   uchar temp1,temp2;
   uchar controlByte = 0x80 +(adCh << 4)+(scale << 2);//internal clock
   
   AD_CS;//片选下降沿
   
   send_SPI(controlByte);//设置控制字

   P2_Reset;//片选置高,阻止数据被锁存到DOUT
   delayUs(10);//等待转换完毕最多15us
   AD_CS;//片选下降


   read_SPI(&temp1);//读高8位数据
   read_SPI(&temp2);//读低4位数据

   P2_Reset;//CS上升
   
   *x = (temp1 << 4) | (temp2 >> 4);
}
void send_SPI(uchar ch){//向从机发送数据
    SPDAT = ch;

    while(!(SPSTAT&0x80));//等待发送完毕

    SPSTAT = 0xc0;//软件向SPIF、WCOL写“1”清零
}

void read_SPI(uchar *ch){//读取从机的数据
    SPDAT = 0x00;
   
    while(!(SPSTAT&0x80));//等待接收到数据
    SPSTAT = 0xc0;//软件向SPIF、WCOL写“1”清零
   
    *ch = SPDAT;
}

但是,这样测出来的值变动很大,范围跳动在在5mv左右,很不稳定。按说12位AD不会这样波动啊。不知道是程序的事,还是电路的事。望高手赐教。

相关帖子

沙发
雪山飞狐D| | 2009-8-4 23:47 | 只看该作者
软硬件都要滤波

使用特权

评论回复
板凳
superhj1987|  楼主 | 2009-8-5 15:00 | 只看该作者
有没有人能提供点意见?

使用特权

评论回复
地板
catdriver| | 2009-8-5 21:46 | 只看该作者
软件上要有滤波,特别要注意ADC芯片内部的滤波功能,有必要的话一定要用起来。另外硬件上也要有滤波,这需要看图。另外也可能是受电源的干扰。

使用特权

评论回复
5
ql2000| | 2009-8-5 21:57 | 只看该作者
最好的方法就是增加滤波算法。

使用特权

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

本版积分规则

5

主题

13

帖子

0

粉丝