SED1520 122*32 GLCD brauche hilfe bei display initialisierung

OP #2177512
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
(Firma: TH Köln) Persönliche Seite #2177589
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
Gast #2177606
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
OP #2177607
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
OP #2177623
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren