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.

[参考译文] ADS1220:为数据采集配置ADS1220和MSP430F2013

Guru**** 2387400 points
Other Parts Discussed in Thread: ADS1220, MSP430F2013
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1098684/ads1220-configuring-ads1220-and-msp430f2013-for-data-acquisition

部件号:ADS1220
主题中讨论的其他部件: MSP430F2013

大家好,

我代表我们的客户发布此信息。 下面是:

我计划做以下工作:

1.使用应变仪测量3个桥接电路,并在差分模式下使用2个ADS1220按顺序采样。

2.我需要从ADS1220记录数据,因此我必须将MSP430F2013用于SPI。

现在,通过研究,我无法找到   https://www.ti.com/lit/zip/sbac227以外的ADS1220示例。 这些都不是那么有帮助。

尝试部分配置MSP430F2013后,我开始收到错误  

错误#1.0234万-D:仍存在未解析的符号
错误#1.001万:链接时发生错误;未生成"ads1220.out
gmake [1]:***[ads1220.ut]错误1
gmake:***[All]错误2
请注意,我以前已成功配置了MSP430F2013的CCS,但现在它不是使用ADS1220代码构建的
#include <MSP430.h>
#include <ADS1220.h>/*
函数声明*/
void Init_startup (void);
void SPIinit(void);
/*全局变量*/
int dflag =0;
静态易失性无符号int ChA2Results =0x00;
int main(void)
{
volatile unsigned int I;

WDTCTL = WDTPW + WDTHOLD; //停止看门狗计时器


USICL0 |= USISWRST;//USI已发布操作
USICL1 &=~USII2C + USIIE;//将USI切换为SPI模式
USICL0 |= USIMST;//设置为SPI-Master-Mode
USICL0 |= USIPE6 + USIPE5 + USIPE5 + USIPE7;/USICIP0

;USICUSICUSICE7


=已启用USICL0;USICUSICUSICUSICUSICUSICUSICE8;USICUSICUSIN=~USICUSICUSICUSICUSICR0 //初始化设备
void ADS1220Init(void); //初始化SPI端口引脚以及控制
void ADS1220Config(void); //为ADS1x20器件
ADS1220SetChannel (ADS1220_MUX_0_1),
ADS1220SetGain (ADS1220_Gain_32),
Set_mode (ADS1220_MODE_TURBO ),
Set_CM(ADS1220_CC),
Set_VREF(ADS1220_VREF_INT)设置基本配置;
//ADS1220SetDataRate (ADS1220_DR_2000)2000);
Set_DR (110);


同时(1)
{
/*在此处添加用于读取和写入ADS1220的特定命令*/
/* dFlag是在DRDY触发结束时在中断服务例程中设置的
转换*
IF (dflag) /*检查是否有新数据*/
{
ChA2Results = ADS1220ReadData();/*从ADS1220 *获取数据
dflag=0;
}
/*此处可以添加其他例程,如更改mux设置*/
} /*末尾时间(1)*///__bis_sr_register(LPM0_bits




+ GIE);//输入LPM0 w/中断
}




如果有人提供建议,使其发挥作用,将会大有帮助。

e2e.ti.com/.../0358.main.c

此致,

