火*味浓了点

[复制链接]
8986|47
 楼主| harvest000 发表于 2007-11-26 12:32 | 显示全部楼层 |阅读模式
硬件连接:
AD7887(12位ADC,125KSPS的吞吐率,55大元一个)的8个脚:
1、CS——P1.0;
2、VDD——+5V;
3、GND——GND,PT1000的一个脚;
4、AIN1/VREF——VDD、10K电位器的一个脚;
5、AIN0——PT1000的另一个脚、10K电位器的另一个脚;
6、DIN——GND(只读ADC);
7、DOUT——P1.1;
8、SCLK——P1.2;

C51程序:(前4位先导0,12位数据高位在前)
    SCLK=1;
    CS=1;
    delay(10);
    CS=0;
    delay(10);
    for(k=0;k<16;k++)
    {
        val=val<<1;
        SCLK=0;
        delay(10);
        SCLK=1;
        delay(10);
        if(DOUT)
        {
            val=val+1;
        }
    }
    CS;
    return val;

结果:
16位为:0000 XXXX XXXX XXXX XXX0(最后一位恒0,也就算了,据说是实际精度的问题。)
电位器由0至890欧姆左右时,数据由4094至0,
电位器过890欧姆左右时,数据由至0突变为2048,
阻值继续调大,数据继续慢慢慢慢下降,(当数据为1024时,对阻值的变化变得很不敏感)最后至512不动。

连日头昏,有低级错误的话,就当逗个乐。已经不知道自己姓什么了,哪位大爷救救兄弟啊!
先作个揖!



ldyeah 发表于 2007-11-26 12:54 | 显示全部楼层

程序倒数第二行CS???

 楼主| harvest000 发表于 2007-11-26 12:55 | 显示全部楼层

回楼上的话

CS=1;
笔误!对不住,下次不敢了!
木头东瓜 发表于 2007-11-26 12:59 | 显示全部楼层

活不下去了就跳楼去

动辄求救、寻短见,有点骨气好么
hotpower 发表于 2007-11-26 13:02 | 显示全部楼层

哈哈~~~if (result >= 2048) {result^= 0xfff;result++;}

if (result >= 2048)//符号位,0x800 
{
  result^= 0xfff;
  result++;
}
hotpower 发表于 2007-11-26 13:03 | 显示全部楼层

哈哈~~~0跳到-1很正常呀~~~忘记收"费用"了~~~

 楼主| harvest000 发表于 2007-11-26 13:04 | 显示全部楼层

4楼批评的是

现改为:
    哪位高人愿予指点,在下这厢有礼了!
    有喘气儿的没?
 楼主| harvest000 发表于 2007-11-26 13:06 | 显示全部楼层

5楼先谢了,兄弟试试先。

xwj 发表于 2007-11-26 13:11 | 显示全部楼层

跳楼要小心啊,别砸死了楼下的MM啊

hotpower 发表于 2007-11-26 13:11 | 显示全部楼层

光谢是不行的~~~注意菜地公告~~~

hotpower 发表于 2007-11-26 13:13 | 显示全部楼层

所付"费用"~~~见下祥解~~~

gjg191 发表于 2007-11-26 13:14 | 显示全部楼层

dd

乱收费..
hotpower 发表于 2007-11-26 13:16 | 显示全部楼层

买卖公道,童叟无欺,立据为证,空口无凭~~~

gjg191 发表于 2007-11-26 13:19 | 显示全部楼层

dd

人肉买卖!!
 楼主| harvest000 发表于 2007-11-26 13:19 | 显示全部楼层

没问题!

菜地公告:凡菜农答疑正确者借用选美证一次 
凡菜农答疑正确者,应该付给菜农一次性合理的劳务费.
劳务费用很低廉,只需将您在21ic注册的合法ID借用一次.
买卖公道,童叟无欺,立据为证,空口无凭. 


ID给您都成,用户名你知道了,密码怎么给你?
木头东瓜 发表于 2007-11-26 13:21 | 显示全部楼层

菜农别玩了

难道又想掀起一场风波?
gjg191 发表于 2007-11-26 13:23 | 显示全部楼层

dd

谁出风了,冬瓜拿木头砸他
hotpower 发表于 2007-11-26 13:24 | 显示全部楼层

哈哈~~~投到HotPower@163.com

这个问题主要是符号位的问题~~

我用的已知符号位了,所以取了绝对值:

void AdsObj::AdsConvertStop(void)
{
unsigned short result;
//char str[16];
//  while(AdsReadReg(ADS7870_GAINMUX) & ADS7870_GAINMUX_CNVBSY);
  ADSPORTCS->IOCLR = (1 << ADCS);//打开片选信号
  AdsReadWriteByte(ADS7870_REG_READ | ADS7870_REG_16BIT | ADS7870_RESULTHI);
  result = AdsReadWriteByte(0xff) << 0x08;//读转换电压高4/3位
  result |= AdsReadWriteByte(0xff);//读转换电压低8位
  ADSPORTCS->IOSET = (1 << ADCS);//关闭片选信号
  if (result >= 0x8000) {//放电电流
    result ^= 0xfff0;
    result += 0x0010;//划成绝对值.注意这里我有别的处理,所以相当于取反加一~~~
  }
  AdsTestRes[AdsCount] = result;
//  sprintf(str, "AdsTestRes[%1d]=%04X", AdsCount, result);
//  Uart.puts(str);
}
 楼主| harvest000 发表于 2007-11-26 13:33 | 显示全部楼层

回hotpower

密码已发至你邮箱,请查收。
用完能还我么?
程序匠人 发表于 2007-11-26 13:43 | 显示全部楼层

有点玩过火了,小心匠人耍大刀哦

您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

15

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部