Forum: Mikrocontroller und Digitale Elektronik SED1520 122*32 GLCD brauche hilfe bei display initialisierung


von Tobi W. (tobiweber)


Lesenswert?

Hi Leute, ich brauch eure Hilfe, ich bin seit letzter Woche dran ein 
graphisches LC-Display zum laufen zu bringen, aber bisher konnte ich es 
nicht mal Initialisieren, nachdem ich jetzt massenhaft Beiträge 
durchgelesen habe, hab ich mal angefangen mein eigenes Programm zu 
schreiben, dass folgende ist dabei herausgekommen, aber wenn ich es auf 
den µC (Atmega 16L auf STK500 board)spiele dann flimmert das Display 
leicht, in der ersten "Zeile" werden keine Pixel angezeigt und und der 
Rest sieht aus wie ein Schweizer Käse, manche Bildpunkte sieht man, 
andre nicht. Ich hab alle Leitungen zum Display hin bzw. weg durch 
gemessen und alle Signale mit dem Oszi überprüft, der Atmel macht was 
ich will, nur der Controller auf dem LCD nicht:) also liegt das Problem 
denk ich mal irgendwo im Programm, aber ich konnte nichts finden. Das 
hier ist mein erster Versuch in diese Richtung, ich Versuche mich zwar 
durch zuschlagen aber mir passieren noch viele Fehler, wenn jemand vllt. 
eine Idee hat worans liegen könnte nur raus damit

Hier ist noch mein Pinning falls das irgendwas hilft

>Vss (Pin1) = GND
>Vdd (Pin2) = VTG (+5V vom STK 500)
>Vo  (Pin3) = Regelbare gleichspannung, ca 0 - 1,5V...
>A0  (Pin4) = RA1
>CS1 (Pin5) = RA2
>CS2 (Pin6) = RA3
>NC  (Pin7) = RA4
>NC  (Pin8) = RA5
>R/W (Pin9) = RA6
>DB0 (Pin10)= RD0
>DB1 (Pin11)= RD1
>DB2 (Pin12)= RD2
>DB3 (Pin13)= RD3
>DB4 (Pin14)= RD4
>DB5 (Pin15)= RD5
>DB6 (Pin16)= RD6
>DB7 (Pin17)= RD7
>RES (Pin18)= RA7
>A   (Pin19)= 5V (+1 Vorwiderstand ca 4,2V)
>K   (Pin20)= GND

1
.nolist
2
.include "m16def.inc"
3
.list
4
5
.def a        =  r16
6
.def b        =  r17
7
.def c        =  r18
8
.def Temp      =  r19
9
.def Temp1      =  r20
10
.def Temp2      =  r21
11
.equ GLCD_Data    =  PORTD
12
.equ GLCD_DDR_Data  =  DDRD
13
.equ GLCD_Ctrl    =  PORTA
14
.equ GLCD_DDR_Ctrl  =  DDRA 
15
.equ A0        =  PA1
16
.equ CS1      =  PA2
17
.equ CS2      =  PA3
18
.equ RW        =  PA6
19
.equ RES      =  PA7
20
21
22
23
24
ldi Temp,LOW(RAMEND)
25
out SPL,Temp
26
ldi Temp,HIGH(RAMEND)
27
out SPH,Temp 
28
;----------------------
29
cbi GLCD_Ctrl,RES  ;Display resetten vor der
30
sbi GLCD_Ctrl,RES  ;initialisierung
31
;----------------------
32
33
;---------------------------------
34
ldi b,149    ;Zeit die der Controller braucht um sich 
35
loop0:      ;selbst zu initialisieren, ca 15 ms
36
ldi a,99  
37
loop1:
38
dec a
39
brne loop1
40
nop
41
dec b
42
brne loop0
43
nop
44
;---------------------------------
45
46
main:
47
48
ldi a,0xFF        ;PORTS A und D als Ausgänge
49
out DDRD,a        ;definieren
50
out DDRA,a
51
52
rcall GLCD_INIT
53
loop1
54
nop
55
rjmp loop
56
57
;------------------------------------------------
58
GLCD_INIT:        ;Initialisierungsroutine 
59
60
61
ldi a,0b10101111
62
rcall GLCD_COMMAND
63
64
rcall Pause
65
66
ldi a,0b11000100
67
rcall GLCD_COMMAND
68
69
rcall Pause
70
71
ldi a,0b10111001
72
rcall GLCD_COMMAND
73
74
rcall Pause
75
76
ldi a,0b10100000
77
rcall GLCD_COMMAND
78
79
rcall Pause
80
81
ldi a,0b11100000
82
rcall GLCD_COMMAND
83
84
rcall Pause
85
86
ldi a,0b10111000
87
rcall GLCD_COMMAND
88
89
rcall Pause
90
91
ldi a,0b11000000
92
rcall GLCD_COMMAND
93
94
rcall Pause
95
96
ldi a,0b00000000
97
rcall GLCD_COMMAND
98
99
rcall Pause
100
101
ret
102
103
;--------------------------------------------------------
104
GLCD_COMMAND:
105
106
107
108
109
out GLCD_DATA,a
110
111
cbi GLCD_CTRL,A0
112
cbi GLCD_CTRL,CS1    ;mit fallender Flanke an CS1 und CS2 liest der
113
cbi GLCD_CTRL,CS2    ;Controller den akutellen Status des Datenbusses ein
114
115
cbi GLCD_CTRL,RW
116
117
sbi GLCD_CTRL,CS1
118
sbi GLCD_CTRL,CS2
119
120
121
122
ret
123
;----------------------------------------------------------
124
Pause:
125
126
ldi b,149        ;15 ms Wartezeit bevor erneut ein befehl
127
loop2:          ;eingelesen wird
128
ldi a,99  
129
loop3:
130
dec a
131
brne loop3
132
nop
133
dec b
134
brne loop2
135
nop
136
137
ret
138
139
rjmp main

