大家好、
我正在使用 I2C 将 ADS1115与 Nuvoton N76E003连接。
我使用的是 ADC 通道 A0和5V 电源电压。
我已将 ADS1115的 ADDR 引脚连接到 GND。
当我通过主器件提供地址0x48时、它会给出0x20即主机发送地址 NACK 作为应答。
我被困在这里。 请找到我的附件代码并建议解决方案。
#define EEPROM_SLA 0x48
#defineEEPROM_WR 0
#define EEPROM_RD 1
#define SET_BIT3 0x08
#define SET_BIT4 0x10
#define P13_OpenDrain_ModeP1M1|=SET_BIT3;P1M2|=SET_BIT3
#define P14_OpenDrain_ModeP1M1|=SET_BIT4;P1M2|=SET_BIT4
#define I2C_ACK
1 #define I2C_NACK 1
#define TIMEOUT_START
I2C_START (
ADS1115)(void I2C_START);void I2C_START)(void I2C_START)(ADS1115)(void I2C (void I2C)(void I2C)(void I2C)(void I
void I2C_Master_Write (unsigned char value);
unsigned int I2C_Master_read (unsigned short a);
void main ()
{
//modify_HIRC_166 ();
//----------- I/O 定义--------------------------------------------------------
//P1M1 = 0x80;//对于正常程序
//--- 函数调用-------------------------------------------------------
init_I2C ();
I2C_start();
ADS1115_config();
ADS1115_read();
I2C_stop();
while (1)
{
}
}//-----------------
用于显示的 I2C 通信-------------------------------------------------------
void init_I2C (void)
{
P13_OpenDrain_Mode;
P14_OpenDrain_Mode;
SDA = 1;
SCL = 1;
I2CPX=0; //SCL= P1.3、SDA=P1.4
I2CEN = 1;
I2CLK=42;// 16MHz 时钟的400KBPS
}
//____________ ADS1115配置和数据块_________________________ //
void I2C_start (void)
{
signed int t = timeout_count;
STA = 1;
Si = 0;
}
void I2C_stop (void)
{
signed int t = timeout_count;
SI = 0;
STO = 1;
}
void ADS1115_config ()
{
I2DAT =(EEPROM_SLA | EEPROM_WR);
IF (I2STAT = 0x18)
{
LED = 1;
}
I2C_Master_Write (0x01);//命令到配置寄存器0x01
I2C_Master_Write (0x80);// PGA:+-6.144V、I2C_Master_Write (0x83)、非
锁存、默认值、0xA0、非锁存模式、I2C_CONDIM (0x80)。 ALERT/RDY0x83
}
void I2C_Master_Write (unsigned char value)
{
I2DAT = value;//将数据写入 SSPBUF
}
void ADS1115_read ()
{
unsigned int datah;
unsigned int datal;
//float data;
I2C_Master_Write (0x90);// 0x90
I2C_Master_Write (0x00);//0x00
I2C_Master_Write (0x91);/0x91
datah = I2C_Master_Read (1);
datal = I2C_Master_Read (0);
}
unsigned int I2C_Master_Read (unsigned char ack_mode)
{
signed int t = timeout_count;
unsigned char 值= 0x00;
I2DAT =(EEPROM_SLA |= EEPROM =
1);t = rd_timeout;t = rd = 1;t = rd_rd
Si = 0;
while ((SI = 0)&&(t>0)
{
t-;
};
value = I2DAT;
if (ack_mode = I2C_NACK)
{
t = TIMEOUT_COUNT;
AA = 0;
SI = 0;
while (SI = 0)&&(t>0))
{
t-;
};
}
return value;
}









