]>
Commit | Line | Data |
---|---|---|
1 | ------------------------------------------------------------------------------- | |
2 | Hitachi HD44780 display controller, 4-bit mode, initialization sequence | |
3 | ------------------------------------------------------------------------------- | |
4 | ||
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. | |
8 | ||
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 | |
11 | not connected. | |
12 | ||
13 | ||
14 | Logic analyzer setup (hd44780-reset-init-hello.sr) | |
15 | -------------------------------------------------- | |
16 | ||
17 | The capture was taken with an ASIX Sigma2 logic analyzer, sampling 8 | |
18 | logic channels at a rate of 50MHz: | |
19 | ||
20 | Probe HD44780 | |
21 | ------------------- | |
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) | |
26 | 5 D4 (data lines ...) | |
27 | 6 D5 | |
28 | 7 D6 | |
29 | 8 D7 | |
30 | ||
31 | ||
32 | hd44780-reset-init-hello.sr | |
33 | --------------------------- | |
34 | ||
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. | |
38 | ||
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 | |
45 | counter values. | |
46 | ||
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 | |
51 | in big endian format. | |
52 | ||
53 | ||
54 | Logic analyzer setup (other files) | |
55 | ---------------------------------- | |
56 | ||
57 | The capture was taken with a Saleae Logic clone (mostly at 200kHz): | |
58 | ||
59 | Probe HD44780 | |
60 | ------------------- | |
61 | 1 RS (selects "commands" and "display data" mode) | |
62 | 2 E (enable, falling edge clocks data transfers) | |
63 | 3 D4 (data lines...) | |
64 | 4 D5 | |
65 | 5 D6 | |
66 | 6 D7 | |
67 | ||
68 | ||
69 | hd44780-blink.sr | |
70 | ---------------- | |
71 | ||
72 | Arduino firmware based on the LiquidCrystal example Arduino Sketch. | |
73 | ||
74 | This is what the decoded data should look like: | |
75 | ||
76 | - initialization | |
77 | - write "hello, world!" | |
78 | - toggle blinking every 3 seconds | |
79 | ||
80 | ||
81 | hd44780-cursor.sr | |
82 | ----------------- | |
83 | ||
84 | Arduino firmware based on the LiquidCrystal example Arduino Sketch. | |
85 | ||
86 | This is what the decoded data should look like: | |
87 | ||
88 | - initialization | |
89 | - write "hello, world!" | |
90 | - toggle cursor every 0.5 seconds | |
91 | ||
92 | ||
93 | hd44780-customcharacter.sr | |
94 | -------------------------- | |
95 | ||
96 | Arduino firmware based on the LiquidCrystal example Arduino Sketch. | |
97 | ||
98 | This is what the decoded data should look like: | |
99 | ||
100 | - initialization | |
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 | |
106 | ||
107 | ||
108 | hd44780-font.sr | |
109 | --------------- | |
110 | ||
111 | Arduino firmware based on the LiquidCrystal example Arduino Sketch. | |
112 | ||
113 | This is what the decoded data should look like: | |
114 | ||
115 | - initialization | |
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, | |
119 | starting at 0 | |
120 | ||
121 | ||
122 | hd44780-power.sr | |
123 | ---------------- | |
124 | ||
125 | Arduino firmware based on the LiquidCrystal example Arduino Sketch. | |
126 | ||
127 | This is what the decoded data should look like: | |
128 | ||
129 | - initialization | |
130 | - write "hello, world!" | |
131 | - toggle display power every 0.5 seconds | |
132 | ||
133 | ||
134 | hd44780-shift.sr | |
135 | ---------------- | |
136 | ||
137 | Arduino firmware based on the LiquidCrystal example Arduino Sketch. | |
138 | ||
139 | This is what the decoded data should look like: | |
140 | ||
141 | - initialization | |
142 | - write "hello, world!" | |
143 | - repeats: | |
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 | |
147 | ||
148 | ||
149 | hd44780-shiftcursor_204.sr | |
150 | -------------------------- | |
151 | ||
152 | This is what the decoded data should look like: | |
153 | ||
154 | - initialization | |
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 | |
158 | ||
159 | ||
160 | hd44780-textdirection.sr | |
161 | ------------------------ | |
162 | ||
163 | Arduino firmware based on the LiquidCrystal example Arduino Sketch. | |
164 | ||
165 | This is what the decoded data should look like: | |
166 | ||
167 | - initialization | |
168 | - write "abcdefghijklm" | |
169 | - continue to the left until "s" | |
170 | - continue to the right until "z" |