TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430G2553 I2C模块读取ADT7410 Chip ID结果不正确

Hi, All !Happy New Year!

在调试MSP430G2553的I2C外设读取ADT7410的CHIP ID时,结果不正确。怀疑是配置错误或配置的顺序不正确。困扰很久了,我需要帮助。

芯片:MSP430G2553

IDE:CCS V7.4

ADT7410是一个2C接口温度传感芯片,同MSP430一样,支持低功耗特性,但在调试期间,我先不考虑能耗优化,先用I2C读取到Chip ID,再做软件设计。ADT7410的设备地址是0x4B,我已经访问到了。Chip ID的寄存器地址是0x0B,Chip ID的是11001XXX(MSB),后三位是芯片版本号,不固定。用我写的代码读取的值是0x0C,也就是说,我读错了。原代码和调试结果如下,请各位工程师帮忙看一眼,看看错在哪了,谢谢!

#include <msp430.h>
#include "msp430g2553.h"
#include "12864_3xian.h"//Function delay1000(DELAY) in this file
#define DELAY  2

void LED2_ON(void);
void LED3_ON(void);
void LED2_OFF(void);
void LED3_OFF(void);

int main(void)
{WDTCTL = WDTPW + WDTHOLD;// Stop Watchdog TimerP1SEL |= BIT6 + BIT7;// Assign I2C pins to USCI_B0P1SEL2|= BIT6 + BIT7;// Assign I2C pins to USCI_B0P3DIR |=BIT2+BIT3;//BIT2 BIT3 is LED on BoardUCB0CTL1 |= UCSWRST;// Enable SW resetUCB0CTL0 = UCMST+UCMODE_3+UCSYNC;// I2C Master, synchronous modeUCB0CTL1 = UCSSEL_2+UCSWRST;// Use SMCLK, keep SW resetUCB0BR0 = 12;// fSCL = SMCLK/12 = ~100kHzUCB0BR1 = 0;UCB0I2CSA = 0x4B;// ADT7410 I2C address is 0x4BUCB0CTL1 &= ~UCSWRST;// Clear SW reset, resume operationunsigned int temp;while (1){UCB0CTL1 |= UCTR;//设置为发送模式delay1000(DELAY);UCB0CTL1 |= UCTXSTT;//先产生起始条件UCB0TXBUF = 0x0B;//再往BUF中写入待发送的数据。ADT7410的Chip ID地址是0x0Bwhile (UCB0CTL1 & UCTXSTT);//数据发送完成后,UCTXSTT会被置0。即等待直到发送完成。UCB0CTL1 |= UCTXSTP;//完成后往总线发送停止条件,结束本次写操作//After write ,blanking LED for easy debugLED2_ON();delay1000(DELAY);LED2_OFF();delay1000(DELAY);UCB0CTL1 &= ~UCTR;//设置为接收模式delay1000(DELAY);UCB0CTL1 |= UCTXSTT;//先产生起始条件while(UCB0CTL1 & UCTXSTT)//等待ADT7410的ACKtemp = UCB0RXBUF;//读取缓冲区UCB0CTL1 |= UCTXSTP;//完成后往总线发送停止条件,结束本次读操作delay1000(DELAY);}
}

void LED2_ON(void)
{P3OUT |=BIT2;
}
void LED3_ON(void)
{P3OUT |=BIT3;
}
void LED2_OFF(void)
{P3OUT &=~BIT2;
}
void LED3_OFF(void)
{P3OUT &=~BIT3;

灰小子:

没用过ADT7410,建议让卖家提供个例程。
ti也有很多iic接口的温度传感器的,楼主可以考虑下
www.ti.com.cn/…/products.html

xyz549040622:

1.加外部上拉了没有。
2.波形放大点,仔细把波形和时序波形对照过去。

gaoyang9992006:

文中提到你的设备地址读取正确,那么后面的这个内容读取错误。
说明单片机的操作是无误的,另外你提到你读取出来的是0x0C,根据你提供的手册说明应该是0xCX.
为了确认你的无误, 你应该再读一下另外一个寄存器0x0A是不是0x05

赞(0)
未经允许不得转载:TI中文支持网 » MSP430G2553 I2C模块读取ADT7410 Chip ID结果不正确
分享到: 更多 (0)