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.

CCS/MSP-EXP430F5529: MSP-EXP430F5529

Part Number: MSP-EXP430F5529

Tool/software: Code Composer Studio


Hello everyone ,
i am trying to use I2C protocol to read temperature and pressure values in MPL3115A2 sensor (actually i am not familiar with I2C protocol it's my first time of using it)
i searched in msp430f5529 code examples i find the following code
and i opened MPL3115A2 sensor datasheet i noticed it has


high resolution of 24 bit ADC
calibrated temperature : -40 to 85 C (12 bit)
calibrated pressure : 50 to 110 kpa (20 bit)


do i need more information about the sensor???
and please help me how to start writing my code
any help would be appreciated

  •  * 
     *                       MSP430 CODE EXAMPLE DISCLAIMER
     *
     * MSP430 code examples are self-contained low-level programs that typically
     * demonstrate a single peripheral function or device feature in a highly
     * concise manner. For this the code may rely on the device's power-on default
     * register values and settings such as the clock configuration and care must
     * be taken when combining code from several examples to avoid potential side
     * effects. Also see www.ti.com/grace for a GUI- and www.ti.com/msp430ware
     * for an API functional library-approach to peripheral configuration.
     *
     * --/COPYRIGHT--*/
    //******************************************************************************
    //  MSP430F552x Demo - USCI_B0 I2C Master TX multiple bytes to MSP430 Slave
    //
    //  Description: This demo connects two MSP430's via the I2C bus. The master
    //  transmits to the slave. This is the MASTER CODE. It cntinuously
    //  transmits an array of data and demonstrates how to implement an I2C
    //  master transmitter sending multiple bytes using the USCI_B0 TX interrupt.
    //  ACLK = n/a, MCLK = SMCLK = BRCLK = default DCO = ~1.045MHz
    //
    // ***to be used with "MSP430F55xx_uscib0_i2c_09.c" ***
    //
    //                                /|\  /|\
    //                MSP430F5529     10k  10k      MSP430F5529
    //                   slave         |    |         master
    //             -----------------   |    |   -----------------
    //           -|XIN  P3.0/UCB0SDA|<-|----+->|P3.0/UCB0SDA  XIN|-
    //            |                 |  |       |                 |
    //           -|XOUT             |  |       |             XOUT|-
    //            |     P3.1/UCB0SCL|<-+------>|P3.1/UCB0SCL     |
    //            |                 |          |                 |
    //
    //   Bhargavi Nisarga
    //   Texas Instruments Inc.
    //   April 2009
    //   Built with CCSv4 and IAR Embedded Workbench Version: 4.21
    //******************************************************************************
    
    #include <msp430.h>
    
    unsigned char *PTxData;                     // Pointer to TX data
    unsigned char TXByteCtr;
    
    const unsigned char TxData[] =              // Table of data to transmit
    {
      0x11,
      0x22,
      0x33,
      0x44,
      0x55
    };
    
    int main(void)
    {
      unsigned int i;
    
      WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
      P3SEL |= 0x03;                            // Assign I2C pins to USCI_B0
      UCB0CTL1 |= UCSWRST;                      // Enable SW reset
      UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC;     // I2C Master, synchronous mode
      UCB0CTL1 = UCSSEL_2 + UCSWRST;            // Use SMCLK, keep SW reset
      UCB0BR0 = 12;                             // fSCL = SMCLK/12 = ~100kHz
      UCB0BR1 = 0;
      UCB0I2CSA = 0x48;                         // Slave Address is 048h
      UCB0CTL1 &= ~UCSWRST;                     // Clear SW reset, resume operation
      UCB0IE |= UCTXIE;                         // Enable TX interrupt
    
      while (1)
      {
        for(i=0;i<10;i++);                      // Delay required between transaction
        PTxData = (unsigned char *)TxData;      // TX array start address
                                                // Place breakpoint here to see each
                                                // transmit operation.
        TXByteCtr = sizeof TxData;              // Load TX byte counter
    
        UCB0CTL1 |= UCTR + UCTXSTT;             // I2C TX, start condition
        
        __bis_SR_register(LPM0_bits + GIE);     // Enter LPM0, enable interrupts
        __no_operation();                       // Remain in LPM0 until all data
                                                // is TX'd
        while (UCB0CTL1 & UCTXSTP);             // Ensure stop condition got sent
      }
    }
    
    //------------------------------------------------------------------------------
    // The USCIAB0TX_ISR is structured such that it can be used to transmit any
    // number of bytes by pre-loading TXByteCtr with the byte count. Also, TXData
    // points to the next byte to transmit.
    //------------------------------------------------------------------------------
    #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
    #pragma vector = USCI_B0_VECTOR
    __interrupt void USCI_B0_ISR(void)
    #elif defined(__GNUC__)
    void __attribute__ ((interrupt(USCI_B0_VECTOR))) USCI_B0_ISR (void)
    #else
    #error Compiler not supported!
    #endif
    {
      switch(__even_in_range(UCB0IV,12))
      {
      case  0: break;                           // Vector  0: No interrupts
      case  2: break;                           // Vector  2: ALIFG
      case  4: break;                           // Vector  4: NACKIFG
      case  6: break;                           // Vector  6: STTIFG
      case  8: break;                           // Vector  8: STPIFG
      case 10: break;                           // Vector 10: RXIFG
      case 12:                                  // Vector 12: TXIFG  
        if (TXByteCtr)                          // Check TX byte counter
        {
          UCB0TXBUF = *PTxData++;               // Load TX buffer
          TXByteCtr--;                          // Decrement TX byte counter
        }
        else
        {
          UCB0CTL1 |= UCTXSTP;                  // I2C stop condition
          UCB0IFG &= ~UCTXIFG;                  // Clear USCI_B0 TX int flag
          __bic_SR_register_on_exit(LPM0_bits); // Exit LPM0
        }  
      default: break;
      }
    }
    
    
    

  • Hi Beso,

    The sensor datasheet should provide information on how to write commands/data to configure the sensor and how to read the data from sensor.

    In some cases the sensor may power up and you can just start reading data, in which case you (the MSP430 I2C master) will need to know how many data bytes to read.  And you might want to look at one of the other code examples showing the master only reading bytes from the slave.

    You will need to know the sensor's I2C hardware address and modify  UCB0I2CSA = 0x??

    I would strongly suggest you read about the MSP430 EUSCI_I2C module too, just so you have a general idea on how the I2C works.

    It will be very helpful if you have either an oscilloscope or logic probe that will allow you to monitor the I2C lines between the MSP430 and the sensor.  And don't forget you will need pull up resistors on both the SCL and SDA lines.  2k - 4.7k is usually fine.

  • Hello Beso,

    I haven’t heard from you for a couple of days now, so I’m assuming you were able to resolve your issue.
    If this isn’t the case, please click the "This did NOT resolve my issue" button and reply to this thread with more information.
    If this thread locks, please click the "Ask a related question" button and in the new thread describe the current status of your issue and any additional details you may have to assist us in helping to solve your issues.

**Attention** This is a public forum