小弟我调ADS1115,模拟IIC完美运行,但是想试试G2553的硬件IIC,死活弄不出来,感觉发送地址之后单片机收不到应答信号,想来想去会不会是我外部接了一个上拉电阻的原因,所以特来问问各位使用内部的硬件IIC还需要外接上拉电阻不?接了之后会不会有什么影响
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.
小弟我调ADS1115,模拟IIC完美运行,但是想试试G2553的硬件IIC,死活弄不出来,感觉发送地址之后单片机收不到应答信号,想来想去会不会是我外部接了一个上拉电阻的原因,所以特来问问各位使用内部的硬件IIC还需要外接上拉电阻不?接了之后会不会有什么影响
lingming zhang 说:难受,我边看寄存器边调试,发现产生一个开始信号之后,UCTXSTT这个为就一直是1,表面从机没给应答,不知道怎么回事,从机应该不会出错,毕竟模拟IIC就是这个地址,无奈,希望大家给点意见,感谢!
你是不是用Launchpad调的? Launchpad 上P1.6接着一个LED,你需要把跳帽拔掉
#include <msp430.h>
unsigned char TXData[3]={0x01,0b10000100,0b10000011};
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
TXByteCtr = 1; // Load TX byte counter
__bis_SR_register(GIE); // Enter LPM0 w/ interrupts
while (UCB0CTL1 & UCTXSTP); // Ensure stop condition got sent
UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX, start condition
}
//------------------------------------------------------------------------------
// 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.
//------------------------------------------------------------------------------
#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void)
{
if (TXByteCtr==1) // Check TX byte counter
{
UCB0TXBUF = TXData[0]; // Load TX buffer
UCB0TXBUF = TXData[1]; // Load TX buffer
UCB0TXBUF = TXData[2]; // Load TX buffer
TXByteCtr--;
}
if(TXByteCtr==0)
{
UCB0CTL1 |= UCTXSTP; // I2C stop condition
IFG2 &= ~UCB0TXIFG; // Clear USCI_B0 TX int flag
// __bic_SR_register_on_exit(CPUOFF); // Exit LPM0
}
}