hello everybody,
I am interfacing ADS1115 with Nuvoton N76E003 using I2C.
I am using adc channel A0 and 5V suppy voltage.
I have connected ADDR pin of ADS1115 to GND.
When I am giving address 0x48 through master it gives 0x20 i.e.Master Transmit Address NACK as a reply.
so I am stuck here. Please find my attached code and suggest solution.
#define EEPROM_SLA 0x48 #define EEPROM_WR 0 #define EEPROM_RD 1 #define SET_BIT3 0x08 #define SET_BIT4 0x10 #define P13_OpenDrain_Mode P1M1|=SET_BIT3;P1M2|=SET_BIT3 #define P14_OpenDrain_Mode P1M1|=SET_BIT4;P1M2|=SET_BIT4 #define I2C_ACK 0 #define I2C_NACK 1 #define timeout_count 1000 void INIT_I2C(void); void ADS1115_config(); void ADS1115_read(); void I2C_start(); void I2C_stop(); void I2C_Master_Write(unsigned char value); unsigned int I2C_Master_Read(unsigned short a); void main() { //MODIFY_HIRC_166(); //---------------------I/O DEFINATION----------------------------- //P1M1 = 0X80; //FOR NORMAL PROGRAM //----------------------FUNCTION CALLS---------------------------- INIT_I2C(); I2C_start(); ADS1115_config(); ADS1115_read(); I2C_stop(); while(1) { } } //----------------------------------I2C COMMUNICATION FOR DISPLAY-------------------------- 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; // 400KBPS FOR 16MHZ CLOCK } //_________________________ADS1115 CONFIG AND DATA BLOCK_______________________// 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);//Command to config registers 0x01 I2C_Master_Write(0x80);//PGA: +-6.144V, Inputs: default (A0), continuous conv. mode 0x80 I2C_Master_Write(0x83);//128 SPS, Traditional comparator, active low, nonlatching, dis. ALERT/RDY 0x83 } void I2C_Master_Write(unsigned char value) { I2DAT = value; //Write data to 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 value = 0x00; I2DAT = (EEPROM_SLA | EEPROM_RD); t = timeout_count; AA = 1; 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; }