This is an old revision of the document!
Published 15 Jan 2019
Mx300 Driver Library
I have a few LCD display panels from Canon printers like the MX300 and MX310 that I wish to use in Arduino projects. These are 2 line by 20 character LCD status displays that have no horizontal gap between the two rows of characters. This suggests possibilities of creating double height characters that look natural. Some of the character sets/fonts implemented here could be used on other 2 line LCD displays, and some rely on the existing inbuilt character set. I have not determined which Hitachi HD44780 compatible LCD controller/driver chip that they use.
I looked for an Arduino library that would display double height characters and found quite a few, I have taken ideas from various fonts/character sets but re-implemented the actual driver code.
I based my library module for this on a standard Arduino library for the Hitachi HD44780 chip, LiquidCrystal.cpp. The programs included here are HelloWorld_mx300.ino, LiquidCrystal_mx300.cpp and LiquidCrystal_mx300.h.
The command set is compatible with the Hitachi HD44780, but I don't know the model of the chip, or even the manufacturer.
The controller is mounted directly on the LCD glass (CoG), and the LCD module has a 14 pin, 0.04” pitch, pcb flex cable. The displays are a two lines of twenty, 5 by 8 pixel, characters with no gap between lines.
I experimented a little, but could not get the modules to display a 5 by 11 character mode. I have no idea whether the modules have inbuilt double height characters, I have no idea of the controller chip they use. I do note that the Canon MX300 printers display double height numeric characters mixed with normal characters - I expect they are using the programmable character set to do this.
As used in the Canon MX300 printer these displays use 3.3V for command and data lines and have a separate 5V line for the LCD power. The interface control lines are standard Hitachi HD44780 compatible, with a choice of connecting either 8 or 4 data lines. For testing I used level converters to connect to a standard 5V Arduino, you could of course just use a 3.3V Arduino board.
There was no contrast adjustment on these modules (it may be a command programmable feature).
The control and data pins can be any available Arduino pins.
As mentioned earlier the library is based on a standard Arduino HD44780 LCD library. Most hardware commands, including programmable characters, seem to be compatible with the Hitachi HD44780. I did find commands for transforming the orientation of the display, you can reflect it horizontally, vertically or both at once (equivalent to a 180 degree rotation) , but I would need to do a lot of experimentation to find all the extended commands.
There are a number of different implementations here, reflecting different approaches :
The drivers still contain the standard Hitachi HD44780 functions, but some are not really applicable to the double height characters. The functions implemented that are specific to these modules and displaying double height characters are:
The autoscroll() function doesn't use the controllers autoscroll feature, but implements it using leftshift commands and will allow you to continue printing and scrolling 65365 characters in a ticker tape display before glitching. Or you can fill the 40 character buffer (about 10 double height alphanumeric characters) and scroll a banner using scrollDisplayLeft() or scrollDisplayRight() as long as you like.
The existing functions that are still there, but may have unwanted side effects when used with double height characters are:
The functions appear to be the same as for the HD44780 but have not been extensively tested for compatibility.
As per earlier drivers I have modified the createChar() routine to switch back to display ram after defining each character to avoid accidentally corrupting the programmable characters (this is a problem from the original LiquidCrystal.h library). In most versions of this driver all programmable characters are in use, so are not available for additional user defined characters.
— Full alpha numeric character sets
This library version has a character set of 96, double height 1 to 4 character wide alpha numeric characters. A space character is also printed between each character so as few as 4, but typically 5 or 6, of these characters fit on the display. All the digits are 3 characters wide, so 5 can fit on the display.
Two different sets of programmable characters are used here to demonstrate two different fonts.
This font uses rounded segments to draw the characters,
based on a font described by digimike on https://forum.arduino.cc/index.php?topic=8882.0
user defined characters for Font1.
The complete alpha-numeric Font1.
Spreadsheet used to design the font.
This font has descenders for the lowercase g, j, p, q, and y.
user defined characters for Font2.
The complete alpha-numeric Font2.
Spreadsheet used to design the font.
The programs (v1.00):
If any referenced page no longer exists, try looking for its URL on http://archive.org.