Forum: Gesperrte Threads LCD Display Seriell Ansteuern


von HannoHupmann (Gast)


Lesenswert?

Hallo,

vielleicht könnt ihr mir weiter helfen, im Forum hab ich dazu noch 
nichts gefunden.

Mein Auftrag ist es, ein Display Seriell anzusteuern. D.h. ich hab nicht 
die möglichkeit für die weit verbreitete 4-bit oder 8-bit Ansteuerung.
Folgendes Display kommt zum Einsatz: EA DIP204-4 (Datenblätter und 
Referenzen auf www.lcd-module.de).

Das Display arbeitet mit einem Internen ks0073 Controler und wird über 
einen µC angesteuert. Dabei werden die Pins P5.0 CS (chipselect), P5.1 
SO, P5.2 SI, P5.3 SCLK und P5.4 RESET verwendet.
Es muss seriel sein und in C programmiert, das ist die Vorgabe.

Mein erster Gedanke war jetzt ein Programm zu schreiben, welches den 
Pin5.2   so auf High und Low zieht wie es im Datenblatt des KS0073 
gefordert wird. Nach jedem Bit wird die SCKL auf Low gesetzt um eine 
fallende Flanke zu erzeugen.

Wenn ich mir das ganze mittels Oszis ansehe schaut der Verlauf des 
Signals auch aus wie vom Datenblatt gefordert nur leider zeigt das 
Display trotzdem keine Zeichen an.

Ab hier komm ich nicht mehr weiter und hoffe dass einer von euch 
eventuell schon mal ein Display Seriell angesteuert oder zuminderst 
erfahrung im  serieller Datenübermittlung hat und mir weiter helfen 
kann.



PS: Was ich noch probiert und überbrüft habe:
- Kontrast komplett durchlaufen lassen
- Hintergrundbeleuchtung an/aus
- Pin5.1 verwenden.
- Längere Pausen nach jedem Signal um die Daten nicht zu schnell an das 
Display zu schicken.