乔纳森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Jonathan:

    首先,如果代码不生成,则不会发生任何事情。  因此,我们需要确定在构建过程中显示为'未定义'的符号。  符号名称应显示在控制台构建窗口中,或显示为错误。  有时,发出Project->Clean将有助于清除旧数据,以便完成Project->Build。

    我看到的一些潜在问题是,有一些已声明的原型不存在,例如:

    • void Init_startup (void);(此原型声明两次) 

    • void SPIinit(void);

    ADS1220.h文件中已存在的原型声明存在其他问题,因此不应再次声明它们:

    • void ADS1220Init(void); //初始化SPI端口引脚和控制 
    • void ADS1220Config(void); //设置ADS1x20器件的基本配置 

    ADS1220初始化和配置例程基于不同的MSP430,因此必须小心地在ADS1220.h文件中正确定义引脚。  MSP430器件之间的不同端口很可能缺少符号定义。  这将位于ADS1220.h文件的顶部:

    /*用于通信的GPIO端口位的定义*/
    /* WFP 1.2 */
    #define ADS1220_CS 0x04
    /* WFP 3.3 */
    #define ADS1220_DIN 0x08
    /* WFP 3.4 */
    #define ADS1220_DOUT 0x10
    /* WFP 2.6 */
    #define ADS1220_DRDY 0x40
    /* WFP 2.7 */
    #define ADS1220_SCLK 0x80

    和ADS1220Init()函数中的定义。  这些定义/声明需要与正在使用的MSP430器件相匹配。  最终,这实际上与ADS1220器件本身无关,而是与MSP430的设置和控制有关。  遗憾的是,示例代码无法涵盖正在使用的微控制器的所有可能性,需要用户进行进一步的交互和设置。

    此致,

    Bob B

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bob,您好!

    我们需要进一步的援助。  

    这是我们的客户问题。  

    "我尝试更改PIN配置,但没有成功,因此我更改为5529启动板,该启动板系列包含5528,示例中提到了这一点,但当我转储代码时,我无法从它中获取任何内容。 你能帮我吗?

    此致,

    乔纳森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Jonathan:

    我担心,不了解编译器和代码项目是如何组合在一起的,这才是真正的问题。  该示例代码是在5529 LaunchPad发布之前的许多年前编写的。  项目文件和使用的编译器很可能有很大不同。

    不清楚的是"我无法从其中得到任何东西"的含义。  外围设备是否设置正确无误。  这需要使用示波器或逻辑分析仪验证通信,从而在代码之外进行某种形式的验证。

    如果代码发送给我,我可以查看代码,看看是否有明显的内容。  但是,我更希望看到有关示波器镜头的沟通。  了解原理图以及ADS1220如何连接到LaunchPad也会很有帮助。  通常,通信问题与相对于SCLK边缘的数据转换阶段相关,或者CS在整个通信事务中没有保持较低的水平。  如果发生多字节通信且CS在字节之间切换,则通信将取消并重置SPI总线。  通常CS由GPIO控制。  我们不知道所有这些设备是如何实际连接的,以及是否使用了LaunchPad的正确外设和引脚。

    我建议客户查看 TI Precision Labs中有关SPI通信的材料。

    此致,

    Bob B

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bob,您好!

    非常感谢您的支持。 我们的客户有 一个回应,这是。  

    感谢您的更新。 我已经阅读了Bob的回答,但能否从德州专家那里获得有关设置ADS1220的另一个示例? 示例SBAC227在命令的详细应用方面较差(很抱歉这么说)。 我的意思是没有提到如何以及在何处设置ADS通道,增益,Dr。 它所说的只是“/*此处添加读取和写入ADS1220的特定命令*/”
    /* dFlag是在DRDY触发结束时在中断服务例程中设置的
    转换*
    如果(dflag)/*检查是否有新数据*/

    tData = ADS1220ReadData();/*从ADS1220 *获取数据
    dFlag=0;
    }
    /*此处可以添加其他例程,如更改mux设置*/"

    最好在此代码中举例说明如何实现ADS1220通道之一。

    同时,我尝试使用数据表,并得出以下代码:(我有用于监控SPI总线的示波器,我可以对其进行初始化

    e2e.ti.com/.../6746.code.txt

    请注意,该代码仅用于检查广告是否已开始采样

    此致,

    乔纳森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Jonathan:

    示例代码是一系列层次结构,包含非常低级的代码和更高级别的代码。  任何示例代码的困难在于低级代码层中的硬件抽象。  ADS1220实际上是第一批示例代码发行版之一,自此之后,我们对示例代码进行了一些改进。  因此,我同意客户的观点,即在当前代码发布中有一些信息不清楚。  我将努力更新此代码,但不会在不久的将来更新。  也就是说,硬件抽象层(HAL)与硬件低级代码相关,并且与所使用的微处理器有着极大的硬件依赖性。   这就是为什么有评论与'在此处添加您的代码'有关,您将在更新的示例中看到类似的内容。

    此外,很难了解和预测最终用户想要做什么。  因此,大多数客户要求的是ADC的头文件以及使用头文件数据与设备通信的高级函数。

    我建议首先编写一个客户想要实现的目标的伪代码描述。  这与9.1 节中的数据表中所示类似。

    接下来,确定如何将伪代码传输到'C'代码。  这需要对微的低级功能以及ADS1220的高级功能有所了解。

    更改ADS1220配置的最基本方法是通过寄存器写入,它使用指向内存空间的指针。  该示例代码还分解了执行特定任务的功能,如设置输入多路复用通道(ADS1220SetChannel)或设置PGA增益(ADS1220SetGain),但是如果您不小心,这些特定任务可能会覆盖以前的设置。  因此,通常建议使用具有所需功能的写寄存器设置,而不是使用'set'配置。  

    该过程将首先设置基本配置,然后在'while (同时)'循环中根据需要进行更改。  这些更改可能包括更改mux频道。  作为另一个示例,您可以执行以下命令:

    UINT8_t data[4]={0,0,0,0,0;//通过寄存器写入最多可以写入四个寄存器

    DATA[0]=  ADS1220_DR_1000 |1000 | ADS1220_MODE_Turbo |  ADS1220_CC;//要写入ADS1220的第一个数据位置

    ADS1220WriteRegister (ADS1220_1_register,0x01,&data);//写入寄存器1,一个寄存器,其内容由数据指向

    而不是"ADS1220WriteRegister (0x01,0x01,0xD4);"

    在 'while’循环之前,您需要发送启动/同步命令(“ADS1220SendStartCommand”)以实际开始进行转换,否则ADS1220将在低功耗状态下处于空闲状态。  在显示的当前循环中 ,有一个指令到“ADS1220ReadData()”,该命令返回转换数据,然后将其写入RX缓冲区,这是没有意义的。  对于此函数,您需要将“结果”声明为32位整数,并存储从读取到变量的转换数据返回的值:

    Int32_t结果;

    结果= ADS1220ReadData();

    但是,您需要知道转换完成的时间(假定已发出start/sync命令),可以通过监视DRDY,DOUT/DRDY或使用计时器来完成转换。  我没有看到使用这些方法中的任何一种,而只是重复使用函数命令来读取数据。

    此致,  

    Bob B