完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
求助ADS1118数据转换器 1、在以前的有关该芯片的帖子中,看到说,ALN0与ALN1做输入时,只能测量1V以下的直流电压,请问是这样吗? 2、看芯片手册上说ADS1118写入数据是下降沿有效,而读数据是上升沿有效。但是看以前的帖子中有说,读写数据都是下降沿有效,请问哪种是对的。 3、我现在送入配置字是,0X858A,2.048=fs,ALN0与ALN1做输入,单次转换开启。但是读回来的数据,一直就是某个数据,不管给多少电压都是这个值,,而且一直在变化,转化后大约是0.8V左右,好像读回来一直都是这个值。但是送入的配置字不同,读回来的数据不同。读回来的寄存器的值每次也不一样。 4、关于VCC的问题,3中读回来的的数据,当芯片给3.3的电压时,和芯片给5V电压表 的数据有很大的差别。但是,不管给什么模拟输入电压,读回来的数据没有什变化。 5、在送入配置字后,延时,再判断DOUT输出低电平则说明数据准备好可以读取。但是,在程序中加入该检测语句后,程序会一直卡在这里。但是,用一个延时语句,直接延时,这样可以读OUT的值。不知道为什么Dout不会有低电平出现,一直是高电平。 6、有关ADS1118的SPI时序的读写时序如下,不知道该程序,请帮忙看一下。 1)void SPI_Write_byte(uchar data) { uchar i=0; for(i=0;i<8;i++) { SPI_delay_us(); //SPI_delay_us(); if(data&0x80) SPI_SIMO_HIGH; else SPI_SIMO_LOW; SPI_CLK_HIGH; SPI_delay_us(); SPI_CLK_LOW; //发送数据 data=data<<1; } } 2) uchar SPI_Rec_byte() //经测试,上、下降沿都可以接收数据 { uchar i=0; uchar Temp=0; for(i=0;i<8;i++) { Temp=Temp<<1; //向左移位,这句需放在前面 SPI_CLK_HIGH; SPI_delay_us(); SPI_CLK_LOW; //接收数据 if(SPI_SOMI_IN) //先收高位 Temp |=BIT0; //置1 else Temp&=~BIT0; //可省略,默认就是0 SPI_delay_us(); } return Temp; } 测试过该时序基本没什么问题,但是所有的问题,都似乎说明是时序问题。 |
|
相关推荐
3个回答
|
|
|
现在也在写1118的驱动,同求解。
|
|
|
|
|
|
我以前写的驱动。。希望对你有帮助。
#include "msp430x54xA.h" void ADS1118_GPIO_Init(void) { P1OUT |= 0x02; // Set P1.1 for CS P1DIR |= 0x02; // Set P1.1 to output direction P3SEL |= 0x80; // P3.7 option select P5SEL |= 0x30; // P5.4,5 option select P5DIR |= 0x01; // Set P5.0 to output direction } void ADS1118_SPI_Init(void) { UCB1CTL1 |= UCSWRST; // **Put state machine in reset** UCB1CTL0 |= UCMST+UCSYNC+UCMSB; // 3-pin, 8-bit SPI master // Clock polarity high, MSB UCB1CTL1 |= UCSSEL_2; // SMCLK UCB1BR0 = 0x05; // /2 UCB1BR1 = 0; // UCB1CTL1 &= ~UCSWRST; // **Initialize USCI state machine** __delay_cycles(100); // Wait for slave to initialize } void ADS1118_ADS_Config(signed int temp_config_value) { signed int Config_Value; Config_Value = temp_config_value; P1OUT &=~ 0x02; // Set CS low __delay_cycles(100); // Wait for slave to initialize ADS1118_WriteSPI(Config_Value,0); // Write configuration to ADS1118 __delay_cycles(100); // Wait for slave to initialize P1OUT |= 0x02; // Set CS high } int ADS1118_ADS_Read(void) { unsigned int Data, Config_Value; Config_Value = 0; P1OUT &=~ 0x02; // Set CS low Data = ADS1118_WriteSPI(Config_Value,1); // Read data from ADS1118 P1OUT |= 0x02; // Set CS high return Data; } /* * Mode 0: Only write config register to ADS1118 * Mode 1: Write config register to ADS1118 as well as read data from ADS1118 */ signed int ADS1118_WriteSPI(unsigned int config, unsigned char mode) { signed int msb; unsigned int temp; signed int dummy; temp = config; if (mode==1) temp = 0; while(!(UCB1IFG&UCTXIFG)); UCB1TXBUF = (temp >> 8 ); // Write MSB of Config while(!(UCB1IFG&UCRXIFG)); msb = UCB1RXBUF; // Read MSB of Data while(!(UCB1IFG&UCTXIFG)); UCB1TXBUF = (temp & 0xff); // Write LSB of Config while(!(UCB1IFG&UCRXIFG)); msb = (msb << 8) | UCB1RXBUF; // Read LSB of Data while(!(UCB1IFG&UCTXIFG)); UCB1TXBUF = (temp >> 8 ); // Write MSB of Config while(!(UCB1IFG&UCRXIFG)); dummy = UCB1RXBUF; // Read MSB of Config while(!(UCB1IFG&UCTXIFG)); UCB1TXBUF= (temp & 0xff); // Write LSB of Config while(!(UCB1IFG&UCRXIFG)); dummy = (dummy <<8) | UCB1RXBUF; // Read LSB of Config __delay_cycles(100); return msb; } void main(void) { volatile int ADC_Result; float Voltage_ch1; WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer ADS1118_GPIO_Init(); ADS1118_SPI_Init(); //ADS_Config(); while(1) { ADS1118_ADS_Config(0xC3E3); //Only Select AIN1,860SPS,+-4.096V scan voltage range; ADC_Result = ADS1118_ADS_Read(); // Read data from ch1,the last time result Voltage_ch2 = ADC_Result*1.0/32768*4.096; __delay_cycles(10000); } } |
|
|
|
|
|
关于您提到的ADS1118数据转换器的疑问,我将逐一为您解答:
1. 关于ALN0与ALN1做输入时,只能测量1V以下的直流电压的问题: 这个说法并不完全准确。ADS1118是一款16位的模数转换器(ADC),其最大输入电压范围取决于您使用的增益设置。在默认的增益设置下(增益1),最大输入电压范围为±6.144V。如果您将增益设置为4(最大增益),最大输入电压范围将变为±0.256V。因此,ALN0与ALN1作为输入时,可以测量的电压范围取决于您设置的增益值。 2. 关于ADS1118写入数据是下降沿有效,而读数据是上升沿有效的问题: 根据ADS1118的数据手册,写入数据确实是在下降沿有效,而读数据是在上升沿有效。您提到的帖子中的说法可能是有误的。请参考官方数据手册以获取准确的信息。 3. 关于您送入配置字0X858A,2.048V=fs,ALN0与ALN1做输入,单次转换开启的问题: 您提供的配置字0X858A表示: - 增益设置为1(±6.144V) - 数据速率为128SPS(样本/秒) - 单次转换模式 - ALN0与ALN1作为输入 您提到读回来的数据一直是一个固定值,这可能是由于以下原因: a. 硬件连接问题:请检查您的硬件连接是否正确,包括电源、地线、数据线等。 b. 配置字设置问题:请确保您使用的配置字是正确的。您可以尝试使用不同的配置字,例如改变增益设置或数据速率,看看是否能够解决问题。 c. 代码问题:请检查您的代码是否正确地初始化了ADS1118,并正确地读取数据。 如果问题仍然存在,您可以尝试以下步骤: - 重新检查硬件连接和配置字设置。 - 使用示波器或万用表检查输入信号是否正常。 - 尝试使用不同的代码库或示例代码,以排除代码问题。 希望以上解答能够帮助您解决问题。如果还有其他疑问,请随时提问。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
549 浏览 0 评论
1613 浏览 0 评论
2047 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1513 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1337 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1756浏览 29评论
2781浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1724浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1634浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1645浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 01:26 , Processed in 0.577465 second(s), Total 46, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2965