PPS: Der bisherige Code:
1
#define HINTERGRUND 1
2
#define CONTRAST 2
3
4
void LCDClock(void);
5
void LCD_control(unsigned int LCD, unsigned int lcd_value);
6
7
void main(void){
8
9
int c; 
10
11
WDTCTL = WDTPW + WDTHOLD;                   // Stop WDT
12
BCSCTL1 |= XTS;                           // XT = HF XTAL
13
    
14
ADC12CTL0 = !REF2_5V + REFON;                // Internal 1.5V ref on
15
DAC12_0CTL = DAC12IR + DAC12AMP_5 +DAC12ENC;   // internal reference gain 1 encode
16
17
P1SEL &= 0xDF; // Ausgang für Hintergrund
18
P1DIR |= 0x20; // Ausgang für Hintergrund
19
20
P5SEL = 0x00; // Ausgänge für LCD
21
P5DIR = 0x1F; // P5.0 bis P5.4 ==> Output
22
P5OUT = 0x00;
23
24
P5OUT |= 0x01;  //CS high
25
P5OUT |= 0x08;  // Clock auf High
26
P5OUT &= 0xEF;   // Reset auf LOW 
27
  
28
  
29
LCD_control(HINTERGRUND,ON);
30
LCD_control(CONTRAST, 0xFFFF);
31
32
// Initialiase
33
  
34
  
35
  wait(50000);
36
  LED_control(1,GELB);
37
  c=0;
38
  
39
40
//############################# LCD Clear 
41
  P5OUT &= 0xFE;  //CS low beginn of Data
42
  P5OUT |= 0x04;  // --> 1     
43
  LCDClock();   // SID = 1  Synchronisieren    
44
  LCDClock();  // SID = 1
45
  LCDClock();  // SID = 1
46
  LCDClock();  // SID = 1
47
  LCDClock();  // SID = 1 
48
49
  P5OUT &= 0xFB;   // --> 0
50
  LCDClock();  // SID = 0  
51
  LCDClock();  // SID = 0  
52
  LCDClock();  // SID = 0
53
  
54
  P5OUT |= 0x04;   // --> 1      Reset
55
  LCDClock();  // SID = 1    D0
56
  P5OUT &= 0xFB;   // --> 0
57
  LCDClock();  // SID = 0    D1   
58
  LCDClock();  // SID = 0    D2
59
  LCDClock();  // SID = 0    D3
60
  
61
  P5OUT &= 0xFB;   // --> 0    
62
  LCDClock();  // SID = 0    
63
  LCDClock();  // SID = 0    
64
  LCDClock();  // SID = 0    
65
  LCDClock();  // SID = 0
66
  P5OUT &= 0xFB;   // --> 0    
67
  LCDClock();  // SID = 0    D4
68
  LCDClock();  // SID = 0    D5  
69
  LCDClock();  // SID = 0    D6
70
  LCDClock();  // SID = 0    D7
71
  
72
  P5OUT &= 0xFB;   // --> 0    
73
  LCDClock();  // SID = 0  
74
  LCDClock();     // SID = 0        
75
  LCDClock();  // SID = 0     
76
  LCDClock();  // SID = 0  
77
  
78
  P5OUT |= 0x01;  // CS high 
79
//############################# LCD Clear   
80
  
81
  LED_control(1,GRUEN);
82
  wait(5000);
83
  LED_control(1,GELB);
84
  
85
//############################# Return Home 
86
    P5OUT &= 0xFE;  //CS low beginn of Data
87
    P5OUT |= 0x04;  // --> 1     
88
  LCDClock();     // SID = 1  Synchronisieren    
89
  LCDClock();    // SID = 1
90
  LCDClock();    // SID = 1
91
  LCDClock();    // SID = 1
92
  LCDClock();    // SID = 1 
93
94
  P5OUT &= 0xFB;   // --> 0
95
  LCDClock();    // SID = 0
96
  LCDClock();    // SID = 0
97
  LCDClock();    // SID = 0
98
  
99
  P5OUT |= 0x04;   // --> 1Return Home
100
  LCDClock();  // SID = 1    D0  
101
  LCDClock();  // SID = 1    D1   
102
  P5OUT &= 0xFB;   // --> 0
103
  LCDClock();  // SID = 0    D2
104
  LCDClock();  // SID = 0    D3
105
  
106
  P5OUT &= 0xFB;   // --> 0    
107
  LCDClock();     // SID = 0    
108
  LCDClock();  // SID = 0    
109
  LCDClock();  // SID = 0    
110
  LCDClock();  // SID = 0
111
  
112
  P5OUT &= 0xFB;   // --> 0    
113
  LCDClock();  // SID = 0    D4
114
  LCDClock();  // SID = 0    D5  
115
  LCDClock();  // SID = 0    D6
116
  LCDClock();  // SID = 0    D7
117
  
118
  P5OUT &= 0xFB;   // --> 0    
119
  LCDClock();  // SID = 0  
120
  LCDClock();  // SID = 0        
121
  LCDClock();  // SID = 0     
122
  LCDClock();  // SID = 0  
123
  
124
  P5OUT |= 0x01;          // CS high /
125
//############################# Return Home 
126
  
127
  LED_control(1,GRUEN);
128
  wait(5000);
129
  LED_control(1,GELB);
130
  
131
//############################# Entry Mode Set 
132
133
  P5OUT &= 0xFE;  //CS low beginn of Data
134
  P5OUT |= 0x04;  // --> 1     
135
  LCDClock();   // SID = 1  Synchronisieren    
136
  LCDClock();  // SID = 1
137
  LCDClock();  // SID = 1
138
  LCDClock();  // SID = 1
139
  LCDClock();  // SID = 1 
140
141
  P5OUT &= 0xFB;   // --> 0
142
  LCDClock();  // SID = 0
143
  LCDClock();     // SID = 0  
144
  LCDClock();  // SID = 0
145
  
146
  P5OUT &= 0xFB;   // --> 0    Entry Mode
147
  LCDClock();  // SID = 0    D0  
148
  LCDClock();  // SID = 0    D1   
149
  P5OUT |= 0x04;   // --> 1  
150
  LCDClock();  // SID = 1    D2
151
  P5OUT &= 0xFB;   // --> 0
152
  LCDClock();  // SID = 0    D3
153
  
154
  P5OUT &= 0xFB;   // --> 0    
155
  LCDClock();  // SID = 0    
156
  LCDClock();  // SID = 0    
157
  LCDClock();  // SID = 0    
158
  LCDClock();  // SID = 0
159
  
160
  P5OUT &= 0xFB;   // --> 0    
161
  LCDClock();     // SID = 0    D4
162
  LCDClock();  // SID = 0    D5  
163
  LCDClock();  // SID = 0    D6
164
  LCDClock();  // SID = 0    D7
165
  
166
  P5OUT &= 0xFB;   // --> 0    
167
  LCDClock();  // SID = 0  
168
  LCDClock();  // SID = 0        
169
  LCDClock();  // SID = 0     
170
  LCDClock();  // SID = 0  
171
  
172
  P5OUT |= 0x01;          // CS high /
173
174
//############################# Entry Mode Set 
175
176
  LED_control(1,GRUEN);
177
  wait(5000);
178
  LED_control(1,GELB);
179
  
180
//############################# Display ON/OFF Control 
181
  P5OUT &= 0xFE;  //CS low beginn of Data
182
  P5OUT |= 0x04;  // --> 1     
183
  LCDClock();     // SID = 1  Synchronisieren    
184
  LCDClock();  // SID = 1
185
  LCDClock        // SID = 1
186
  LCDClock();  // SID = 1
187
  LCDClock();  // SID = 1 
188
189
        P5OUT &= 0xFB;   // --> 0
190
  LCDClock();     // SID = 0
191
  LCDClock();  // SID = 0
192
  LCDClock();  // SID = 0
193
  P5OUT &= 0xFB;   // --> 0        
194
  LCDClock();  // SID = 0    D0  
195
  P5OUT |= 0x04;   // --> 1  
196
  LCDClock();     // SID = 1    D1   
197
  LCDClock();  // SID = 1    D2
198
  LCDClock();  // SID = 1    D
199
  
200
  P5OUT &= 0xFB;   // --> 0    
201
  LCDClock();  // SID = 0    
202
  LCDClock();  // SID = 0    
203
  LCDClock();  // SID = 0    
204
  LCDClock();  // SID = 0
205
  
206
  P5OUT &= 0xFB;   // --> 0    
207
  LCDClock();  // SID = 0    D4
208
  LCDClock();  // SID = 0    D5  
209
  LCDClock();  // SID = 0    D6
210
  LCDClock();  // SID = 0    D7
211
  
212
  P5OUT &= 0xFB;   // --> 0    
213
  LCDClock();  // SID = 0  
214
  LCDClock();  // SID = 0        
215
  LCDClock();  // SID = 0     
216
  LCDClock();  // SID = 0  
217
  
218
        P5OUT |= 0x01;  // CS high /
219
220
//############################# Display ON/OFF Control 
221
  
222
  LED_control(1,GRUEN);
223
  wait(5000);
224
  LED_control(1,GELB);
225
  
226
//############################# Mode 
227
228
  P5OUT &= 0xFE;  //CS low beginn of Data
229
  P5OUT |= 0x04;  // --> 1     
230
  LCDClock();   // SID = 1  Synchronisieren    
231
  LCDClock();  // SID = 1
232
  LCDClock();  // SID = 1
233
  LCDClock();  // SID = 1
234
  LCDClock();  // SID = 1 
235
236
        P5OUT &= 0xFB;   // --> 0
237
  LCDClock();     // SID = 0
238
  LCDClock();  // SID = 0  
239
  LCDClock();  // SID = 0
240
  
241
  P5OUT |= 0x04;   // --> 1        
242
  LCDClock();  // SID = 1    D0    
243
  LCDClock();  // SID = 1    D1   
244
  LCDClock();  // SID = 1    D2
245
  LCDClock();  // SID = 1    D3
246
  
247
  P5OUT &= 0xFB;   // --> 0    
248
  LCDClock();     // SID = 0    
249
  LCDClock();     // SID = 0    
250
  LCDClock();     // SID = 0    
251
  LCDClock();     // SID = 0
252
  
253
  P5OUT &= 0xFB;   // --> 0    
254
  LCDClock();  // SID = 0    D4
255
  LCDClock();  // SID = 0    D5  
256
  LCDClock();  // SID = 0    D6
257
  LCDClock();  // SID = 0    D7
258
  
259
  P5OUT &= 0xFB;   // --> 0    
260
  LCDClock();  // SID = 0  
261
  LCDClock();  // SID = 0        
262
  LCDClock();  // SID = 0     
263
  LCDClock();  // SID = 0  
264
  
265
    P5OUT |= 0x01;  // CS high /
266
267
//############################# Mode 
268
  LED_control(1,GRUEN);
269
  wait(5000);
270
  LED_control(1,GELB);
271
272
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
273
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
274
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
275
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
276
277
278
  c=0;
279
  while(c!=100)
280
    {
281
//############################# DATA 
282
        
283
P5OUT &= 0xFE;        //CS low beginn of Data
284
      wait(1000);
285
        
286
P5OUT |= 0x04;  // --> 1     
287
  LCDClock();   // SID = 1  Synchronisieren    
288
  LCDClock();  // SID = 1
289
  LCDClock();  // SID = 1
290
  LCDClock();  // SID = 1
291
  LCDClock();  // SID = 1 
292
    
293
P5OUT &= 0xFB;   // --> 0
294
  LCDClock();  // SID = 0    R/W
295
P5OUT |= 0x04;  // --> 1  
296
        LCDClock();  // SID = 1    RS
297
P5OUT &= 0xFB;   // --> 0    
298
  LCDClock();  // SID = 0
299
      
300
P5OUT &= 0xFB;   // --> 0      
301
  LCDClock();  // SID = 0    D0  schreibe f  
302
P5OUT |= 0x04;   // --> 1  
303
  LCDClock();  // SID = 1    D1   
304
  LCDClock();  // SID = 1    D2
305
P5OUT &= 0xFB;   // --> 0
306
  LCDClock();  // SID = 0    D3
307
      
308
P5OUT &= 0xFB;   // --> 0    
309
  LCDClock();  // SID = 0    
310
  LCDClock();  // SID = 0    
311
  LCDClock();  // SID = 0    
312
  LCDClock();  // SID = 0
313
P5OUT &= 0xFB;   // --> 0    
314
  LCDClock();  // SID = 0    D4
315
P5OUT |= 0x04;   // --> 1
316
  LCDClock();  // SID = 1    D5  
317
  LCDClock();  // SID = 1    D6
318
P5OUT &= 0xFB;   // --> 0
319
  LCDClock();  // SID = 0    D7
320
      
321
P5OUT &= 0xFB;   // --> 0    
322
        LCDClock();  // SID = 0  
323
        LCDClock();  // SID = 0        
324
        LCDClock();  // SID = 0     
325
  LCDClock();  // SID = 0  
326
      
327
  P5OUT |= 0x01;    // CS high /
328
  
329
//############################# DATA 
330
331
    LED_control(1,ROT);  
332
    wait(1000);
333
    c++;
334
    }
335
  
336
  LED_control(1,GRUEN);
337
}
338
339
void wait(unsigned int i) // delay function
340
{
341
  unsigned int j;
342
  for(j=0;j<i;j++);
343
}
344
345
346
347
348
void LCDClock(void)
349
{
350
     P5OUT |= 0x08;   //  High
351
   wait(1000);
352
  P5OUT &= 0xF7;  // Clock auf low
353
  wait(1000);
354
  P5OUT |= 0x08;   //  High
355
  wait(1000);
356
}
357
358
void LCD_control(unsigned int LCD, unsigned int lcd_value){
359
  if(LCD == HINTERGRUND){
360
    if(lcd_value == 0){
361
    P1OUT &= 0xDF; // Hintergrundbeleuchtung ausschalten
362
    }
363
    if(lcd_value >= 1){
364
    P1OUT |= 0x20; // Hintergrundbeleuchtung einschalten
365
    }
366
  }
367
  if(LCD == CONTRAST){
368
    DAC12_0DAT = lcd_value; //setze Kontrastwert
369
  }
370
  if(LCD == INIT){
371
    
372
  }  
373
}

von Jack B. (jackbraun)


Lesenswert?

>>Wichtige Regeln - erst lesen, dann posten!

Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ja, bitte.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.