EA DIP128-6 LCD Ansteuerprobleme (Wo liegt der Fehler im Code?)

OP #1068236
Lesenswert?

Hallo,
ich habe ein kleines Ansteuerprogroblem mit meinem 128x64 Pixel Display. 
Ich wähle die Spalte und Zeile aus und schreibe dann 3 Register mit den 
Werten 00000000, 11111111 und 10101010 in das Display. Für jedes der 3 
Register wird auch etwas angezeigt, aber etwas völlig willkürliches wie 
mir scheint. Das was angezeigt wird, ist aber jedes Mal gleich.
Datenbaltt vom Display: 
http://www.lcd-module.de/deu/pdf/grafik/dip128-6.pdf
Ich habe mal in den Anhang ein Foto vom Display gemacht und hier ist 
mein Code:

;PORTC = D0-D7
;PD6 = R/W
;PD5 = D/I
;PD4 = RES
;PD3 = E2
;PD2 = E1
.include "m644def.inc"

; Stack initialisieren
ldi r16, LOW(RAMEND)
out SPL, r16
ldi r16, HIGH(RAMEND)
out SPH, r16

;I/O Ports konfigurieren
ldi r16, 255
out DDRA, r16 ; Port A Ausgang
out DDRB, r16 ; Port B Ausgang
out DDRC, r16 ; Port C Ausgang
out DDRD, r16 ; Port D Ausgang

reset:

rcall delay
rcall delay
rcall delay

start:
cbi PORTD,6 ;write
cbi PORTD,5 ;instruction
ldi r16,0b00111111
out PORTC,r16
sbi PORTD,2
rcall delay
cbi PORTD,2




;wähle x 0
cbi PORTD,6 ;write
cbi PORTD,5 ;instruction
ldi r16,0b010111000
out PORTC,r16
sbi PORTD,2
rcall delay
cbi PORTD,2

;wähle y 0
cbi PORTD,6 ;write
cbi PORTD,5 ;instruction
ldi r16,0b01000000
out PORTC,r16
sbi PORTD,2
rcall delay
cbi PORTD,2




;write data
cbi PORTD,6 ;write
sbi PORTD,5 ;data
ldi r16,0b00000000
out PORTC,r16
sbi PORTD,2
rcall delay
cbi PORTD,2

;write data
cbi PORTD,6 ;write
sbi PORTD,5 ;data
ldi r16,0b11111111
out PORTC,r16
sbi PORTD,2
rcall delay
cbi PORTD,2

;write data
cbi PORTD,6 ;write
sbi PORTD,5 ;data
ldi r16,0b10101010
out PORTC,r16
sbi PORTD,2
rcall delay
cbi PORTD,2


jmp start





delay:

push r19
push r18
push r17
ldi r19,1
miniwt3:
ldi r18,5
miniwt2:
ldi r17,255
miniwt1:
dec r17
cpi r17,0
brne miniwt1
dec r18
cpi r18,0
brne miniwt2
dec r19
cpi r19,0
brne miniwt3
pop r17
pop r18
pop r19
ret



Bitte helft mir! Danke schonmal.
mfg bruegae
Angehängte Dateien:
OP #1068606
Lesenswert?

Ich hab mir spess53's Code angesehen, aber ich kann da nur erkennen, 
dass es da fast genauso funktiniert wie bei mir. Ob ich den enable Pin 
nun auf 0 setze bevor man die Daten anlegt oder hinterher, sollte ja 
wohl egal sein.
Ich hab im Anhang mal man den Code, wie gewünscht, mit erweiterten 
Kommentaren angefügt.

edit: Verkabelung überprüft, musst stimmen!
Angehängte Dateien:
Gast #1068653
Lesenswert?

Hi

>Ob ich den enable Pin nun auf 0 setze bevor man die Daten anlegt oder >hinterher, 
sollte ja wohl egal sein.

Auf S.3 des Datenblattes ist ein Timingdiagramm. Daran kannst du dich 
halten oder nicht.

>dass es da fast genauso funktiniert wie bei mir.

Nein. Mein Code hat damals funktioniert. Deiner nicht.

Mal abgesehen davon, würde ich es heute auch nicht mehr so machen. Ich 
benutze schon seit längerem generell die BUSY-Flag-Abfrage. Das 
Delay-Gedödel habe ich mir schon lange abgewöhnt.

MfG Spess
OP #1069565
Lesenswert?

Ich glaube ich habe jetzt die Quelle des Problems entdeckt. Wenn ich bei 
dem Vorgang, bei dem man die Pixel direkt anspricht und ihnen sagt 
welchen Zustand sie einnehmen sollen (;write data) kann ich die äußeren 
beiden Bits verändern und die Anzeige passt sich entsprechend an. Bei 
den inneren 4 übrigen kann ich hinschreiben was ich will und nichts 
ändert sich.
Ich habe schon einen anderen Controller (atmega 644) draufgesteckt, aber 
das Problem besteht immernoch. Scheint also ein Problem des Displays zu 
sein????

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