Forum: Mikrocontroller und Digitale Elektronik LC7981 Initialisation


von Laurent (Gast)


Angehängte Dateien:

Lesenswert?

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

von PIC N. (eigo) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.