Skip to content

HD44780: Can't understand how CreateCharacter works #618

Open
@qk7b

Description

@qk7b

Hello there,

Thanks for this awesome library, I have a project for using an HD44780 LCD display with my pico and it fits perfectly.

For the need of my project, I need to display 4 custom characters to the first 2x2 LCD matrix

So (0,0), (1,0), (0,1) and (1,1).

I've defined my custom characters to be like this

lcd.CreateCharacter(0x0, []byte{0x00, 0x07, 0x07, 0x18, 0x18, 0x18, 0x18, 0x19})
lcd.CreateCharacter(0x1, []byte{0x00, 0x1C, 0x1C, 0x03, 0x03, 0x0F, 0x0F, 0x13})
lcd.CreateCharacter(0x2, []byte{0x19, 0x1E, 0x1E, 0x18, 0x18, 0x07, 0x07, 0x00})
lcd.CreateCharacter(0x3, []byte{0x13, 0x03, 0x03, 0x03, 0x03, 0x1C, 0x1C, 0x00})

and I print them doing

lcd.SetCursor(0, 0)
lcd.Write([]byte{0x0})
lcd.Display()

lcd.SetCursor(1, 0)
lcd.Write([]byte{0x1})
lcd.Display()

lcd.SetCursor(0, 1)
lcd.Write([]byte{0x2})
lcd.Display()

lcd.SetCursor(1, 1)
lcd.Write([]byte{0x3})
lcd.Display()

And when I run it, it show some weird stuff, like all the "custom" chars are merged or something.

I can't figure how it is possible, it seems like when I try to add offset to custom chars the result changes...

I think I might does not understand how it works.

Note that If i do

lcd.CreateCharacter(0x0, []byte{0x00, 0x07, 0x07, 0x18, 0x18, 0x18, 0x18, 0x19})
lcd.Write([]byte{0x0})
lcd.Display()

it works fine.

But using this (so the exact same character but in 0x1 memory place)

lcd.CreateCharacter(0x1, []byte{0x00, 0x07, 0x07, 0x18, 0x18, 0x18, 0x18, 0x19})
lcd.Write([]byte{0x1})
lcd.Display()

then the character is broken...

If anyone could explain to me how it's meant to be used it will be very nice 🙏

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions