Ik probeer een Serial 128X160 SPI TFT LCD Module aan te sturen met een 18f4550 microcontroller. Ik heb dit schermpje op ebay gekocht waar ook wat documentatie te vinden was:
http://www.egochina.net.cn/eBay/Download/JD-T1800_PCB.rar
Daarin staan onder andere een paar voorbeeld programmaatjes maar ik krijg geen beeld. Ik heb de code omgezet naar mikroc, en die is nu als volgt:
Na een tijd op het internet te hebben gezocht bleek een initialisatie code voor pic microcontrollers niet te vinden. Wel is er een library voor arduino, van adafruit: http://www.ladyada.net/products/18tftbreakout/
Helaas ben ik dan weer niet echt bekend met het programmeren van arduino's, en is de library van adafruit vrij groot (is ook niet alleen voor dit scherm). Mijn vraag is dus of iemand iets ziet aan de code dat wellicht niet klopt, en of iemand ervaring heeft met dit scherm (en dan met name de initialisatie, als ik dat voor elkaar heb kom er er wel uit denk ik).
http://www.egochina.net.cn/eBay/Download/JD-T1800_PCB.rar
Daarin staan onder andere een paar voorbeeld programmaatjes maar ik krijg geen beeld. Ik heb de code omgezet naar mikroc, en die is nu als volgt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
| #define uchar unsigned char #define uint unsigned int sbit cs at latB0_bit; sbit rs at latB1_bit; sbit sda at latB2_bit; sbit scl at latB3_bit; sbit reset at latB4_bit; char bitdata; sbit bit7 at bitdata.b7; sbit bit6 at bitdata.b6; sbit bit5 at bitdata.b5; sbit bit4 at bitdata.b4; sbit bit3 at bitdata.b3; sbit bit2 at bitdata.b2; sbit bit1 at bitdata.b1; sbit bit0 at bitdata.b0; void delay(unsigned int time) { int cnt; for(cnt = 0;cnt<time;cnt++) { delay_ms(1); } } void LCD_CtrlWrite_IC(char c) { bitdata=c; cs=0; rs=0; sda=bit7; scl=0; scl=1; sda=bit6; scl=0; scl=1; sda=bit5; scl=0; scl=1; sda=bit4; scl=0; scl=1; sda=bit3; scl=0; scl=1; sda=bit2; scl=0; scl=1; sda=bit1; scl=0; scl=1; sda=bit0; scl=0; scl=1; cs=1; } void LCD_DataWrite_IC(char d) { bitdata=d; cs=0; rs=1; sda=bit7; scl=0; scl=1; sda=bit6; scl=0; scl=1; sda=bit5; scl=0; scl=1; sda=bit4; scl=0; scl=1; sda=bit3; scl=0; scl=1; sda=bit2; scl=0; scl=1; sda=bit1; scl=0; scl=1; sda=bit0; scl=0; scl=1; cs=1; } void LCD_DataWrite(char LCD_DataH,char LCD_DataL) { LCD_DataWrite_IC(LCD_DataH); LCD_DataWrite_IC(LCD_DataL); } void write_command(char c) { bitdata=c; cs=0; rs=0; sda=bit7; scl=0; scl=1; sda=bit6; scl=0; scl=1; sda=bit5; scl=0; scl=1; sda=bit4; scl=0; scl=1; sda=bit3; scl=0; scl=1; sda=bit2; scl=0; scl=1; sda=bit1; scl=0; scl=1; sda=bit0; scl=0; scl=1; cs=1; } void write_data(char d) { bitdata=d; cs=0; rs=1; sda=bit7; scl=0; scl=1; sda=bit6; scl=0; scl=1; sda=bit5; scl=0; scl=1; sda=bit4; scl=0; scl=1; sda=bit3; scl=0; scl=1; sda=bit2; scl=0; scl=1; sda=bit1; scl=0; scl=1; sda=bit0; scl=0; scl=1; cs=1; } void ResetScreen() { reset=0; delay(100); reset=1; delay(100); } ////////////////////////////////////////////////////////////////////////////////////////////// void lcd_initial() { reset=0; delay(100); reset=1; delay(100); //------------------------------------------------------------------// //-------------------Software Reset-------------------------------// //------------------------------------------------------------------// write_command(0x11);//Sleep exit delay (120); //ST7735R Frame Rate write_command(0xB1); write_data(0x01); write_data(0x2C); write_data(0x2D); write_command(0xB2); write_data(0x01); write_data(0x2C); write_data(0x2D); write_command(0xB3); write_data(0x01); write_data(0x2C); write_data(0x2D); write_data(0x01); write_data(0x2C); write_data(0x2D); write_command(0xB4); //Column inversion write_data(0x07); //ST7735R Power Sequence write_command(0xC0); write_data(0xA2); write_data(0x02); write_data(0x84); write_command(0xC1); write_data(0xC5); write_command(0xC2); write_data(0x0A); write_data(0x00); write_command(0xC3); write_data(0x8A); write_data(0x2A); write_command(0xC4); write_data(0x8A); write_data(0xEE); write_command(0xC5); //VCOM write_data(0x0E); write_command(0x36); //MX, MY, RGB mode write_data(0xC8); //ST7735R Gamma Sequence write_command(0xe0); write_data(0x0f); write_data(0x1a); write_data(0x0f); write_data(0x18); write_data(0x2f); write_data(0x28); write_data(0x20); write_data(0x22); write_data(0x1f); write_data(0x1b); write_data(0x23); write_data(0x37); write_data(0x00); write_data(0x07); write_data(0x02); write_data(0x10); write_command(0xe1); write_data(0x0f); write_data(0x1b); write_data(0x0f); write_data(0x17); write_data(0x33); write_data(0x2c); write_data(0x29); write_data(0x2e); write_data(0x30); write_data(0x30); write_data(0x39); write_data(0x3f); write_data(0x00); write_data(0x07); write_data(0x03); write_data(0x10); write_command(0x2a); write_data(0x00);write_data(0x00); write_data(0x00);write_data(0x7f); write_command(0x2b); write_data(0x00);write_data(0x00); write_data(0x00);write_data(0x9f); write_command(0xF0); //Enable test command write_data(0x01); write_command(0xF6); //Disable ram power save mode write_data(0x00); write_command(0x3A); //65k mode write_data(0x05); write_command(0x29);//Display on } void dsp_single_colour(char DH,char DL) { char i,j; //RamAdressSet(); for (i=0;i<160;i++) for (j=0;j<128;j++) LCD_DataWrite(DH,DL); } void main() { ADCON1 |= 0x0F; // Configure all ports with analog function as digital CMCON |= 7; // Disable comparators trisA = 0; trisB = 0; trisC = 0; trisD = 0; trisE = 0; reset = 1; cs = 1; lcd_initial(); while(1) { write_command(0x2C); // Disp_gradscal(); //»Ò½× // delay(500); // dsp_single_colour(0x84,0x10);//»ÒÉ« // delay(500); dsp_single_colour(0xff,0xff);//°×É« delay(500); dsp_single_colour(0x00,0x00);//ºÚÉ« delay(500); dsp_single_colour(0xf8,0x00);//ºìÉ« delay(500); dsp_single_colour(0x07,0xe0);//ÂÌÉ« delay(500); dsp_single_colour(0x00,0x1f);//À¶É« delay(500); } } |
Na een tijd op het internet te hebben gezocht bleek een initialisatie code voor pic microcontrollers niet te vinden. Wel is er een library voor arduino, van adafruit: http://www.ladyada.net/products/18tftbreakout/
Helaas ben ik dan weer niet echt bekend met het programmeren van arduino's, en is de library van adafruit vrij groot (is ook niet alleen voor dit scherm). Mijn vraag is dus of iemand iets ziet aan de code dat wellicht niet klopt, en of iemand ervaring heeft met dit scherm (en dan met name de initialisatie, als ik dat voor elkaar heb kom er er wel uit denk ik).