This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Bug in MCB2300 Blinky Example

I have found a bug inside the LCD_4bit.c source file:

void set_cursor (unsigned char column, unsigned char line)
{

unsigned char address;

address = (line * 40) + column;

address = 0x80 + (address & 0x7F);

lcd_write_cmd(address); /* Set DDRAM address counter to 0 */

}

--> address = (line * 0x40) + column; // the offset of 40 does not make sense

I am a little bit confused, that it still works with 40 as factor for set_curor(0, 1).

Greetings Oliver

  • I am a little bit confused...

    What about? You mention both 40 and 0x40. Which is it?

    I would expect a value of 40. This is because the data sheet for the LCD controller internally maintains a 40 column display, regardless of the physical one actually fitted.

  • What about? You mention both 40 and 0x40. Which is it?

    0x40 is the right value. The second line begins at 0xC0 = 0x80 + 0x40 not at 0xA8 = 0x80 + 40.

    I'm confused about the fact, that both addresses are working for the coordinates (0,1).

    An offset of 40 is definitely wrong, because for HD44780-compatible displays the second line begins at Address 0xC0.

    Greetings Oliver

  • 0x40 is the right value.

    Yes. After re-examining the datasheet, I would agree with that.

    It's a common mistake to take the examples too seriously though.

    I really can't, especially when I see this is the same blinky example (just after a call to set_cursor):

      for (i = 0; i < 20000000; i++);       /* Wait for initial display           */
    

    Ouch.