After getting my LCD05 to work, I emailed Devantech support. And they shed some light on the i2c address situation.Apparently it is very simple, Arduino ignores the lowest bit in the i2c address, so my device's address is 0xC6, which in binary is 11000110. However, if you ignore the lowest bit, it becomes 1100011, which is 0x63.I am going to suggest that they put this bit of critical information into the documentation, cause for n00bs like myself, this took forever to figure out.
It would be better if they (Devantech) were to learn more about I2C addressing and use the correct terminology.I2C addresses are only seven bits long so when correctly padded out to fit in an 8-bit byte the high bit will always be 0. As a result there are no I2C addresses larger than 0x7F.In use the 7-bit I2C address is shifted to the left and the resulting available bit at the right is used to determine the direction of data flow. A zero indicates a 'write' and a one indicates a 'read'.In your case the I2C address of the device is 0b01100011 or 0x63. When it is operating as a slave device and you are writing to it then the shifted slave address for writing is 0b11000110 or 0xC6. When it is operating as a slave device and you are reading from it then its slave address for reading is 0b11000111 or 0x0xC7.Since the direction of data travel is determined by the software it should be the software that does the shifting and filling in of the least significant bit. In my opinion the writer of the software library should always have the user supply the actual unshifted 7-bit I2C address.It seems to me that the manufacturers of the I2C devices have conspired to make this address almost impossible to find in their datasheets - but that is a different problem.Don
Please enter a valid email to subscribe
We need to confirm your email address.
To complete the subscription, please click the link in the
email we just sent you.
Thank you for subscribing!
via Egeo 16