Hallo Zusammen! ich habe ein kleines Problem mit dem Pollin Datavision GLCD bzw. mit dem LC7981 Grafik Controller welcher drauf ist. Es ist mir nicht möglich das Display so zu initialisieren das ich irgend ein Zeichen (habe extra den interen "character generator" verwendet) darstellen kann... Das Display bleibt immer nur schwarz. Die diversen Posts hier habe ich schon durchgelesen, aber leider keine konkrete Lösung zu meinem Problem gefunden. Ein weiterer Knackpunkt ist, dass das ganze auf einem Renesas M16C29 funktionieren sollte... Ich wäre dankbar wenn jemand mal den Source Code überfliegen könnte und vielleicht den einen oder anderen Fehler finden würde :o) Besten Dank im Voraus für Eure Hilfe! Gruss Laurent
Ist zwar schon etwas älter hier aber egal.. Ich kenne mich zwar nicht mit deinem Chip aus aber versuch mal so:
1 | #include "sfr29.h" |
2 | #include "main.h" |
3 | |
4 | void wait(void) |
5 | {
|
6 | unsigned int i=0; |
7 | |
8 | for(i=0;i<=100;i++) |
9 | {
|
10 | asm("nop"); |
11 | }
|
12 | |
13 | }
|
14 | |
15 | void lcd_enable(void) |
16 | {
|
17 | p3_2 = 1; //Enable high |
18 | wait(); |
19 | p3_2 = 0; //Enable low |
20 | }
|
21 | |
22 | void lcd_writecom(char com) //Routine für Instruction Befehle |
23 | {
|
24 | p3_1=1; //RS high |
25 | p3_3=0; //RW low |
26 | wait(); |
27 | p0=com; |
28 | wait(); |
29 | lcd_enable(); |
30 | }
|
31 | |
32 | void lcd_writedat(unsigned char data) //Routine für Instruction Daten |
33 | {
|
34 | p3_1=0; //RS low |
35 | p3_3=0; //RW low |
36 | wait(); |
37 | p0=data; |
38 | wait(); |
39 | lcd_enable(); |
40 | }
|
41 | |
42 | void lcd_init(void) |
43 | {
|
44 | p3_0 = 0; //Reset low |
45 | p3_2 = 0; //Enable low |
46 | p3_1 = 0; //RS low |
47 | wait(); |
48 | p3_0 = 1; //Reset high |
49 | |
50 | lcd_writecom(0x00); // mode con |
51 | wait(); |
52 | lcd_writedat(0x3C); // display on |
53 | wait(); |
54 | |
55 | lcd_writecom(0x01); // character pitch |
56 | wait(); |
57 | lcd_writedat(0x77); // 8x8 chars |
58 | wait(); |
59 | |
60 | lcd_writecom(0x02); // characters per line |
61 | wait(); |
62 | lcd_writedat(19); // 20 |
63 | wait(); |
64 | |
65 | lcd_writecom(0x03); // set duty |
66 | wait(); |
67 | lcd_writedat(0x4F); // 1/80 |
68 | wait(); |
69 | |
70 | lcd_writecom(0x04); // set cursor position |
71 | wait(); |
72 | lcd_writedat(0x07); // Cp=8 |
73 | wait(); |
74 | |
75 | lcd_writecom(0x08); // startadress low |
76 | wait(); |
77 | lcd_writedat(0x00); // 0 |
78 | wait(); |
79 | |
80 | lcd_writecom(0x09); // startadress high |
81 | wait(); |
82 | lcd_writedat(0x00); // 0 |
83 | wait(); |
84 | |
85 | lcd_writecom(0x0A); // startadress high |
86 | wait(); |
87 | lcd_writedat(0x00); // 0 |
88 | wait(); |
89 | |
90 | lcd_writecom(0x0B); // startadress high |
91 | wait(); |
92 | lcd_writedat(0x00); // 0 |
93 | wait(); |
94 | }
|
95 | |
96 | void lcd_writebyte(unsigned char byte) |
97 | {
|
98 | lcd_writecom(0x0C); |
99 | lcd_writedat(byte); |
100 | }
|
101 | |
102 | void lcd_setadress( unsigned char x, unsigned char y ) |
103 | {
|
104 | unsigned int adress; |
105 | adress = y*20+x; |
106 | lcd_writecom(0x0A); // writeadress low |
107 | lcd_writedat(adress&255); |
108 | lcd_writecom(0x0B); // writeadress high |
109 | lcd_writedat(adress/256); |
110 | }
|
111 | |
112 | void lcd_clear( void ) |
113 | {
|
114 | unsigned int i; |
115 | lcd_setadress( 0,0 ); |
116 | for (i=0; i<160/8*80; i++) |
117 | lcd_writebyte( 0 ); |
118 | |
119 | }
|
120 | |
121 | |
122 | void main(void) |
123 | {
|
124 | //Port deklaration für GLCD
|
125 | prcr = 0x04; |
126 | /* Set to 80 pin chip */
|
127 | pacr = 0x03; |
128 | |
129 | pd0=0xFF; //Data |
130 | pd3_0=1; //Reset |
131 | pd3_1=1; //RS |
132 | pd3_2=1; //Enable |
133 | pd3_3=1; //R/W |
134 | pd3_4=1; //Chip Enable |
135 | |
136 | |
137 | lcd_init(); |
138 | lcd_clear(); |
139 | lcd_setadress(0,0); |
140 | lcd_writebyte(0x55); |
141 | |
142 | while(1) |
143 | {
|
144 | |
145 | }
|
146 | }
|
Und sicher, dass Ausgänge mit "1" aktiviert sind? Bei AVR ist es glaub so.. Ich weiß nur, dass bei PICs "1" Eingang konfiguriert. LG Nico
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.