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
Ein Beispielcode für den KS 0107/8 bzw. HD 61202/3 würde mir auch schon viel helfen! Ich finde keines...
>cbi PORTD,6 ;write >sbi PORTD,5 ;data Tue hier erstmal die Bitnamen eintragen. Die hier: ;PD6 = R/W ;PD5 = D/I ;PD4 = RES ;PD3 = E2 ;PD2 = E1 Dann kan man sich das ja mal ansehen
>Ein Beispielcode für den KS 0107/8 bzw. HD 61202/3 würde mir auch schon >viel helfen! Ich finde keines... Was bist du denn für ein Volldepp?
Hi Ich habe dir mal ein paar Routinen aus einer alten Datei von mir zusammenkopiert. Ist aber vor 9 Jahren das letzte mal benutzt worden. War für den 61202. Überprüfe mal deine Verdrahtung. MfG Spess
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!
;PORTC = D0-D7 ;PD6 = R/W ;PD5 = D/I ;PD4 = RES ;PD3 = E2 ;PD2 = E1 Der KS108 hat einen Enable Pin. Ein 128x64 Display hat zwei CS Pins. Einer von den drei fehlt hier.
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
>Der KS108 hat einen Enable Pin. >Ein 128x64 Display hat zwei CS Pins. >Einer von den drei fehlt hier. Uuups, vergiss es. Datenblatt nicht gelesen :(
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????
Jeha! geht!! Danke!!! Wenn du mir jetzt noch sagst wie du darauf gekommen bist, bin ich glücklich :)
Hi Als du die vier Bit erwähnt hast. Plus PortC. Du bist nicht der Erste, und mit Sicherheit nicht der Letzte, dem das passiert ist MfG Spess
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.