amobbs.com 阿莫电子技术论坛
标题:
求教!ads7841不出数据
[打印本页]
作者:
dddd444412
时间:
2006-10-19 22:45
标题:
求教!ads7841不出数据
我用c写ads7841但始终数据不出,拿示波器看了一下时序,BUSY在控制字写后没有置高,DOUT在控制字写后没变,DOUT只在写控制字的时候有变化,偶尔读出来数据全高,很奇怪啊
作者:
paulw
时间:
2006-12-5 11:38
我也遇到了问题,读出数据不对,跟你的现象不同,我用存储示波器观察,dclk时序正确,先是八个上升沿触发脉冲输入din设置控制字,同时dout有数据输出(疑问??困惑),busy由低变高再补偿一个脉冲,busy由高变低,接着16个下降沿触发脉冲输出dout,结果每次输出结果变化太大,比如参考电压5v,4通道单端输入,在ch0输入0v 输出结果为964或者418或者672等等反正每次输出结果变化太大,各位大虾也帮分析一下。
作者:
paulw
时间:
2006-12-7 10:32
经过几个加班终于搞定了,还的多谢网络的强大,参考了一个国外的博客,源代码(不是针对51单片机的,似乎像是32位芯片)写的很好,整理后为自己所用,不敢独自分享,贡献出来为以后的兄弟们参考,为网络源代码共享添块砖加片瓦,详细如下:
/*******************************************************************************
** 函数原型:unsigned int ADS7841_Read_Data(unsigned char Channel);
** 功 能:SPI总线的A/D ADS7841 驱动程序
** 入口参数:unsigned char Channel 表示选择读取通道
** 出口参数:unsigned int 返回所读取得12位数据。
** 说 明:ADS7841为12位A/D,先对其进行设置:数据位D0---D7,其中D0---D1是
** 设置ADC的功耗模式,D2是模拟输入通道设置,H为4个单通道,L为两个
** 差分输入,D3为mode,当mode(pin)接地时为12位采样方式,接高电平时
** mode为1时8位采集,为0时12位采集,D4---D6为输入通道选择,D7为起始位
** 作 者: 绝鱼 nobody_008@163.com
** 日 期: 2006年11月09日
**-------------------------------------------------------------------------------------------------------
** 修 改 人: 绝鱼 nobody_008@163.com
** 日 期: 2006年11月06日
*******************************************************************************/
unsigned int ADS7841_Read_Data(unsigned char Channel) //Channel=0:CH0;1:CH1;2:CH2;3:CH3;
{
unsigned int ADCResult=0;
unsigned char DataInput=0;
unsigned char i,ADS7841_CHANNEL;
switch (Channel)
{
case 0:ADS7841_CHANNEL=0x10;break;
case 1:ADS7841_CHANNEL=0x50;break;
case 2:ADS7841_CHANNEL=0x20;break;
case 3:ADS7841_CHANNEL=0x60;break;
default:ADS7841_CHANNEL=0x10;break;
}
DataInput=ADS7841_S|ADS7841_CHANNEL|ADS7841_MODE|ADS7841_SGL_DIF|ADS7841_POWER_DOWN;
DCLK=0;
DIN=0;
CS=VALID;
for(i=0; i<8; i++)
{
DIN=DataInput&0x80;
DataInput=DataInput<<1;
DCLK=0;
NOP;
DCLK=1; //模拟SPI串行接口 发送数据
}
NOP;
DCLK=0;
while(BUSY)
{
NOP;
DCLK=1;
NOP;
DCLK=0;
} /*当BUSY脚由高变为低时,则开始数据输出*/
NOP;
for(i=0;i<12;i++)
{
DCLK=1;
ADCResult=(ADCResult<<1)|DOUT; //模拟SPI串行接口 接收数据
DCLK=0;
NOP;
}
for(i=0;i<4;i++)
{
DCLK=1;
NOP;
DCLK=0;
NOP;
}
CS=INVALID;
return ADCResult;
}
作者:
migzan
时间:
2006-12-31 16:39
TO:paulw
你好,我的还是不行,有问题
大多时候总是零,有时候会出现一写数据,但是数据不对
能得到你的帮助吗
我的QQ:251133274
谢谢你了
作者:
FEN_DOU
时间:
2009-5-8 21:50
请问我用51单片机控制ADS7841,那么ADS的时钟信号从哪里取得呢??谢谢!!知道的前辈请指导一下
作者:
jbb0523
时间:
2009-8-22 18:14
这个得顶一下,有空看看,我最近也写了一个,基本调通了。
作者:
叶大鹏
时间:
2012-6-15 20:44
我也遇到了这个问题,忙信号时钟为高电平,请教 啊
作者:
叶大鹏
时间:
2012-6-15 20:57
为什么啊?纠结啊
作者:
chaojikoushuige
时间:
2015-2-8 10:00
我现在还做做ads7841
欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/)
Powered by Discuz! X3.4