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.

[参考译文] msp430fr4133:ads1231接口与msp430fr4133

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/635377/msp430fr4133-ads1231-interface-with-msp430fr4133

部件号:MSP430FR4133
在“线程”中讨论的其他部件:ADS1231,, ADS1231REFENERGIA

您好,

 我 想使用SPI通信将ads1231连接到msp430r4133。 我正在为此编写代码:-

包括"msp430fr4133.h"
#include "stdbool.h"
内部SPI (无效)

unsigned int data2, data3, signExtension;
长int数据a1;
INT符号;
bool dataComplete =假;

P5SEL0 || BIT1 |BIT3;//将2-SPI引脚设置为第二个功能

P5DIR |= 0x01;


UCB0CTLW0|= UCSWRST;//**将状态机置于复位**
UCB0CTLW0 |= UCMST|UCSYNC|UCCKPL|UCMSB;// 3引脚,8位SPI主控制器
//时钟极性高,MSB
UCB0CTLW0 |= UCSSEL__SMCLK;//选择SMCLK
UCB0BR0 = 0x01;///2,fBitClock = fBRCLK/(UCBRx+1)。
UCB0BR1 = 0;//
// UCA0MCTLW = 0;//无调制
UCB0CTLW0 &=~UCSWRST;//**初始化USCI状态机**
UCB0IE |= UCRXIE;//启用USI_A0 RX中断

PM5CTL0 &=~LCKLPM5;//禁用GPIO开机默认高阻抗模式
//以激活先前配置的端口设置


/*每次DRDY处于低电平时,MSP430都应在此循环中进行。 这意味着它需要获得24位的数据,然后DRDY应该再次高。 它将一直保持高位,直到
ADS已准备好发送更多数据。*/
同时(1)

IF( dataComplete){//代码应在第25 SCLK处进入循环,然后停止SCLK
UCB0CTL1 &=~UCSWRST;//停止串行时钟
dataComplete =假;
}

IF (!P5IN)

UCB0CTL1 &=~UCSWRST;//*初始化USCI状态机*
UCB0TXBUF = 0x00;//虚拟写入以启动SPI
UCB0TXBUF = 0x00;
同时(!(UCB0IFG和UCRXIFG);// USI_B0 TX缓冲器准备就绪?
Data1 = UCB0RXBUF;// R15 = 00|MSB
符号= data1 >>7;
如果(sign = 1)

signExtension=1111.1111万;
}
否则

signExtension=0万;
}
信号扩展<24;
Data1 = data1 <16;
同时(!(UCB0IFG和UCRXIFG);// USI_B0 TX缓冲器准备就绪?
Data2 = UCB0RXBUF;
Data2=data2<8;
同时(!(UCB0IFG和UCRXIFG);// USI_B0 TX缓冲器准备就绪?
Data3 = UCB0RXBUF;
Data1 = data1 + data2 + data3 + signExtension;// r14 = 00|lsb
dataComplete = true;//确保它只通过进入IF语句一次就停止SCLK一次

}
}
}

我的代码是否正确? 为什么使用符号扩展功能??

请您通过电子邮件向我发送msp430fr4133的ADS1231REF接口的代码。   

我的电子邮件:pathak.sayali58@gmail.com

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

    根据ADS1231数据表,SCLK极性应较低(已清除UCCKPL),并且在第二个边缘捕获数据(已清除UCCKPH),您无需设置UCRXIE,因为您不使用中断,但SPI初始化看起来合适。 您从哪里获取代码? 您需要为要从从属设备接收的每个字节发送一个伪字节。 Precision数据转换器论坛可以评论符号扩展功能和其他特定于ADC的问题。 下面是一些可能有用的Energia参考:

    www.emergingtechs.org/.../load-cell-interfacing-using-ads1231-and.html
    www.ti.com/.../slyc144

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

    您好,
    我引用了“ADS1231 SPI代码的精密数据转换论坛帮助”中的代码。
    ADS1231和MSP430FR4133之间的连接:-
    DRDY'/DOUT连接到了WFP 5.3 和WFP 5.5 ,SCK-WFP 5.1 ,PDWN-WFP 2.1 ,SPEED 2.0

    1)是否需要通过软件停止和启动SCLK?
    2)调试后,代码为WFP 5.5 (DRDY' pin)的状态在寄存器中显示1。为什么???数据表显示,DRDY变为低电平时会接收数据。
    根据论坛,我对代码进行了一些更改:-
    long int data1,data2,data4;

    P5SEL0 || BIT1 |BIT3;//将2-SPI引脚设置为第二个功能
    P2DIR || BIT0 | BIT1;
    P2OUT ||~BIT0;//低速10SPS
    UCB0CTLW0|= UCSWRST;//**将状态机置于复位**
    UCB0CTLW0 |= UCMST|UCSYNC|UCMSB;// 3引脚,8位SPI主控
    //时钟极性高,MSB
    UCB0CTLW0 |= UCSSEL__SMCLK;//选择SMCLK
    UCB0BR0 = 0x01;///2,fBitClock = fBRCLK/(UCBRx+1)。
    UCB0BR1 = 0;//
    UCB0CTLW0 &=~UCSWRST;//**初始化USCI状态机**
    P2OUT |= BIT1;//PDWN' PIN高
    P5DIR&=~0x20;//


    while (!(P5IN&0x20));//检查DRDY引脚是否过低(WFP 5.5)

    UCB0CTL1 &=~UCSWRST;//*初始化USCI状态机*
    UCB0TXBUF = 0x00;//虚拟写入以启动SPI
    UCB0TXBUF = 0x00;

    同时(!(UCB0IFG和UCRXIFG);// USI_B0 TX缓冲器准备就绪?
    Data1 = UCB0RXBUF;// R15 = 00|MSB
    Data1 = data1 <16;
    UCB0TXBUF = 0x00;
    同时(!(UCB0IFG和UCRXIFG));
    Data2 = UCB0RXBUF;
    Data2=data2<8;
    Data4 = data1 + data2;// r14 = 00|lsb
    }
    我给出了代码,请检查代码是否正确。如果您需要修改,请更正。
    当我调试代码时,data1变量中存储的值是0x00FF00FF??
    请告诉我有关编程的流程图?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正如我之前所说的,精确数据转换器论坛可以对ADS1231特定的问题进行评论。 听起来您还有关于此特定主题的特定E2E线程,可能涉及的人员能够为您提供进一步的指导。 您应该使用示波器或逻辑分析器来确认SPI序列是否正确以及ADC是否正在发送有效数据。 XBUF是一个字节长度,因此我希望您将data1偏移8,而不是根本移动data2,因此,当将它们相加时,它们将提供存储在data4中的16位值。

    此致,
    Ryan