Wenn ich es zum laufen bringen sollte, werde ich versuchen eine 
Anleitung für andere hilflose zu schreiben:)

MfG Tobi

von Mark L. (m2k10) Benutzerseite


Lesenswert?

Wollte mich auch schon mal mit diesem Controller beschäftigen, aber 
derzeit fehlen noch die praktischen Erfahrungen. Kann daher nix dazu 
sagen, ob die Initialisierung so richtig ist.

Was mir an deinem Programm auffiel, war(in GLCD_COMMAND):
1
cbi GLCD_CTRL,RW
ohne zugehöriges sbi bleibt die Leitung auf low und der Controller hängt 
bei Lesen fest.

Soweit ich weiß gibt's beim SED1520 keinen Clear-Befehl, wirre Zeichen 
dürften da normal sein.
Verwendest du 3MHz? Ab 8MHz könnten die Puls-Zeiten zu kurz sein.

Mark

von spess53 (Gast)


Lesenswert?

Hi

>ldi a,0b10101111
>rcall GLCD_COMMAND

So etwas macht man mit Konstanten

   .equ disp_on  = 0b10101111
   ....
   ldi a,disp_on

Der Befehl Display On ist eigentlich der letzte in der Initialisierung. 
Auch der Rest kommt mir beim Überfliegen etwas komisch vor. Lt. 
Datenblatt ist folgendes zu initialisieren:

(a) Display off
(b) Display start line register: First line
(c) Static drive off
(d) Column address counter: Address 0
(e) Page address register: Page 0
(f) Select duty: 1/32
(g) Select ADC: Forward (ADC command D0 = “0”, ADC status flag = “1”)
(h) Read modify write off

Dein 'GLCD_COMMAND:' kannst du so nur in der Initialisierung benutzen. 
Sonst darf nur eine Displayhälfte angesprochen.

>loop1
>nop
>rjmp loop

?????

MfG Spess

von Tobi W. (tobiweber)


Lesenswert?

hey, ja ich weis der pin R/W muss auch low sein um schreiben zu 
können(ich hab den text quasi wortwörtlich von nem pic assembler 
umgeschnipselt hast recht, der gehört raus aber stören tut er auch 
nicht:)), wenn er high ist kannst du daten auslesen, ich verwende 4 MHz, 
aber hast recht, ich füg noch ein paar nops ein, vll bringt das was

mfg tobi

von Tobi W. (tobiweber)


Lesenswert?

@ spess, in meinem Programm kommt noch n bisschen was dass ich nicht mit 
rein gestellt habe, es ist für die Initialisierung nicht wichtig, und 
zum testen wollte ich nicht dass der µC diesen teil abarbeitet also habe 
ich nach die Initialisierung ne Endlosschleife gesetzt, tut mir leid ich 
hab das wohl übersehen


ich hab mir die Reihenfolge von mehreren Quellen aus dem Internet (nicht 
aus dem Datenblatt, bei dem blicke ich nicht ganz durch) geholt, gut 
möglich dass die nicht ganz stimmen, ich probiere es mal mit von dir 
geposteter.

danke, mfg Tobi

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.