主题中讨论的其他部件:MSP430F2132,, TIDA-0.0018万, MSP-TS430PW28,
工具/软件:Code Composer Studio
大家好,
我想知道如何将ADS1220与MSP430F2132配合使用来读取温度。
我使用示例代码TIDA-0.0018万,我尝试写入ADS寄存器并读回。
我看不到我的注册数据。
这里有我的代码。
感谢您的帮助,
Anaelle
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
大家好,
我想知道如何将ADS1220与MSP430F2132配合使用来读取温度。
我使用示例代码TIDA-0.0018万,我尝试写入ADS寄存器并读回。
我看不到我的注册数据。
这里有我的代码。
感谢您的帮助,
Anaelle
您好Anaelle:
欢迎参加论坛! 我认为代码中的任何内容对我来说都不是问题,除非您应确保重置和通信之间的延迟足够长。 这将在ADS1220数据表的8.5 .3.1 一节中讨论。 因此,我要在ADS1220_Reset和寄存器配置写入之间添加一些延迟。
一个良好的故障排除做法是使用示波器或逻辑分析仪验证您与ADS1220之间的通信(涉及CS,SCLK,DIN和DOUT)。 这将有助于确保您的功能按所需工作,并且外围设备已正确设置。 很遗憾,如果没有原理图,我无法帮助您验证外围设备的代码。
此致,
Bob B
感谢Bob回复我,
对于此项目,我将ADS1220EVM用于ADS1220模块,将MSP-TS430PW28用于MSP430F2132。 我将UCB0SPI连接到ADS1220。
你好,我的代码有效。 我找不到合适的地方
但是 ,在检查我的读/写寄存器后,我想测量我的内部温度传感器。
我在中断模式下使用DRDY引脚来指示新转换数据的可用性。 但我从他那里得不到任何东西。
让我们看看我的代码。
此致,
Anaelle
您好Anaelle:
您是否已使用示波器/逻辑分析仪检查您的通信 ,以验证 您的通信是否正常? 您还应该能够探测DRDY信号,并在发送启动命令后验证DRDY信号是否处于活动状态。 您是否已经完成了此操作,或者您是否仅依赖您的代码/调试器? 我很好奇,想知道您是如何根据代码中的while循环确定DRDY不工作的。 一旦将ReadConversionData设置为高,则不会再次将其设置为低,并且它将忽略任何进一步的中断触发器。
此致,
Bob B
您好Anaelle:
感谢您的更新。 仅就SPI接口而言,摩托罗拉建立的原始标准设置了一系列时钟极性和相位,在这些极性和相位中数据被更改或锁定。 使用这种标准记法,ADS1220使用的模式是模式1,其中时钟停留在较低的位置,并在SCLK的上升沿上变化,保持在下降沿上。 根据本公约,CPOL =0,CPHA =1。
但是,MSP430 SPI外设使用不同的方法,相位实际上与原始定义相反。 因此,在使用MSP430器件时,您必须非常小心,确保您实际遵循正确的相位。 MSP430术语是CKPL和CKPH。 TKPH与原始Motorola定义中使用的描述相反。 据我所知,MSP430是唯一使用 反相定义的微外设。
此致,
Bob B
Bob,您好!
我现在了解更多了:)
我有其他问题,我想计算这一点:
mesure =|Vsens (AIN1–AIN2)|/ Vref (AIN0-AIN3)
如何恢复AIN0-AIN3和AIN1-AIN2的结果?
我这样做,当我观看我的VOUT数据时,值每次都改变,我没有得到我的2V
int msb;
int data;
int lsb;
volatile unsigned char ReadConversionData =0;
unsigned int lpm_bits;
static volatile unsigned tempchar Data[3];
volatile long ADS1220代码;
long int bit24,bit32;
float VOUT;
void main (void)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
__disable_interrupt ();
config_clock ();
PortsInit ();
//配置SPI组件
Setup_SPI_Master ();
__enable_interrupt ();
//重置ADS1220
ADS1220_Reset();
__Delay_Cycles (CPT_CLK);
同时(1)
{
//为张力参考配置ADS1220
SETUP_ADS1220 (ADS1220_MUX_AIN0_AIN3,ADS1220_GANGE_1,ADS1220_USE_PGA,
ADS1220_DATA_RATE_600SPS,ADS1220_OP_MODE_NORMAL,ADS1220_TRANSION_SINGLE_Shot,ADS1220_TEMP_SENSOR_OFF,ADS1220_burn_out电流关闭,
ADS1220_FIR_NONE,ADS1220_VREF_INTERNAL,ADS1220_LOW_SIDE_POWER_CLOSE,ADS1220_IDAC_CURRENT_OFF,
ADS1220_IDAC1_disabled,ADS1220_IDAC2_disabled,ADS1220_DRDY_ON_DRDY_ON);
__DELAY_CYCLES (CPU_CLK/10);
ReadConversionData = 0;
ADS1220_Start ();
while (!ReadConversionData);//等待数据就绪中断
ADS1220_Get_Conversion_Data((unsigned char *)tempdata);
MSB=tempdate[0];
Data=tempdate[1];
LSB = tempdate[2];
位24=MSB; //将3个字节转换为24位int
bit24=(bit24<8)|数据;
bit24=(bit24<8)|LSB;
bit24=(bit24<<8);
bit32=(bit24>>8);//将24位二的补码转换为32位二的补码
VOUT=bit32;
LED_pout || LED_GREG_BIT;
}
}
感谢您的帮助,
Anaelle
您好Anaelle:
我不确定您打算衡量什么。 从您的绘图和代码中,您尝试仅测量AIN0和AIN3。 由于这是单端输入(参考AVSS),您需要禁用并绕过PGA。 这应有助于获得更稳定的读数。 但是,测量结果会产生噪音,您的电压源可能会产生噪音。 返回的值将是与引用相关的代码数,您使用的是内部引用2.048V。 计算结果显示在数据表第35页的第8.5 2节中。
关于噪音,您可以轻松地从转换器中看到1000个或更多的代码变化。 请参阅数据表第17页上的表3和表4。
现在,您的代码将重复向ADS1220寄存器写入相同的信息,开始转换并读取结果。 您需要更改mux以读取另一组输入,重新开始转换,然后读取新结果。
此致,
Bob B