Is there a HD44780 compatible 16 x2 OLED out there?

I am looking to replace the bog standard inefficient low contrast poor viewing angle 16 x 2 character LCD with one of the more power efficient and higher contrast OLED modules out there. It seems none of the manufacturers of them have got the idea to make one which will swap out directly for some reason, or has someone done it? I am not sure why but they changed things just enough to make them not work with the "standard". I heard of the NKC one but that doesn't work I am told.

I am no code guru so modifying display libraries is out of my reach.

Is there one somewhere that will "just work" in place of the HD44780 LCD in 4 bit mode? Has anyone taken on the task of making a library that will make these work? It would be worth while since these OLEDs are better in almost every way than the LCDs out there.

I am fighting with a Winstar WEH001602A, should be compatible with HD44780 ---- but not 100%, the characters show up on the display, but there is a mismatch with the lines, if you find another OLED display, or knows what to do with the WEH001602A, please post :-)

Rgds Lars

… but there is a mismatch with the lines

Please elaborate on this. What are you trying to display and what is actually being displayed?


I've got a similar problem.

I found out if I use the LiquidCrystal library, then line 0 should be swapped with line 1, line 1 with 0. Also 2 with 3, and 3 with 2!

However this sometimes works, not all the time!

Whereas the manufacturer's say it is HD44780 compatible! Why is that?

Just using the simple "hello, world!" example. If I make no changes to the program, the "hello, world!" at line 0, ends up at line 1, and somtimes I miss the first character, somtimes the 2 first. The seconds counter is at line 0 instead of line 1. This works, and I always gets all the characters: // set up the LCD's number of columns and rows: lcd.begin(16, 2); lcd.setCursor(0, 1); // This is line 0 on OLED // Print a message to the LCD. lcd.print("hello, world!"); }

void loop() { // set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): lcd.setCursor(0, 0); // This is line 1 on OLED // print the number of seconds since reset: lcd.print(millis()/1000);

I have tried using the example "Autoscroll" as well, it makes weird things, like a long delay before restarting, and of course the line thing.

@Larsen, Same situation with the "confused line numbers" and other annoyances with that display. I first described them here.

Some observations that may help: - For me, the problem 'almost only' happens on reset. If the display is powered down, it's almost always OK. - lcd.clear() often doesn't reset the cursor to 0,0. (Made a clear function that adds that.) - FWIW, the LiquidCrystal_I2C lib runs that display without the mods needed for 4 bit in the LiquidCrystal lib.

Too bad! Other than that it's a great display - bright and sharp. It's the only character based OLED I know of. The graphic OLED displays I've seen require a software character set, which is fine if you have the memory and a decent sized set.

If I wait approx. 0.5 - 1.0 second before I start to write to the display, it seems to work ok. Lines are no longer swapped.

void setup() { delay(1000); // wait for display