HD-C0216CIZ-FSW-FBW-3V3 requires bit banging????

Comments

2 comments

  • zDispUser

    I believe I figured it out. Posting my findings to hopefully save someone else from the headache I just went through. The problem here is an inconsistency in I2C addressing.

    The example I posted, as well as as the datasheet for the display state that the slave address is 0x7C. Normally, an I2C slave address is only 7-bits, and then an 8th Read/Write bit is appended to the end (1 for read, 0 for write). However, when looking carefully at the example and the datasheet, the slave address is actually 8 bits and includes the read/write bit within it.

    Standard I2C libraries, when starting communication, will accept a 7-bit address, then bit shift left by 1 position, then append the Read/Write bit. So when using the "Wire.h" library in Arduino, when I call Wire.beginTransmission(0x7C), what ends up actually happening is the library starts by sending 0xF8 out on to the bus. (If I sent a Wire.requestFrom(0x7C, 3), it would start by sending 0xF9 onto the bus cause it appends a 1-read bit at the end).

    So in short, in order to get standard I2C libraries to use this display, the actual slave that should be used is 0x3E. When I modiefied the non-working example above to instead use

    const char Slave = 0x3E;
    , it began working the same as the working example.

    Though I do have a caveat to add. It seems that the SDO line must be kept low in order to actually display the characters. Otherwise you just get black boxes. I can work around this, but it's just an additional annoyance to deal with.
     
    0
  • Ted M.
    NHD Staff

    Thanks for posting your solution as it may assist others with a similar issue.

    Best Regards,

    0

Please sign in to leave a comment.