From 007d1af2eb5f647fa3846dce6e4b009e6e8729ab Mon Sep 17 00:00:00 2001 From: wilberforce Date: Sat, 23 Jul 2016 17:22:20 +1200 Subject: [PATCH] Create hd44780.md --- hd44780.md | 3677 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 3677 insertions(+) create mode 100644 hd44780.md diff --git a/hd44780.md b/hd44780.md new file mode 100644 index 0000000..bef9851 --- /dev/null +++ b/hd44780.md @@ -0,0 +1,3677 @@ + +The HD44780 Driver + + +The HD44780 has become the de-facto standard of alphanumeric character displays. +Although the original Hitachi HD44780 is long out of production, its command +set has survived in a variety of (fully or nearly) compatible LCD, VFD and +even OLED displays sold by a broad range of manufacturers all over the world. +To name only a few: KS0066, KS0070, KS0076, LC7985, NT3881, SED1278, ST7066 ... + + + +The command set of these displays, which sometimes are advertised as being +"industry standards compatible", is thus the workhorse of controllers for +displays ranging from 8x1 to 20x4 or 40x2 characters. +There are even displays with larger dimensions sporting two controllers, +one for each half of the display. + + + +The HD44780 driver supports various ways of connecting HD44780 devices +to your system. +Each of these different ways is called a connection type +of the driver. + + + +Depending on the connection type and the display connected, the driver supports +various special features. + + Input keys + Software controllable brightness / backlight + Software controllable contrast + multiple displays / multi-controller displays + + + + +The following table lists the available connection types, sorted by the kind +of connection (parallel port, serial port, USB, I2C, SPI or others). + + + + + HD44780: Connection Types + + + + + + + ConnectionType + Wiring / Display Type + + + + + + Parallel port connection types: + + + 4bit + 4-bit wiring. This is the default. + + + 8bit + 8-bit wiring ("lcdtime" style) + + + winamp + 8-bit wiring ("winamp" style) + + + serialLpt + Serial LPT wiring + + + + Serial (RS-232) connection types: + + + picanlcd + PIC-an-LCD serial device "picanlcd" + + + lcdserializer + LCD serializer "lcdserializer" + + + los-panel + LCD on Serial panel device "los-panel" () + + + vdr-lcd + VDR LCD serial device "vdr-lcd" + + + vdr-wakeup + VDR-Wakeup module "vdr-wakeup" + + + + USB connection types: + + + pertelian + Pertelian X2040 LCD display () + + + lis2 + LIS2 from VLSystem () + + + mplay + MPlay Blast from VLSystem () + + + usblcd + USBLCD adapter from Adams IT Services () + + + bwctusb + BWCT USB device "bwctusb" () + + + lcd2usb + Till Harbaum's LCD2USB () + + + usbtiny + Dick Streefland's USBtiny () + + + uss720 + Belkin USS-720 USB-to-IEEE 1284 Bridge (Belkin F5U002) + + + USB-4-all + The USB-4-all controller board from Sprut () + + + ftdi + Display connected to a FTDI RS2232 (dual channel) or + FTDI RS232 (single channel) USB chip + + + + I2C connection types: + + + i2c + LCD driven by PCF8574(A)/PCA9554(A) connected via I2C + + + piplate + Adafruit RGB Positive 16x2 LCD+Keypad for Raspberry Pi + + + + SPI (Serial Peripheral Interface): + + + spi + Display using a KS0073 or similar in serial mode accessed via Linux SPI device + + + pifacecad + PiFace Control and Display for Raspberry Pi + + + + Other connection types: + + + ethlcd + Display connected via TCP to PoE powered ethlcd device + () + + + raspberrypi + LCD connected to the GPIO header of a Raspberry Pi + + + +
+ + + + + If you suspect the table above to be outdated, you might want to have a look at + server/drivers/hd44780-drivers.h in LCDproc's + source directory which contains the actual translation code. + + +
+ + + +Connections + + +Common connections for all connection types + + +No matter what connection type you choose, you will always need some +connections. They are explained here. + + + +Power + + +All variants use the same method of obtaining power. i.e., for each LCD: + + + +HD44780: Power Connections + + + + + + LCD + Signal + + + name + pin + + + + + VEE + 1 + GND (connect to any of pins 18 - 25 of you parallel port) + + + VCC + 2 + +5V + + + VLC + 3 + (contrast adjustment) + + + +
+ + + + Always double check your power connection, your display will probably + not survive a reversely connected supply ! + + + + +There are several ways to get 5V: + + + + + Connect to a 5V line intended for disk drives (the red wire is 5V, + black is GND). + + + Get it from the VCC and GND pins of an USB connector. + For the USB connection types this is done automatically, as the circuits + used there automatically power the LCD. + + + Get it from a joystick port (pin 1 and 9 are 5V, 4, 5 and 12 are GND). + It seems that some soundcards can use these lines for communication, + so if you want to use this first check whether it really gives a 'clean' 5V. + + + If you don't have a backlight, you can sometimes get the needed mA's + from the LPT port itself. Connect a few diodes from the data pins to + a capacitor and you have the 5V. If it's strong enough is another question... + + + Get it from the keyboard connector. I do not recommend to use this with + a backlight, as the keyboard connector is often protected with a fuse + of 100mA or 200mA. + + + +
+HD44780: Connecting the contrast adjusting pin (V<subscript>LC</subscript>) + + + +
+ +
+ + +Keypad + + +You can connect a keypad with most connection types. The maximum supported +number of keys differs per type. There are several ways to connect the keys +to the input pins. + + + +Direct Keys + + +If you connect a key like sketched below, then you can only connect one key +per input pin. It is a simple solution if you need only few keys. + + +
+HD44780: Direct Keys + + + +
+ + +By default, the following keystrokes are generated by the different keys: + + + HD44780: Direct Key Mapping + + + + key index + mapped string + + + + + X1 + A + + + X2 + B + + + X3 + C + + + X4 + D + + + X5 + E + + + +
+ +You can change the mapping using the +KeyDirect_NUM +configuration option, where NUM +is the subscript to the X in the table above. +
+ +
+ + +Matrix Keys + + +Using a matrix, we can connect much more keys. To simplify the drawing here, +we replace all switches with an @ symbol: + + +
+HD44780: Single Matrix Key + + + +
+ + +We connect the matrix of keys like this: + + +
+HD44780: Complete Key Matrix + + + +
+ + +As you can see, you need 1 resistor per X line, and 1 diode per Y line. +By default, lcdproc will presume that you have a keypad with a layout +like a telephone connected, with X and Y lines connected as show. +To be more precise, it assumes this mapping: + + + +HD44780: Matrix Keypad Layout + + + + + X1 + X2 + X3 + X4 + X5 + + + Y1 + 1 + 2 + 3 + A + E + + + Y2 + 4 + 5 + 6 + B + F + + + Y3 + 7 + 8 + 9 + C + G + + + Y4 + * + 0 + # + D + H + + + +
+ + +This mapping can be changed using the +KeyMatrix_X_Y +configuration option, where X and +Y are the subscripts to the respective axes above. + + + +If you only need e.g. 10 keys, leave the rest away. +You should modify and recompile the +driver to get an other keypad layout. + + + +You can buy arrays of keys that are connected like this in the electronics +shop. They usually call it a matrix keypad. To hook it to lcdproc, you +would only need to add the resistors and diodes. + + + +If you want to use just one return line, for example with the serialLpt +wiring, it looks (completely drawn) like this: + + +
+HD44780: One Return Line + + + +
+ + + + If the driver generates keypresses without that you actually press a key, + it might be that the unconnected input lines are picking up + electromagnetic waves from the air. In that case connect the unconnected + input lines (pin 10, 11, 12, 13 and 15 of the LPT) to VCC = 5V. + + + +
+ +
+ + +Backlight + + +A small extension allows you to switch the backlight of the display on +and off. At the moment only the 4bit and winamp +connection types support this. +The extension uses one output pin, you cannot use that pin for other +functions anymore. The wiring looks like this: + + +
+HD44780: Backlight Wiring + + + +
+ + + + Sometimes the backlight connections are not on the 'main' connector, but on + the side. If that is the case, there is usually NO RESISTOR present to limit + the current through the LEDs. Therefore you should then add a resistor after + the transistor of about 10 ohm (see display documentation). + + + + + + If you want the backlight to light a bit while it is "switched off", you can + add a resistor bypassing the transistor from e to c, with a value of, say + 47ohm or 22ohm. (My 4x20 has an internal resistor of 6ohm, so with 47 ohm + extra it lights at only 1/9th. I like this. Joris.) + + + +
+ +
+ + +4bit + + +This wiring is originally based on "lcdtext" (by Matthias Prinke). + + + +HD44780: 4bit Pinouts (1) + + + + + + + + + printer port + <-> + LCD + + + name + pin + name + pin + + + + + + + GND + VEE + 1 + + + + + +5V + VCC + 2 + + + + + (contrast adjustment) + VLC + 3 + + + D4 + 6 + + RS + 4 + + + + + GND + RW + 5 + + + D6 + 8 + + EN + 6 + + + D0 + 2 + + D4 + 11 + + + D1 + 3 + + D5 + 12 + + + D2 + 4 + + D6 + 13 + + + D3 + 5 + + D7 + 14 + + + +
+ + + +The RW (pin 5) line of the display decides whether the display receives data from the +LPT port, or whether it sends data to the LPT port: if grounded it receives, if High or connected +to nothing at all it "sends" (i.e., will not work as intended). So, if you are not sure that +you need it otherwise, then connect it to GND. This certainly applies if you have only one display. + + +Theoretically this wiring sends the data over twice as slow as the +winamp or ext8bit wirings, because it only sends 4 bits at a time. + + + + +The 4bit connection type supports more than one display connected +to the same parallel port. +If you want to connect more than one display, then wire the all the displays to the +parallel port according to the scheme above with the exception of the EN +(pin 6) line of the LCDs. + + + +For the second and further displays, you can find the wiring for the EN +(pin 6) line in the table below. + + + +HD44780: 4bit Pinouts (2) + + + + + + + + + printer port + <-> + LCD + + + name + pin + name + pin + + + + + D7 + 9 + + EN2 + 6 of 2nd display + + + D5 + 7 + + EN3 + 6 of 3rd display + + + STR + 1 + + EN4 + 6 of 4th display + + + LF + 14 + + EN5 + 6 of 5th display + + + INIT + 16 + + EN6 + 6 of 6th display + + + SEL + 17 + + EN7 + 6 of 7th display + + + +
+ + +The optional keypad can be connected as follows: + + + +HD44780: 4bit Keypad Pinouts + + + + + + + printer port + <-> + keypad + remarks + + + name + pin + pin + + + + + D0 + 2 + + Y1 + + + + D1 + 3 + + Y2 + + + + D2 + 4 + + Y3 + + + + D3 + 5 + + Y4 + + + + D4 + 6 + + Y5 + + + + D5 + 7 + + Y6 + Only if not used for backlight or 3rd controller. + + + nSTRB + 1 + + Y7 + Only if not used for additional controllers. + + + nLF + 14 + + Y8 + + + INIT + 16 + + Y9 + + + nSEL + 17 + + Y10 + + + nACK + 10 + + X1 + + + + BUSY + 11 + + X2 + + + + PAPEREND + 12 + + X3 + + + + SELIN + 13 + + X4 + + + + nFAULT + 15 + + X5 + + + + +
+ + +The optional backlight wiring should be connected to D5, pin 7. + + +
+ + +8bit "Winamp" + + +This type of connection should work with winamp. + + + +HD44780: "Winamp" wiring + + + + + + + + + printer port + <-> + LCD + + + name + pin + name + pin + + + + + D0 + 2 + + D0 + 7 + + + D1 + 3 + + D1 + 8 + + + D2 + 4 + + D2 + 9 + + + D3 + 5 + + D3 + 10 + + + D4 + 6 + + D4 + 11 + + + D5 + 7 + + D5 + 12 + + + D6 + 8 + + D6 + 13 + + + D7 + 9 + + D7 + 14 + + + nSTRB + 1 + + EN + 6 + + + nLF + 14 + + RW + 5 (EN3 6 - LCD 3) (optional (*) ) + + + INIT + 16 + + RS + 4 + + + nSEL + 17 + + EN2 + (6 - LCD 2) (optional) + + + +
+ + +(*) on the RW line of the display: this line decides whether the display receives data from the +LPT port, or whether it sends data to the LPT port: if grounded it receives, if High or connected +to nothing at all it "sends" (i.e., will not work as intended). So, if you are not sure that +you need it otherwise, then connect it to GND. This certainly applies if you have only one display. + + + +If you want the display to work with the Winamp plugin, wire nLF (pin 14) +to RW of your LCD. You can then use the plugin in bidirectional mode (which +is much faster). With 3 connected LCDs this is not possible. +Note from Benjamin: I haven't tried using winamp while having the third LCD +connected to this line. + + + +The optional keypad can be connected as follows: + + + +HD44780: "Winamp" wiring - Keypad + + + + + + + printer port + <-> + keypad + + + name + pin + pin + + + + + D0 + 2 + + Y1 + + + D1 + 3 + + Y2 + + + D2 + 4 + + Y3 + + + D3 + 5 + + Y4 + + + D4 + 6 + + Y5 + + + D5 + 7 + + Y6 + + + D6 + 8 + + Y7 + + + D7 + 9 + + Y8 + + + nACK + 10 + + X1 + + + BUSY + 11 + + X2 + + + PAPEREND + 12 + + X3 + + + SELIN + 13 + + X4 + + + nFAULT + 15 + + X5 + + + +
+ + +The optional backlight wiring should be connected to nSEL, pin 17. + + +
+ + +8bit "lcdtime" + + +This is originally based on "lcdtime" (by Benjamin Tse +blt@ComPorts.com) and allows you to combine the LCD with a LED +bargraph. The LCD is driven by LCDproc and the LEDs by another program +such as portato. Further details can be obtained from: + + + + + + + + + + + + + + + +The LCD connections are: + + + +HD44780: "lcdtime" wiring + + + + + + + + + printer port + <-> + LCD + + + name + pin + name + pin + + + + + D0 + 2 + + D0 + 7 + + + D1 + 3 + + D1 + 8 + + + D2 + 4 + + D2 + 9 + + + D3 + 5 + + D3 + 10 + + + D4 + 6 + + D4 + 11 + + + D5 + 7 + + D5 + 12 + + + D6 + 8 + + D6 + 13 + + + D7 + 9 + + D7 + 14 + + + nSEL + 17 + + - + + + + nSTRB + 1 + + RS + 4 + + + nLF + 14 + + RW + 5 (optional - pull LCD RW low (*) + + + INIT + 16 + + EN + 6 + + + +
+ + +(*) on the RW line of the display: this line decides whether the display receives data from the +LPT port, or whether it sends data to the LPT port: if grounded it receives, if High or connected +to nothing at all it "sends" (i.e., will not work as intended). So, if you are not sure that +you need it otherwise, then connect it to GND. + + + +See the lcdtime tar-ball (above) for full details of the bargraph +connections. + + + +The optional keypad can be connected as follows: + + + +HD44780: "lcdtime" wiring - keypad + + + + + + + printer port + <-> + keypad + + + name + pin + pin + + + + + D0 + 2 + + Y1 + + + D1 + 3 + + Y2 + + + D2 + 4 + + Y3 + + + D3 + 5 + + Y4 + + + D4 + 6 + + Y5 + + + D5 + 7 + + Y6 + + + D6 + 8 + + Y7 + + + D7 + 9 + + Y8 + + + nSTRB + 1 + + Y9 + + + nSEL + 17 + + Y10 (only if not used for backlight) + + + nACK + 10 + + X1 + + + BUSY + 11 + + X2 + + + PAPEREND + 12 + + X3 + + + SELIN + 13 + + X4 + + + nFAULT + 15 + + X5 + + + +
+ + +The backlight wiring should be attached to nSEL, pin 17. Because the portato +program (mentioned above) also uses this pin to control the bargraph, you +cannot use the backlight control together with the bargraph. + + +
+ + +Serial LPT + + +This interface uses a handful of wires to interface to the +HD44780. Suitable for high noise, long connections. Designed by +Andrew McMeikan andrewm@engineer.com. + + + +I (Joris) have extended this driver and the wiring a bit. It now supports +keys again (it had earlier supported keys, but some time did not). + + + +Further I have extended the driver and the wiring to be able to run +using 2 instead of 3 output pins. That's even one less pin ! :) + + + +Of course the use of fewer lines than the other wirings can not stay +without drawbacks. In this case the simplicity of the long feeding wires +is compensated by some intelligence in the decoding of the data. If you +have no experience with the soldering iron, I do not recommend to build +this wiring. + + + +OK, so here is the wiring. First of the 'simple' 3 wires version. IC1 is +the shift register, a 4094. Do not forget to connect the 5V to pin 16 and +GND to pin 8 of the IC. + + +
+HD44780: Serial LPT wiring ('simple') + + + +
+ + +The second possible wiring is with 2 output lines. This one is a bit more +complex. If you do not understand the schematic, do not build it. + + +
+HD44780: Serial LPT wiring ('complex') + +o----|R Q6|--------------------o Y7 + | 22k | |/ | |13 + | --- IC1 | Q7|---+ +--o 5 RW + | --- | | | 5V | + | |100p ----------- | O === + | | | | + | === | .-. + | | | |22k + +--------------------------------------+ | | + | '-' + | ___ 11|\ 10 | 5|\ 6 + +--|___|--+----| >o-------------------||-----+----| >o--o 6 EN + 22k | |/ 22p |/ + --- IC1 IC1 + --- + |22p + | IC1=74HCT14 (6x Schmitt trigger inverter) + === + + + 5V O--+-------+------+------+-----------------------+-----o 2 VCC + | | | | 13|\ 12 | + | | | +---| >o- | + |100n O 14 O 14 |/ .-. + --- IC1 IC2 | |<---o 3 Vlcd + --- O 7 O 7 1|\ 2 3|\ 4 | |10k + | | | +--| >o- +--| >o- '-' + GND | | | | |/ | |/ | + 18..25 o------+-------+------+-------+----------+-----+-----+-----o 1 GND + | + === GND + +]]> + +
+ + +Serial LPT Keypad + + + +To understand this part of the serialLpt documentation, you also need to +read the keypad section in this document. + + + + +serialLpt wiring supports a keypad. The 3 wires version supports +8 keys, or if you use multiple return lines up to 8 x 5 = 40 lines. The +2 wires version supports 7 keys, or with multiple return lines +7 x 5 = 35 keys. + + + +HD44780: Serial LPT - Keypad return lines + + + + + + + printer port + <-> + keypad + + + name + pin + pin + + + + + nACK + 10 + + X1 + + + BUSY + 11 + + X2 + + + PAPEREND + 12 + + X3 + + + SELIN + 13 + + X4 + + + nFAULT + 15 + + X5 + + + +
+ + +On lines longer than, say a meter, you should buffer the return line(s). +If you only have 1 return line, you can buffer it with two remaining +buffers from the 74HCT14: + + +
+HD44780: Serial LPT - Keypad return lines buffered + +o------| >o---|___|---+---o input pin on LPT port + return |/ |/ 220E | + IC1 IC1 --- + --- 1nF + | + === + +]]> + +
+ +
+ + +Serial LPT Backlight + + +Also a backlight is supported. You will also need a port from the 74HCT14 for +that. The BL output below should be connected to the BL input in the +backlight section + + +
+HD44780: Serial LPT - Backlight extra circuit + +o----o BL output + LPT-D3 470k | |/ + --- IC1 + --- + |100nF + | + === + +]]> + +
+ +
+ +
+ + +spi + + +This connection type drives a LCD in serial mode (supported on Hitachi HD66712, +Samsung KS0073 and KS0074 (and clones) controllers) connected to some Linux +SPI device. + + +This connection type is currently only supported on Linux. It is strongly +recommended to use a SPI implementation with hardware support, e.g. on the +Raspberry Pi. + + +As the SPI communication to the display cannot drive a backlight switch, this +connection type features a BacklightDevice option +that can use a GPIO pin exposed via sysfs (see eLinux GPIO). + + + + + +FTDI FT2232D USB chip "ftdi" + + +You can use a FTDI FT2232D dual channel USB <-> parallel FIFO chip +to connect a display via the USB bus. The chip is switched to bitbang mode +and drives both channels as outputs to control the display in 8bit mode. + + + +HD44780: 8bit FTDI + + + + + + + + + FTDI chip + <-> + LCD + + + name + pin + name + pin + + + + + ADBUS0 + 24 + + D0 + 7 + + + ADBUS1 + 23 + + D1 + 8 + + + ADBUS2 + 22 + + D2 + 9 + + + ADBUS3 + 21 + + D3 + 10 + + + ADBUS4 + 20 + + D4 + 11 + + + ADBUS5 + 19 + + D5 + 12 + + + ADBUS6 + 18 + + D6 + 13 + + + ADBUS7 + 17 + + D7 + 14 + + + BDBUS0 + 40 + + RS + 4 + + + BDBUS1 + 39 + + RW + 5 + + + BDBUS2 + 38 + + EN + 6 + + + BDBUS3 + 37 + + BL + Backlight (optional) + + + +
+ + +You can configure the USB vendor/product ID in LCDd.conf. +The wiring of the control lines can optionally be reconfigured, +please look at the driver source if you really need that. + + + +The backlight line is driven high when the backlight is on. +Therefore the standard backlight circuit () +will not work. Use the following instead. + + +
+hd44780/ftdi: Backlight Wiring + + + +
+ + + +Alternatively you can use a single channel FTDI FT245BM USB <-> parallel +FIFO chip and use the display in its 4 bit mode. + + + +HD44780: 4bit FTDI + + + + + + + + + FTDI chip + <-> + LCD + + + name + pin + name + pin + + + + + D0 + 25 + + D4 + 11 + + + D1 + 24 + + D5 + 12 + + + D2 + 23 + + D6 + 13 + + + D3 + 22 + + D7 + 14 + + + D4 + 21 + + EN + 6 + + + D5 + 20 + + RS + 4 + + + D6 + 19 + + RW + 5 + + + D7 + 18 + + BL + Backlight (optional) + + + +
+ + +The following special configuration settings are required to use a single +channel FTDI FIFO chip: + + + +HD44780: Configuration for FTDI 4bit + + + + + + +
+ + +LIS2 USB device "lis2" + + +LIS2 from VLSystem () +is a full featured USB VFD module with four channel fan controls. +This device can be accessed as a serial device with the help of the kernel +module ftdi_sio.ko that maps the USB port to a serial port +(e.g. /dev/ttyUSBx). + + + + + +MPlay Blast USB device "mplay" + + +MPlay Blast from VLSystem () +is a full featured USB VFD module with two channel fan controls and +two channel temperature sensors. +This device can be accessed as a serial device with the help of the kernel +module ftdi_sio.ko that maps the USB port to a serial port +(e.g. /dev/ttyUSBx). + + + + + +LCD on Serial panel device "los-panel" + +The LoS-Panel is a DIY device built using an Atmel ATtiny2313 and +supports the following features: + + Drives displays with one controller. + Switchable backlight. + One 4x4 matrix keypad and 4 direct keys. + + + + + + The direct keys are reported as a fifth column of a matrix keypad to LCDd. + + + Column and rows are reported reverse (column 1 / row 1 is in the lower + right corner) to LCDd which expects (1/1) to be the upper left corner. + You have to take this into account when configuring keys. + + + + +See +for more information on this device. + + + + + +VDR LCD serial device "vdr-lcd" + + +… to be documented … + + + +Please address Matteo Pillon for further information. + + + + + +VDR-Wakeup module "vdr-wakeup" + + +The VDR-Wake module by Frank Jepsen is a serial IO extension module for the +famous Linux-based VDR that allows to connect an LCD to it and supports LCDproc. + + + +See +(German) for more information on VDR-Wakeup. + + + + + +Pertelian X2040 "pertelian" + + +The Pertelian X2040 includes an HD44780 display with enclosure and USB +connection. + +In order to work with LCDproc in Linux you need +the usbserial.ko and ftdi_sio.ko +kernel modules loaded. The display will then be available on a +serial port /dev/ttyUSBx. + + + + See the + + X4020 product page for more information. + + + + + + +PIC-an-LCD serial device "picanlcd" + + +The PIC-an-LCD module is also supported. It is not connected to the LPT port +but to a serial port, which saves you from a lot of potential problems. +To use it, specify the device to which you have connected the module in the +config file with the Device setting. +The default is /dev/lcd. +It does not support a keypad nor backlight switching. + + + + +As of 2012 these devices are not sold anymore. Search the Internet Archive for +a copy of if you need +the manual. + + + + + + +LCD serializer device "lcdserializer" + + +LCD serializer connection is technically the same as PIC-an-LCD with the same advantages, +it uses the serial port making things really simple. +Unlike PIC-an-LCD +LCD serializer +is not a commercial product. it's just a project found digging on the net and freely available. +You have all the tools and the code to build it yourself and to customize the behaviour of the device. + + + +What you need + + + +Some electronic knowledge and familiarity with the soldering iron +A PIC16F84 (I used PIC16F84A) or PIC16C54 +JDM PIC programmer +gputils and picprog installed on your GNU/Linux box + + + + + +Burning the PIC + + +First, you need to download the ASM source for your PIC and then make the hex: + + + +$ gpasm lcd16f84_custom.asm + + + +Now the binary is ready to be flashed to the PIC. +Connect the programmer with the PIC installed and issue the following command to see it burning ;-): + + + +$ picprog --erase --burn --input lcd16f84.hex --pic /dev/ttyS0 + + + + + +Running lcdproc + + +It's time to build the operating circuit, +remember this driver uses a baud rate of 9600, so JP2 need to be closed. + + + +Now power on the board. You should see OK on the LCD screen. +Otherwise double-check all the connections. + + + +Change LCDd.conf to include the following statements in the [hd44780] section: + + + +ConnectionType=lcdserializer +Device=/dev/ttyS0 + + + +Finally, start the daemon and relax watching lcdproc running. + + + + + + +BWCT USB LCD module "bwctusb" + + +The BWCT USB LCD module, sold by Bernd Walter Computing Technology +() is a little board +that can be piggy-packed to a HD44780 display and connects that to USB. + + + +The board, driven by the bwctusb connection type, +does neither support a keypad for input, nor more than one single-controller +display, nor does it allow setting the backlight or brightness. +But you can set the display's contrast using software +(see the Contrast configuration parameter). + + + +Special configuration options + + +If there is more than one BWCT USB module connected to the system, +the SerialNumber configuration parameter allows +selecting which display is used in LCDd. + + + + + + + + +Till Harbaum's "lcd2usb" + + +LCD2USB +is a cheap but powerful do-it-yourself interface to connect HD44780 +based displays via USB, consisting of easily available parts only. +The device supports software adjustable contrast and backlight +as well as dual controller displays (required for 4*27 and 4*40). + + + +It is based upon an Atmel AVR Mega8 CPU with a pure software implementation +of the USB protocol for the Atmel AVR microcontroller series. + + + +The whole interface incl. the hardware layout is under a GPL like license. +This means that you can take these schematics and use it as a basis +for your own interface e.g. for a graphic LCD. + + + +Two keys can be connected to the LCD2USB interface board. +They can generate three key events that can be mapped to key names using +the DirectKey_1 to DirectKey_3 commands: +one for each key and the third if the keys are pressed simultaneously. +With this 3-key setup, menus can be used (see example below). + + + +This driver supports the original LCD2USB interface board as described above +as well as compatible devices like those sold by Lcdmod Kit +or those developed by Malte Pöggel. + + + +Special configuration options + + +Besides the standard configuration options for hd44780 displays, the +lcd2usb connection type supports three additional options: +Contrast to set the display's contrast, +Brightness to set the display's brightness when the backlight is switched on and +OffBrightness to set the display's brightness when is backlight is switched off. +All three options expect a number in the range from 0 to 1000. + + + +HD44780: Configuration for LCD2USB + + + + + + + + In order to make the lcd2usb connection type work with a 2-controller display + you may need to set the vSpan config option accordingly. + + + + + + + +Dick Streefland's "USBtiny" + + +USBtiny +is a software implementation of the USB low-speed protocol for +the Atmel ATtiny microcontrollers. It is also the name of a 'reference +circuit' using the ATtiny2313. + + + +The reference circuit features an IR receiver for remote controls and a LCD. +Due to hardware limitations of the ATtiny2313 the LCD does not have switchable +backlight, adjustable contrast, any keys, nor does it support displays with +more than one controller. If you want these features and do not require the +IR receiver we recommend to take a look at the LCD2USB +device. + + + + + LCDproc does not make use of the IR receiver. 3rd party software is required + to make it do anything, e.g. LIRC. + + + + + + + +USS-720 USB-to-IEEE 1284 Bridge (Belkin F5U002) "uss720" + + +The USS-720 USB-to-IEEE 1284 Bridge is a fully featured USB to parallel chip that is used +in most (but not all) Belkin F5U002 USB Parallel Printer Adapters. Because these adapters are +inexpensive and readily available on the second-hand market, they provide an excellent solution +for users who want to experiment with a parallel port but only have USB ports on their computers. + + + +Because the chip acts as a parallel port, the driver maintains the same features and wiring as +the 8-bit "winamp" driver. However, because most USB Parallel Printer Adapters use a centronics +printer connector, be sure to convert the pin numbering of the parallel port pins in the "winamp" +wiring to the pin numbering of the centronics port. Many tables are available on the internet +that illustrate how the pin numbering differs between the two. + + + +Special configuration options + + +Because several manufacturers used the USS720 chip in their USB Parallel Printer Adapters, the +VendorID and ProductID options are configurable in the +LCDd.conf file. + + + + +Not all Belkin F5U002 USB Parallel Printer Adapters used the USS720 chip. Look for the dark grey +adapters with the removable USB cable for best results. + + + + + + + + + +I<superscript>2</superscript>C with Port-Expander + + +If you have an I2C port available that is supported by your kernel +(through /dev/i2c*), you can add a I2C +port expander there (PCF8574P in this example). + + +
+HD44780: PCF8574P port expander on I<superscript>2</superscript>C bus + + + +
+ + +Configuration + + +HD44780: Configuration for I<superscript>2</superscript>C with port expander + + + + + + +If your port expander has different wiring you can re-assign the pins in the config file + + + +HD44780: Configuration for I<superscript>2</superscript>C with port expander +Alternative Wiring + + + + + + +HD44780: Configuration for I<superscript>2</superscript>C with port expander +alternative config + + + + + + +The Device configuration setting denotes the device file +of your I2C bus (here /dev/i2c-0). +You have to load the kernel standard module i2c-dev.ko and +the bus driver, but no I2C +chip modules (e.g. pcf8574.ko)! + + + +The Port config option contains the I2C +address of the I2C port expander +(here 0x20, the PCF8574 from the example above, with all address bits set to 0). + +Bit 8 of the address (normally 0 in I2C addresses) +has a special meaning: +It tells the driver to treat the device as PCA9554 or similar, +a device that needs a 2-byte command, and it will be stripped +off the address. + + + +HD44780: Examples of I<superscript>2</superscript>C port expander addresses + + + + Port value + Meaning + + + + + 0x200x27 + PCF8574 with A[012]=07 + + + 0x380x3f + PCF8574A with A[012]=07 + + + 0xa00xa7 + PCA9554 with A[012]=07 + + + 0xa00xa7 + PCA9554A with A[012]=07 + + + +
+ +
+ +
+ + +ethlcd Device + + +The ethlcd () device is simply +an LCD display driven by an ATmega microcontroller, controlled and powered by +"home-made" Power over Ethernet. The hardware and software are open source. + + +Features +ethernet connection using ENC28J60 ethernet controller +Power over Ethernet (data and power using single UTP cable) +Atmel's ATmega168 microcontroller +6 buttons (MENU, UP, DOWN, LEFT, RIGHT, ENTER) +backlight control in three states: ON, Night-Mode (partialy ON) and OFF +beeper +device act as a TCP server - LCDproc driver is connecting to device just by creating +a TCP socket - no need to PC-side additional hardware besides NIC + + + +
+HD44780: ethlcd - block diagram + + | ethernet |<========+------> PC running + | | | | | | controller | | | LCDproc + | | | | | | | | | + | |_________| |___________| |____________| | | + | | | | + | | | | + | beeper | | + |_____________________________________________________| | + ethlcd AC Adapter + +]]> + +
+ + +The device is "visible" to LCDproc just like any other HD44780 device. The difference +is the wiring - instead of connecting the display directly to PC (via serial/parallel/usb port), +it is connected via ethernet and the communication is done over TCP connection. +The main feature is - that to power and control the LCD is needed single UTP cable. +To use the driver, specify the device IP address or hostname, on which the ethlcd device +is accessible by setting in config file the Device value. +The default is ethlcd. + + +
+ + +USBLCD adapter + + +The USBLCD adapter from Adams IT Services () +is a small interface board which allows you to connect an alphanumerical display +module based on the HD44780 or compatible controller to the USB. The display +will be powered by the USB. It features a switchable backlight (on or off) and +can be used with 16x2, 16x4 or 20x4 displays. + + + +The usblcd connection type communicates with a kernel +driver by using a device file /dev/usb/lcdx. +The kernel driver providing this device currently only exists for Linux kernels +newer than 2.4.20-pre7. + + + + +As of 2007 these device are not sold anymore. This driver has been ported from +lcdproc 0.4.5 to support existing users. + + + + + +USB-4-all controller + + +The USB-4-all controller board from Sprut () +is a small interface board which allows you to connect different hardware to the USB. +The subdriver for LCDproc supports dual HD44780 displays and a 4x4 keypad as well as +software adjustable contrast and brightness (backlight). + + + +HD44780: USB-4-all - Display connection + + + + + + + + USB-4-all + LCD1 + LCD2 + + + name + pin + name + name + + + + + RB7 + 28 + D7 + D7 + + + RB6 + 27 + D6 + D6 + + + RB5 + 26 + D5 + D5 + + + RB4 + 25 + D4 + D4 + + + RB3 + 24 + R/W + R/W + + + RB2 + 23 + RS + RS + + + RB0 + 21 + EN + + + + RC0 + 11 + + EN + + + +
+ + +HD44780: USB-4-all - Keypad connection + + + + + + + USB-4-all + keypad + + + name + pin + name + + + + + RA0 + 2 + X1 + + + RA1 + 3 + X2 + + + RA2 + 4 + X3 + + + RA3 + 5 + X4 + + + RA4 + 6 + Y1 + + + RA5 + 7 + Y2 + + + RC6 + 17 + Y3 + + + RC7 + 18 + Y4 + + + +
+ + +HD44780: USB-4-all - Brightness and contrast connection + + + + + + + USB-4-all + Desc + + + name + pin + + + + + + RC1 + 12 + brightness + + + RC2 + 13 + contrast + + + +
+ + +
+HD44780: USB-4-all brightness control + + LCD 15 (+ Backlight) + + +---> LCD 16 (- Backlight) + | + === GND +]]> + +
+ +
+HD44780: USB-4-all contrast control + + LCD 3 (Contrast) + |c 680R | + ___ b |/ |+ + RC2 o------|___|------| npn --- 10uF + 22k |\ --- + |e | + | | + | | + === === GND +]]> + +
+ +
+ + + +Raspberry Pi + +This connection type supports a LCD connected to the GPIO header P1 on +a Raspberry Pi. Displays with one or two controllers are supported. + +It supports a switchable backlight connected to pin P1-11 by default. Use +the switch circuit as described in . + + + The signal level on the GPIO pins is 3.3 V and they are said not to + be 5 V tolerant. Therefore the R/W pin of the display must + be wired to GND to prevent 5V logic appearing on the GPIO + pins. For the same reason the backlight cicuit from must not be + used. + Powering a LCD that uses 5 V from pin P1-02 will work. Powering a + LCD from 3.3 V (pin P1-01) will only work if it is designed for 3.3 V + operation. + + + +HD44780: Default pin mapping for Raspberry Pi + + + + + + + + + Connector + <-> + LCD + + + Pin Name + Pin Number + Name + Pin + + + + + GPIO18 + P1-12 + + D7 + 14 + + + GPIO23 + P1-16 + + D6 + 13 + + + GPIO24 + P1-18 + + D5 + 12 + + + GPIO25 + P1-22 + + D4 + 11 + + + GPIO08 + P1-24 + + EN + 6 + + + GPIO07 + P1-26 + + RS + 4 + + + GND + P1-06 + + RW + 5 + + + GPIO22 + P1-15 + + EN2 + Second controller (optional) + + + GPIO17 + P1-11 + + BL + Backlight (optional) + + + +
+ +GPIO07 and GPIO08 used for RS and EN signal are also used by the SPI +bus. If you loaded the SPI driver you will need to assign them to a different +GPIO, e.g. GPIO04 and GPIO22. + +When using a display with two controllers the vspan +option has to be configured as well (e.g. vspan=2,2 for a +40x4 display). + + +Special Raspberry Pi configuration options + +This connection driver can be configured to use other pins than the +one described in the table +above. Using the pin_ + configuration option, any LCD pin can be assigned +to any GPIO pin. + + + The values for the pin_ + configuration option are the number part from the + GPIO signal name, not the pin number from the header connector! To find + out which signal is routed to which connector pin refer to the RPi Low-level peripherals + description. + + +The connection driver contains a check for possible signal names. You +will receive an error message if you try to assign a pin to a signal that is +not available on connector P1 or P5. + + +HD44780: Alternate configuration for Raspberry Pi GPIO pins + + + + + + +
+ + +Adafruit Pi Plate + + +The Adafruit RGB Positive 16x2 LCD+Keypad for Raspberry Pi (aka Pi Plate, +see ()) combines +a 16x2 Character LCD, up to 3 backlight pins AND 5 keypad pins using only +the two I2C pins on the Rasperry Pi. + + + +Note that this connection type drives all RGB pins of the backlight at the +same time, resulting in a white backlight. You will need to modify the +source code if you want to have some other color. + + + +HD44780: Configuration example for Pi Plate connection type + + + + + + + + +PiFace Control and Display + + +The PiFace Control and Display for Raspberry Pi +from OpenLX SP Ltd combines a 16x2 Character LCD and navigation buttons using +the SPI bus on the Rasperry Pi. + + + + +The PiFace Control and Display features a IR receiver, which LCDproc does not +make use of. You have to setup and use LIRC for that. See + +Setting up PiFace Control And Display to use a remote. + + + + +HD44780: Configuration example for PiFace Control and Display connection type + + + + + + + +
+ + + +Compiling + + +Make sure that the HD44780 files are built when you run ./configure. +This can be done by specifying or by including +hd44780 in the list of enabled drivers +(e.g. ). + + + + + + + +Configuration in LCDd.conf + + +[hd44780] + + + + + Port = + PORT + + + For parallel connections, specify the address of the parallel port the LCD is connected to. + Common values for PORT are 0x278, + 0x378 and 0x3BC. + If not given, the default is 0x378. + + For I2C connection types this sets the slave + address. + + + + + + Device = + DEVICE + + + If you are using a serial or I2C connection, + you need to set this parameter to the device your LCD is connected to. + For example, if the display is connected to the first serial port, + you have to set it to /dev/ttyS0. + The default value is /dev/lcd. + + + + + + ConnectionType = + { + + 4bit | + 8bit | + serialLpt | + winamp | + picanlcd | + lcdserializer | + los-panel | + vdr-lcd | + vdr-wakeup | + pertelian | + lis2 | + mplay | + usblcd | + bwctusb | + lcd2usb | + usbtiny | + uss720 | + usb4all | + ftdi | + i2c | + piplate | + spi | + pifacecad | + ethlcd | + raspberrypi + } + + + + Select the type of the wiring / display connection. See also + (). + + + + + + + Speed = + BITRATE + + + For a serial connection, set to the serial port bitrate. To use + the default value for the chosen interface, just set to 0. + + + + + + CharMap = + { + hd44780_default | + hd44780_euro | + ea_ks0073 | + sed12780f_0b | + hd44780_koi8_r | + hd44780_cp1251 | + hd44780_8859_5 | + upd16314 | + none + } + + + + Set the character mapping depending on the display you have: + + + The default, hd44780_default, is for "classic" + HD44780 displays. + + + hd44780_euro is for displays with a ROM mask + supporting the european charset (ROM code A02). + + + ea_ks0073 is the charmap for Electronic + Assembly's KS0073 based displays. These devices have a richer + charset, including many icons and many more characters of the + ISO-8859-1 than standard HD44780s. + + + sed12780f_0b is for some SED 1278 displays. + + + The none charmap does not translate any characters. + It displays the characters the display controllers actually has + stored in its CGROM for that position instead. This setting is + intended for debugging purpose. + + + You only need to set this parameter if you have a non-standard + HD44780 display or charmap. + + + If LCDproc was configured with '--enable-extra-charmaps' option the + following character mappings are available, too: + + + hd44780_koi8_r maps input from a client in + Russian KOI8-R to displays with a ROM mask supporting the european + charset (ROM code A02). + + + hd44780_cp1251 maps input from a client in + Russian CP1251 (Windows-1251) to displays with a ROM mask supporting + the european charset (ROM code A02). + + + hd44780_8859_5 maps input from a client in + Russian ISO 8859-5 to displays with a ROM mask supporting the european + charset (ROM code A02). + + + upd16314 is for displays with a Nec uPD16314 + vacuum fluorescent display (VFD) controller with ROM code 002 + character set. If your display has ROM code 001 character set you + may use the hd44780_euro charmap instead. + + + + + + See server/drivers/hd44780-charset.h + in LCDproc's source directory for the actual + mappings. + + + + + + + + Keypad = ¶meters.yesnodef; + + + Tell whether you have a keypad connected. + You may also need to configure the keypad layout further on in this file. + + + + + + Brightness = + BRIGHTNESS + + + Set the initial brightness when the backlight is on + for the lcd2usb connection type. + Legal values are 0 - 1000, + with 800 being the default. + + + + + + OffBrightness = + BRIGHTNESS + + + Set the initial off-brightness, i.e. the brightness when the backlight is off, + for the lcd2usb connection type. + The legal range is 0 - 1000. + If not given, it defaults to 300. + + + + + + Contrast = + CONTRAST + + + Set the initial contrast for the bwctusb and + lcd2usb connection types. + Legal values for CONTRAST are + 0 - 1000. + If not given, it defaults to 500 which may + be too low or too high for the selected connection type. + So, if the screen is blank or dark, please try playing with + the contrast a bit. + + + + + + Backlight = ¶meters.yesnodef; + + + Specify if you have a switchable backlight. + + + + + + OutputPort = ¶meters.yesnodef; + + + Tell if you have the additional output port ("bargraph") and you want to + be able to control it with the lcdproc OUTPUT command. + + + + + + Lastline = ¶meters.yesdefno; + + + Specifies whether the lowest pixel line of a character is pixel addressable + or if it controls an underline effect. + The default is yes, meaning a pixel addressable last pixel line. + + + + + + Size = ¶meters.size; + + + Specifies the size of the LCD. + Default: 20x4 + In case of multiple combined displays, this should be the total size. + + + + + + vSpan = + + HEIGHT + ,… + + + + The "vertical span" when using the driver with multi-controller displays + or with multiple displays that are treated as a single virtual display. + It is a comma separated list of the heights of each display. + In multi-controller displays it lists the number of lines each controller + is responsible for. + + + E.g. vSpan=2,2,1 means you have three physical displays, the first + two having two lines each, and the third having one line, that together form + a virtual display that is 5 lines high. + + + The sum of the HEIGHTs must match the total height + given in Size=. + + + + + + ExtendedMode = ¶meters.yesnodef; + + + If you have a KS0073 or an other 'almost HD44780-compatible', set this + flag to get into extended,4-line linear addressing mode. + + + + + + LineAddress = + ADDR + + + If the next line of your display doesn't start 0x20 higher in + DDRAM you can override the default value of the ExtendedMode with this parameter. + + + + + + DelayMult = + DELAY + + + If your display is slow and cannot keep up with the flow of data from + LCDd, garbage can appear on the LCDd. Set this delay multiplier to + 2 or 4 to increase the delays. + The default is 1 for a non-multiplied delay. + + + + + + DelayBus = ¶meters.yesdefno; + + + You can reduce the inserted delays by setting this to no. + On fast PCs it is possible your LCD does not respond correctly. + Default: yes. + + + + + + KeepAliveDisplay = + SECONDS + + + Some displays (e.g. vdr-wakeup) need a message from the driver to + indicate that it is still alive. + When set to a value greater than 0 the character in the + upper left corner is updated every SECONDS seconds. + The default 0 does not cause any extra updates. + + + + + + RefreshDisplay = + SECONDS + + + If you experience occasional garbage on your display you can use this + option as workaround. If set to a value greater than 0 it forces a + full screen refresh every SECONDS seconds. + Default: 0. + + + + + + KeyDirect_NUM = + KEY + + + KeyMatrix_X_Y = + KEY + + + + If you have a keypad you can assign keystrings to the keys. + See the keypad section + for used terms and the section on the specific connection type how to + wire it. + + + To map, for example, the directly connected key 4 + to the string Enter, use KeyDirect_4=Enter. + For matrix keys use the X and + Y coordinates of the key; + e.g. KeyMatrix_1_3=Enter. + + + + + + + VendorID = + VENDORID + + + USB vendor ID to look for in certain USB connection types. + When using an FTDI chip with connection type ftdi, the default value is + 0x4003. + When using a USS720 chip with connection type uss720, the default value is + 0x1293. + + + + + + ProductID = + PRODUCTID + + + USB product ID to look for in certain USB connection types. + When using an FTDI chip with connection type ftdi, the default value is + 0x6001. + When using a USS720 chip with connection type uss720, the default value is + 0x0002. + + + + + + SerialNumber = + SERIALNO + + + Serial number of the USB device to look for with + connection type bwctusb. + If not given, the first BWCT USB module found will be used. + + + + + + + + + + +Miscellanea + + +This text has originally been taken from a message by Bill Farrow +bfarrow@arrow.bsee.swin.edu.au. + + + +Updated February 2000, Benjamin Tse blt@ComPorts.com + + + +Updated October 2001, Joris Robijn joris@robijn.net + + + +Converted to Docbook March 2002, Rene Wagner reenoo@gmx.de + + + +Updated April 2002, Rene Wagner reenoo@gmx.de + + + +Updated and extended April 2006 to November 2007, Peter Marschall peter@adpm.de + + + + +