ADS1248神人用过?SPI接口,读写寄存器均能成功,为何读取AD值不行
用的是Atmega32的内部SPI操作,读写寄存器都能成功,为何就是读取24Bit的结果时,却不行
//************读取D转换结果*************
void ReadADConv(uint8_t Channel,uint8_t* ADVaule)
{
CLRCS;
SendCMD(RDATA);
ADVaule=SPISendReadByte(0xff); //程序在此死住了
ADVaule=SPISendReadByte(0xff);
ADVaule=SPISendReadByte(0xff);
SETCS;
} 死在那里感觉和SPI配置或程序有关系吧,和那个ad应该没啥关系. 你是用的CVAVR?是用的编译器自带的SPI函数?SPI(0)是读
另外请上传你的电路图 回复【1楼】lichee 小松鼠
-----------------------------------------------------------------------
SPI的程序原来用来操作过TMP121,所以应该没有问题,并且我又看了一遍配置程序
读写ADS1248的寄存器是正常的
http://cache.amobbs.com/bbs_upload782111/files_50/ourdev_712578GEY92R.jpg
(原文件名:2.jpg)
我用的时AVRSTUDIO+WINAVR
http://cache.amobbs.com/bbs_upload782111/files_50/ourdev_712579CZE5SW.jpg
(原文件名:3.jpg)
http://cache.amobbs.com/bbs_upload782111/files_50/ourdev_712580CKIXNN.jpg
(原文件名:4.jpg) ADS1248的DRDY引脚始终是低电平,
DRDY引脚应该是AD转换完成之后的变成低电平的 如果连续读会出现问题,解决的办法是分次读取,来保证读取不出问题 嗯~那就是死在那个SPIsendreadbyte函数的那个while等标志位里面了
那个标志位应该是SPI控制器在发送完后自动置位的,除非是从模式~感觉主模式和外部没啥关系.
看看SPI的初始化.
另外为啥你的sendcmd函数就可以执行通过,那个函数和sendreadbyte有啥区别? 这样子试试
我操作是直接读数据,不用发命令,就OK
回复【楼主位】qjs412_51
用的是atmega32的内部spi操作,
读写寄存器都能成功,为何就是读取24bit的结果时,却不行
//************读取d转换结果*************
void readadconv(uint8_t channel,uint8_t* advaule)
{
clrcs;
//sendcmd(rdata);
advaule=spisendreadbyte(0xff); //程序在此死住了
advaule=spisendreadbyte(0xff);
advaule=spisendreadbyte(0xff);
setcs;
}
----------------------------------------------------------------------- 回复【5楼】electricit
-----------------------------------------------------------------------
单次读取和多次读取都不行
回复【6楼】lichee 小松鼠
-----------------------------------------------------------------------
#define SendCMD(i) SPISendReadByte(i)
两个函数一样,呵呵
就是死在了那个while等标志位里面了,一直在研究ADS1248的手册,也看了一下AVR的SPI的相关设置
确实没发现问题,哎 回复【7楼】size327948964
-----------------------------------------------------------------------
OK,我试试
另外,转换启动引脚START一直是置高的,没什么问题吧? 对 就是这样子
回复【9楼】qjs412_51
回复【7楼】size327948964
-----------------------------------------------------------------------
ok,我试试
另外,转换启动引脚start一直是置高的,没什么问题吧?
----------------------------------------------------------------------- 回复【10楼】size327948964
-----------------------------------------------------------------------
直接读还是不行,还是死在那里了 uint8_t spisendreadbyte(void)
{
SPDR = 0xFF;
while(!(SPSR & 0x80));
return SPDR;
} 你在什么情况下读?
应该在DRDY置低以后才能读 回复【13楼】size327948964
-----------------------------------------------------------------------
不知道为什DRDY一直为低, SPSR |= _BV(SPIF);
这个似乎不用吧~以下引自mega32a DS 145页
Alternatively, the SPIF bit is cleared by first reading the
SPI Status Register with SPIF set, then accessing the SPI Data Register (SPDR).
在while那个语句中,SPIF已经被读取过了
只需要那个return一下,SPIF就clear了.
SPSR |= _BV(SPIF);注释掉这一句试试. 回复【15楼】lichee 小松鼠
-----------------------------------------------------------------------
好的,我试试看看 问题已经解决,采用模拟的的SPI模式解决的,幸好SPI比较容易模拟
代码留给需要的人参考
点击此处下载 ourdev_713089CSQG6Z.rar(文件大小:25K) (原文件名:ADS1248_Pro.rar) 谢谢喽 正需要这方面资料 qjs412_51 发表于 2012-1-14 14:12 static/image/common/back.gif
问题已经解决,采用模拟的的SPI模式解决的,幸好SPI比较容易模拟
代码留给需要的人参考
这个芯片用着稳定吗 qjs412_51 发表于 2012-1-14 14:12 static/image/common/back.gif
问题已经解决,采用模拟的的SPI模式解决的,幸好SPI比较容易模拟
代码留给需要的人参考
请问您用这个芯片数据稳定性怎么样,防静电之类的,之前我用的AD7793很差劲不稳定,想换个这个芯片试试 zhcj66 发表于 2013-1-9 16:24 static/image/common/back.gif
请问您用这个芯片数据稳定性怎么样,防静电之类的,之前我用的AD7793很差劲不稳定,想换个这个芯片试试 ...
我当时只是做着试试看,并没有真正用在项目上,稳定性,按照我自己的板子,高15位稳定,低9位数据不可靠,可能和我做的板子有关
至于防静电之类的,说实话,不会测!不过之前用过TI的ads115,16bit(正负量程) 稳定性很不错,精度和稳定性都很好 请问,你读取寄存器的时候,信号输入等引脚是什么状态?悬空,拉低,还是正常输入?我现在连寄存器都不能正确读取,急!!请求帮助{:dizzy:}
qjs412_51 发表于 2012-1-14 14:12 static/image/common/back.gif
问题已经解决,采用模拟的的SPI模式解决的,幸好SPI比较容易模拟
代码留给需要的人参考
为什么用模拟的就解决了,用自带的SPI就不行呢? qjs412_51 发表于 2012-1-14 14:12 static/image/common/back.gif
问题已经解决,采用模拟的的SPI模式解决的,幸好SPI比较容易模拟
代码留给需要的人参考
读写寄存器正常,为什么读数据全为0啊,寄存器需要设置哪些?求解! size327948964 发表于 2012-1-12 15:11 static/image/common/back.gif
这样子试试
我操作是直接读数据,不用发命令,就OK
你好,我在调试ADS1282跟这个AD差不多,我现在读写寄存器可以了,就是数据一直为0,请帮帮我吧,我实在没办法了。。。 请问那个ADS1248,写和读寄存器的那个 Second Command Byte: 0000 nnnn, where nnnn is the number of bytes to read –1 是什么意思,求大神
页:
[1]