1 -------------------------------------------------------------------------------
2 Hitachi HD44780 display controller, 4-bit mode, initialization sequence
3 -------------------------------------------------------------------------------
5 This capture contains the initialization sequence of an Hitachi HD44780
6 display controller which is very popular for 2x16, 4x20, and similar
7 character oriented display modules.
9 The specific hardware setup that got recorded uses 4-bit mode, which
10 means that data gets communicated on lined D4-D7 only, and D0-D3 are
14 Logic analyzer setup (hd44780-reset-init-hello.sr)
15 --------------------------------------------------
17 The capture was taken with an ASIX Sigma2 logic analyzer, sampling 8
18 logic channels at a rate of 50MHz:
22 1 IR (infrared remote control, idle, not HD44780 related)
23 2 RS (selects "commands" and "display data" mode)
24 3 RW (read/write, always low for write, fixed in HW)
25 4 E (enable, falling edge clocks data transfers)
32 hd44780-reset-init-hello.sr
33 ---------------------------
35 See https://en.wikipedia.org/wiki/Hitachi_HD44780_LCD_controller for a
36 list of display controller commands, and especially the 'Mode Selection'
37 section which discusses the synchronization phase.
39 The sequence demonstrates the following steps:
40 - Synchronize to the LCD controller, cope with it being in any arbitrary
41 state from previous execution.
42 - Configure the LCD controller hardware to 4-bit mode, clear the screen
43 and setup other parameters.
44 - Print two text labels: "Hello LCD" and "counter", start printing
47 When a dedicated HD44780 decoder is not available, the 'parallel' decoder
48 can extract the most basic information: Clock on E (falling edge), D4-D7
49 of the display corresponds to D0-D3 of the decoder (D4-D7 of the decoder
50 are not connected). Words consist of 8 bits (span 2 bus cycles), and are
54 Logic analyzer setup (other files)
55 ----------------------------------
57 The capture was taken with a Saleae Logic clone (mostly at 200kHz):
61 1 RS (selects "commands" and "display data" mode)
62 2 E (enable, falling edge clocks data transfers)
72 Arduino firmware based on the LiquidCrystal example Arduino Sketch.
74 This is what the decoded data should look like:
77 - write "hello, world!"
78 - toggle blinking every 3 seconds
84 Arduino firmware based on the LiquidCrystal example Arduino Sketch.
86 This is what the decoded data should look like:
89 - write "hello, world!"
90 - toggle cursor every 0.5 seconds
93 hd44780-customcharacter.sr
94 --------------------------
96 Arduino firmware based on the LiquidCrystal example Arduino Sketch.
98 This is what the decoded data should look like:
101 - define special characters: heart, smiling face, unhappy face, stickman
102 with arms low, stickman with arms up
103 - write "I {heart} Arduino {smiling face}" and " {stickman with arms low}"
104 - toggle second line between " {stickman with arms low}" and
105 " {stickman with arms up}" about (!) every 0.9 seconds
111 Arduino firmware based on the LiquidCrystal example Arduino Sketch.
113 This is what the decoded data should look like:
116 - define special characters: heart, smiling face, unhappy face, stickman
117 with arms low, stickman with arms up
118 - every about 250ms a set of 2 * 16 characters are written to the display,
125 Arduino firmware based on the LiquidCrystal example Arduino Sketch.
127 This is what the decoded data should look like:
130 - write "hello, world!"
131 - toggle display power every 0.5 seconds
137 Arduino firmware based on the LiquidCrystal example Arduino Sketch.
139 This is what the decoded data should look like:
142 - write "hello, world!"
144 - shift text to the left until it is outside the view
145 - shift text to the right until it is outside the view
146 - shift text to the left until it is where it was before shifting
149 hd44780-shiftcursor_204.sr
150 --------------------------
152 This is what the decoded data should look like:
155 - write "hello, world!"
156 - using cursor shifts it replaces the ! by ?, w by W and h by H, so it is
157 "Hello, World?" in the end
160 hd44780-textdirection.sr
161 ------------------------
163 Arduino firmware based on the LiquidCrystal example Arduino Sketch.
165 This is what the decoded data should look like:
168 - write "abcdefghijklm"
169 - continue to the left until "s"
170 - continue to the right until "z"