Other Parts Discussed in Thread: MSP430F2013
Hi Team,
I am posting this in behalf of our customer. Here it is below:
I am planning to do following:
1. Measure 3 bridge circuit with strain gauge and using 2 ADS1220 in differntial mode for sampling sequentially.
2. I need to record data from the ADS1220 hence I have to use MSP430f2013 to with SPI.
Now from research, I couldn't find examples of ADS1220 other than https://www.ti.com/lit/zip/sbac227. Which were not so helpful.
After trying to configure MSP430f2013 partially I started to get the error of
#include <msp430.h> #include <ADS1220.h> /* Function declarations */ void Init_StartUp(void); void SPIinit(void); /* Global variable */ int dflag = 0; static volatile unsigned int ChA2results = 0x00; int main(void) { volatile unsigned int i; WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer USICTL0 |= USISWRST; //USI released for operation USICTL1 &= ~USII2C + USIIE; //switch USI to SPI-Mode USICTL0 |= USIMST; //set to SPI-Master-Mode USICTL0 |= USIPE6 + USIPE5 + USIPE7; //SDO-Port enabled; Pin8 USICTL0 |= USIOE; //activate output USICTL0 &= ~USISWRST; USICKCTL = USISSEL_2; void Init_StartUp(void); // Initialize device void ADS1220Init(void); // Initializes the SPI port pins as well as control void ADS1220Config(void); // Set base configuration for ADS1x20 device 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); set_DR(110); while(1) { /* Add specifc command for reading and writing ADS1220 here */ /* dFlag is set in the interrupt service routine when DRDY triggers end of conversion */ if (dflag) /* check if new data is available */ { ChA2results = ADS1220ReadData(); /* get the data from the ADS1220 */ dflag=0; } /* other routines could be added here, such as change the mux setting */ } /* end of while(1) */ // __bis_SR_register(LPM0_bits + GIE); // Enter LPM0 w/ interrupt }
It would be great help if someone provided with suggestion to make this work.
/* --COPYRIGHT--,BSD_EX * Copyright (c) 2012, Texas Instruments Incorporated * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of Texas Instruments Incorporated nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ******************************************************************************* * * 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--*/ //****************************************************************************** // MSP430F20x2/3 Demo - SPI full-Duplex 3-wire Master // // Description: SPI Master communicates full-duplex with SPI Slave using // 3-wire mode. The level on P1.4 is TX'ed and RX'ed to P1.0. // Master will pulse slave reset for synch start. // ACLK = n/a, MCLK = SMCLK = Default DCO // // Slave Master // MSP430F20x2/3 MSP430F20x2/3 // ----------------- ----------------- // | XIN|- /|\| XIN|- // | | | | | // | XOUT|- --|RST XOUT|- // | | /|\ | | // | RST/NMI|--+<----|P1.2 | // LED <-|P1.0 | | P1.4|<- // ->|P1.4 | | P1.0|-> LED // | SDI/P1.7|<-------|P1.6/SDO | // | SDO/P1.6|------->|P1.7/SDI | // | SCLK/P1.5|<-------|P1.5/SCLK | // // M. Buccini / L. Westlund // Texas Instruments Inc. // October 2005 // Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.40A //****************************************************************************** #include <msp430.h> #include <ADS1220.h> /* Function declarations */ void Init_StartUp(void); void SPIinit(void); /* Global variable */ int dflag = 0; static volatile unsigned int ChA2results = 0x00; int main(void) { volatile unsigned int i; WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer USICTL0 |= USISWRST; //USI released for operation USICTL1 &= ~USII2C + USIIE; //switch USI to SPI-Mode USICTL0 |= USIMST; //set to SPI-Master-Mode USICTL0 |= USIPE6 + USIPE5 + USIPE7; //SDO-Port enabled; Pin8 USICTL0 |= USIOE; //activate output USICTL0 &= ~USISWRST; USICKCTL = USISSEL_2; void Init_StartUp(void); // Initialize device void ADS1220Init(void); // Initializes the SPI port pins as well as control void ADS1220Config(void); // Set base configuration for ADS1x20 device 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); set_DR(110); while(1) { /* Add specifc command for reading and writing ADS1220 here */ /* dFlag is set in the interrupt service routine when DRDY triggers end of conversion */ if (dflag) /* check if new data is available */ { ChA2results = ADS1220ReadData(); /* get the data from the ADS1220 */ dflag=0; } /* other routines could be added here, such as change the mux setting */ } /* end of while(1) */ // __bis_SR_register(LPM0_bits + GIE); // Enter LPM0 w/ interrupt }
Best regards,
Jonathan