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.

[参考译文] MSP430G2553:LSM6DS33

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1187133/msp430g2553-lsm6ds33

器件型号:MSP430G2553
主题中讨论的其他器件: TMP100

请提供将 LSM6DS33与我的 MSP430G2553连接的代码。 我没有足够的备份来进行同样的操作

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

    您好、Jayakrishnan、

    据我所知、 我们没有专门针对 MSPM0G2553和 LSM6DS33的任何官方示例、但似乎可以通过 I2C 或 SPI 来控制器件。

    我们有一个将 MSP430G2553与 TMP100搭配使用的示例、网址 为:https://dev.ti.com/tirex/explore/node?node=A__ALJ6CcSCZehPN6QX8ONibw__msp430ware__IOGqZri__LATEST

    以及此处的标准 I2C 控制器示例: https://dev.ti.com/tirex/explore/node?node=A__ADwdOVnX-fmCfnKgw9hv7Q__msp430ware__IOGqZri__LATEST

    如果要使用 SPI、您将在 dev.ti.com 上的同一目录中找到 SPI 标准控制器示例。

    这些示例中的任何一个都可以修改、并用于发送和接收来自 LSM6DS33的数据。  

    此致、
    Brandon Fisher

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

    您知道、LSM 就像 MSP430的鬼魂。 我没有得到任何样本来查看它。 请提供一些相关资源。

    至少一些用于从 LSM 接收和传输数据的代码将会执行此操作

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

    #include <msp430g2553.h>
    
    unsigned char RX_Data[6];
    unsigned char TX_Data[2];
    unsigned char RX_ByteCtr;
    unsigned char TX_ByteCtr;
    
    int xAccel;
    int yAccel;
    int zAccel;
    
    unsigned char slaveAddress = 0x6A;
    
    const unsigned char CTRL9_XL = 0x38; // Accelerometer X, Y, Z axes enabled
    const unsigned char CTRL1_XL = 0x60; // Accelerometer = 416Hz (High-Performance mode)
    const unsigned char INT1_CTRL = 0x01; // Accelerometer Data Ready interrupt on INT1
    
    void i2c_start(void);
    void i2c_write(unsigned char);
    void i2c_read(unsigned char);
    
    
    int main(void)
    {
    	WDTCTL = WDTPW | WDTHOLD; // Stopping WDT
    	/*---------------------*/
    	UCB0CTL0 |= UCSSEL_3; // chooses SMCLK
    	UCB0RW = 10; // sets prescalar = 10
    
    	UCB0CTL0 |= ucmode_3; // puts into I2C mode
    	UCB0CTL0 |= UCMST; // puts into master mode
    	UCB0CTL0 &= ~UCTR; // puts into RX mode (read)
    	UCB0I2CSA = 0X6A; // slave address
    
    	UCBOCTL1 = UCASTP_2
    
    	// Set clock speed (default = 1 MHz)
    	BCSCTL1 = CALBC1_1MHZ; // Basic Clock System CTL (1,8,12 16_MHZ available)
    	DCOCTL = CALDCO_1MHZ; // Digitally-Controlled Oscillator CTL
    
    	// Setting I2C pins
    	P1SEL |= BIT6 + BIT7; // Assign I2C pins to USCI_B0
    	P1SEL2|= BIT6 + BIT7; // Assign I2C pins to USCI_B0
    
    	// Initialize the I2C state machine
    	i2c_start();
    
    	while (1)
    	{
    		slaveAddress = 0x6A; // slave address
    		TX_Data[0] = ;
    		TX_ByteCtr = 1;
    		i2c_write(slaveAddress);
    
    		// Read the two bytes of data and store them in zAccel
    		slaveAddress = 0x6A; // address
    		RX_ByteCtr = 6;
    		i2c_read(slaveAddress);
    		xAccel = RX_Data[5] << 8; // MSB
    		xAccel |= RX_Data[4]; // LSB
    		yAccel = RX_Data[3] << 8; // MSB
    		yAccel |= RX_Data[2]; // LSB
    		zAccel = RX_Data[1] << 8; // MSB
    		zAccel |= RX_Data[0]; // LSB
    
    	//print data
    
    	__no_operation(); // Set breakpoint >>here<< and read
    
    	}
    
    }
    
    void i2c_start(void)
    {
    	// set up I2C module
    	UCB0CTL1 |= UCSWRST; // Enable SW reset
    	UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode
    	UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW reset
    	UCB0BR0 = 10; // fSCL = SMCLK/40 = ~400kHz
    	UCB0BR1 = 0;
    	UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation
    }
    
    void i2c_write(unsigned char slaveAddress)
    {
    	__disable_interrupt();
    	UCB0I2CSA = slaveAddress; // Load slave address
    	IE2 |= UCB0TXIE; // Enable TX interrupt
    	while(UCB0CTL1 & UCTXSTP); // Ensure stop condition sent
    	UCB0CTL1 |= UCTR + UCTXSTT; // TX mode and START condition
    	__bis_SR_register(CPUOFF + GIE); // sleep until UCB0TXIFG is set ...	
    }
    
    void i2c_read(unsigned char address)
    {
    	__disable_interrupt();
    	UCB0I2CSA = address; // Load slave address
    	IE2 |= UCB0RXIE; // Enable RX interrupt
    	while(UCB0CTL1 & UCTXSTP); // Ensure stop condition sent
    	UCB0CTL1 &= ~UCTR; // RX mode
    	UCB0CTL1 |= UCTXSTT; // Start Condition
    	__bis_SR_register(CPUOFF + GIE); // sleep until UCB0RXIFG is set ...
    }
    
    /***********************************************************************************/
    // USCIAB0TX_ISR
    #pragma vector = USCIAB0TX_VECTOR
    __interrupt void USCIAB0TX_ISR(void)
    {
    	if(UCB0CTL1 & UCTR) // TX mode (UCTR == 1)
    	{
    		if (TX_ByteCtr) // TRUE if more bytes remain
    		{
    			TX_ByteCtr--; // Decrement TX byte counter
    			UCB0TXBUF = TX_Data[TX_ByteCtr]; // Load TX buffer
    		}
    		else // no more bytes to send
    		{
    			UCB0CTL1 |= UCTXSTP; // I2C stop condition
    			IFG2 &= ~UCB0TXIFG; // Clear USCI_B0 TX int flag
    			__bic_SR_register_on_exit(CPUOFF); // Exit LPM0
    		}
    	}
    	else // (UCTR == 0) // RX mode
    	{
    		RX_ByteCtr--; // Decrement RX byte counter
    		if (RX_ByteCtr) // RxByteCtr != 0
    		{
    			RX_Data[RX_ByteCtr] = UCB0RXBUF; // Get received byte
    			if (RX_ByteCtr == 1) // Only one byte left?
    				UCB0CTL1 |= UCTXSTP; // Generate I2C stop condition
    		}
    		else // RxByteCtr == 0
    		{
    			RX_Data[RX_ByteCtr] = UCB0RXBUF; // Get final received byte
    			__bic_SR_register_on_exit(CPUOFF); // Exit LPM0
    		}
    	}
    }

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

    我通过集成多个片段来实现了这一点。 应该增加什么,应该避免什么? 请完成我的代码

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

    您好、Jayakrishnan、

    缩小此处可能出现的故障症状的范围会更容易。 您是否构建了此代码并使用 LSM 器件进行了试用? 您是否遇到任何构建错误? 运行代码时、您是否看到任何流量?  

    我确实注意到第51行不完整: TX_Data[0]=;

    此致、
    Brandon Fisher

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

    请注意、我刚刚开始进行此编程、我不知道如何正确使用此代码。 我需要使用 lsm6ds33从 MSP430g2553中获取加速计值、我认为我已经完成了75%以上的工作。 请帮助我完成代码。

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

    您好、Jayakrishnan、

    第一步是将其放入 MSP430G2553的 CCS 项目中、可以是独立的 Code Composer Studio (https://www.ti.com/tool/CCSTUDIO)或基于云的 Code Composer Studio 工具(dev.ti.com/ide)。  

    如果您完全不熟悉 I2C、还可以查看我们的 MSP430 I2C Academy: https://dev.ti.com/tirex/explore/node?node=A__AN8bTD5cSL1aI5MBrThs3A__com.ti.MSP430_ACADEMY__bo90bso__LATEST

    此致、
    Brandon Fisher