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.
Hi friends,
This is the first time am doing I2C so kindly help ,or suggest me.from few days am searching the forum to find related problem and solution I have gone through few threads all are having almost same problems but still i didn't find the solution
Controller:MSP430G2553
Aim:For now i just want to see start ,address in scope,program is I2C MasterTx Code (TI sample code)
problem:always SCL,SDA lines are high,UCBBUSY is set.
MSP-EXP430G2,launch pad for programming the controller,and am checking in debug mode
am attaching sample code
/* --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--*/ //****************************************************************************** // MSP430G2xx3 Demo - USCI_B0 I2C Master TX single 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 continuously // transmits 00h, 01h, ..., 0ffh and demonstrates how to implement an I2C // master transmitter sending a single byte using the USCI_B0 TX interrupt. // ACLK = n/a, MCLK = SMCLK = BRCLK = default DCO = ~1.2MHz // // *** to be used with "msp430g2xx3_uscib0_i2c_07.c" *** // // /|\ /|\ // MSP430G2xx3 10k 10k MSP430G2xx3 // slave | | master // ----------------- | | ----------------- // -|XIN P1.7/UCB0SDA|<-|---+->|P1.7/UCB0SDA XIN|- // | | | | | // -|XOUT | | | XOUT|- // | P1.6/UCB0SCL|<-+----->|P1.6/UCB0SCL | // | | | | // // D. Dang // Texas Instruments Inc. // February 2011 // Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10 //****************************************************************************** #include <msp430.h> unsigned char TXData; unsigned char TXByteCtr; int main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1SEL |= BIT6 + BIT7; // Assign I2C pins to USCI_B0 P1SEL2|= BIT6 + BIT7; // 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 IE2 |= UCB0TXIE; // Enable TX interrupt TXData = 0x00; // Holds TX data while (1) { TXByteCtr = 1; // Load TX byte counter while (UCB0CTL1 & UCTXSTP); // Ensure stop condition got sent UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX, start condition __bis_SR_register(CPUOFF + GIE); // Enter LPM0 w/ interrupts // Remain in LPM0 until all data // is TX'd TXData++; // Increment data byte } } //------------------------------------------------------------------------------ // 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. //------------------------------------------------------------------------------ #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector = USCIAB0TX_VECTOR __interrupt void USCIAB0TX_ISR(void) #elif defined(__GNUC__) void __attribute__ ((interrupt(USCIAB0TX_VECTOR))) USCIAB0TX_ISR (void) #else #error Compiler not supported! #endif { if (TXByteCtr) // Check TX byte counter { UCB0TXBUF = TXData; // Load TX buffer TXByteCtr--; // Decrement TX byte counter } else { UCB0CTL1 |= UCTXSTP; // I2C stop condition IFG2 &= ~UCB0TXIFG; // Clear USCI_B0 TX int flag __bic_SR_register_on_exit(CPUOFF); // Exit LPM0 } }
i have tried all suggestions in the previous threads related to the problem but didnt find any solution.
whoever has faced this same problem and solved it later.kindly suggest me how that problem has solved.
Thank you in advance
Hi Ryan,
Thank you for the reply
Yes am using 10k resistors,but hardware is different ,am not using slave ,i just want to ensure i2c is working so i want to observe start and address in the scope ,my actual project is DRV10983 which requires i2c communication to write into registers ,but it is not working so i came to basic and trying to sort it. Pl find the attachment.,sch.tif
Thank you
Hey Shruthi,
I replicated the setup using a Launchpad where both 1.6 (SCL) and 1.7 (SDA) are pulled up to Vcc with a 10k resistor each. I also removed the P1.6 jumper that connected the pin to LED2. There is no slave device connected. The attached image shows my i2c lines operating properly, the purple signal is SCL and blue is SDA.
Hope this helps,
Ryan
Hi Ryan,
Thanks for that
But am not testing it on launch pad,could you pl suggest what might be the problem.
Thank you in advance.
yeah i have kept capacitor between VCC to GND near MSP430 (forgot to mention in the schematic) but only 104pf
Hi Ryan,
Thank you very much,i got the output.it is working perfectly with the sample provided by TI ,i think i have done some mistake in my pcb,there is no problem with controller ,even with 104pf it is working ,i should have found out it earlier it consumed lot of time :-( ,anyway thanks a lot for the response.
regards,shruthi
**Attention** This is a public forum