I2C TLC59108 NACK

Im trying to use an Arduino with a TLC59108 and I endTransmission keeps returning a 2, meaning no Acknowledgment. I have tried sending my hardware address as well as the Call All Address, non of them will give me an ACK back. Is something off with the timing possibly?

#include <Wire.h>

void setup(){
  
  Serial.begin(9600); 
  Wire.begin();  //Join the I2C bus as a master
}


void loop(){

Wire.beginTransmission(0x90);  //CALLADDR
int x = Wire.endTransmission();  //End Transmission and get returned vale
Serial.println(x);

  delay(1000);
}
Wire.beginTransmission(0x90);  //CALLADDR

The highest valid address is 119 (0x77). You need to shift your address right one (eg. 0x48).

Try running the I2C scanner on this page to confirm the device is correctly connected:

http://www.gammon.com.au/i2c

Thanks Nick! That worked.

Out of curiosity, could you either explain, or point me to a place which explains how this works? I cant understand shifting works if the address is completely different.

My link above more or less explains it. The Wire library expects the address without the read/write bit (the library adds that).

For example, if the address was 0x20, I2C expects the device to send:

0x40 to write ((0x20 >> 1) + 0)
0x41 to read  ((0x20 >> 1) + 1)

The specifications for the device should make it clear if they have already shifted the address or not.

I cant understand shifting works if the address is completely different.

0x90 shifted right one is 0x48. It isn't completely different. In decimal they are 144 and 72. One is half the other.