Hallo, ich betreibe ein 128x128 Pixel LC Display im Textmodus. Dazu hab ich einfach mal den Zeichensatz von T6963 von den Buchstaben bis zum Ende vom Alphabet ausgegeben. Also von 10h bis 5Ah. Problem: er zeigt mir immer 4 Zeichen an, dann 4 Zeichen leer und dann die nächsten 4 Zeichen. Alternativ zeigt er auch stelle der 4 leeren stellen irgendwelchen müll an. ein Bild davon ist in der RAR-Datei. Ich hab schon probiert die "Text Area" also die Splatenbreite zu variieren, hat aber nichts gebracht. Habt Ihr da noch eine Idee? Ich versuche schon den ganzen Tag das Ding zum laufen zu kriegen....
hier nochmal der config-teil fürs LCD einzeln:
1 | lcd_config
|
2 | |
3 | ;Mode Set |
4 | movlw b'10000100' ;internal ROM, Text only |
5 | call write_command |
6 | |
7 | ;Display Mode |
8 | movlw b'10010110' ;graphic off, text on, cursor on, blink off |
9 | call write_command |
10 | |
11 | ;8 Zeilen Cursor |
12 | movlw 0xA7 |
13 | call write_command |
14 | |
15 | ;Cursor Pointer Set |
16 | movlw 0x00 |
17 | call write_data |
18 | movlw 0x00 |
19 | call write_data |
20 | movlw 0x21 |
21 | call write_command |
22 | |
23 | ;Adress Pointer Set |
24 | movlw 0x00 |
25 | call write_data |
26 | movlw 0x00 |
27 | call write_data |
28 | movlw 0x24 |
29 | call write_command |
30 | |
31 | ;Text Home Adress Set |
32 | movlw 0x00 |
33 | call write_data |
34 | movlw 0x00 |
35 | call write_data |
36 | movlw 0x40 |
37 | call write_command |
38 | |
39 | ;Text Area Set |
40 | movlw d'16' ;Columns |
41 | call write_data |
42 | movlw 0x00 |
43 | call write_data |
44 | movlw 0x41 |
45 | call write_command |
46 | |
47 | ;Set Data Auto Write |
48 | movlw 0xB0 |
49 | call write_command |
50 | |
51 | return
|
Hi Das 'Set Data Auto Write' ist da fehl am Platz. Das ist zum Schreiben grosser Datenmengen in einem Rutsch. Für normale Ausgaben nimmt man 'Data Write' mit Adressincrement. MfG Spess
>Das 'Set Data Auto Write' ist da fehl am Platz. Stimmt. Ich dachte es wär so eine art Voreinstellung, dass man danach die Daten mit ADP auto incement sendet. Was quatsch ist. >Für normale Ausgaben nimmt man 'Data Write' mit Adressincrement. genau das kam bei mir ja gleich danch (halt nur nicht mehr im config teil)
1 | movlw 0x28 |
2 | call write_data |
3 | movlw 0xC0 ;Data Write - Address Pointer Auto Incremented (C0H) |
4 | call write_command |
hab das 'Set Data Auto Write' mal rausgenommen, aber hat auch nicht geholfen :(....
habs jetzt mal mit dem Data Auto Write gemacht, so wie es gedacht ist, aber zeigt mir auch nur die Hälfte an...
1 | ;Data Auto Write |
2 | movlw 0xB0 |
3 | call write_command |
4 | |
5 | movlw 0x28 |
6 | call write_data |
7 | movlw 0x28 |
8 | call write_data |
9 | movlw 0x28 |
10 | call write_data |
11 | movlw 0x28 |
12 | call write_data |
13 | movlw 0x28 |
14 | call write_data |
15 | movlw 0x28 |
16 | call write_data |
17 | movlw 0x28 |
18 | call write_data |
19 | movlw 0x28 |
20 | call write_data |
21 | movlw 0x28 |
22 | call write_data |
23 | movlw 0x28 |
24 | call write_data |
25 | movlw 0x28 |
26 | call write_data |
27 | movlw 0x28 |
28 | |
29 | ;Set Data Auto Reset |
30 | movlw 0xB2 |
31 | call write_command |
Hi Du weisst, das bei Autowrite ein anderes BusyFlag abgefragt werden muss? MfG Spess
Hi
>Aber tut leider auch nichts zur Sache...
Da bin ich anderer Meinung. Poste doch mal deine 'write_data'-Routine.
Ich habe prinzipiell keine Lust irgendwelche Zip-Dateien zu öffnen.
MfG Spess
>Ich habe prinzipiell keine Lust irgendwelche Zip-Dateien zu öffnen.
Okay, konnte ich ja nicht wissen. Ich dachte es wär übersichtlicher als
den ganzen Code hier zu posten.
Naja aber eigentlich will ich den Text ja nicht im Auto Modus schreiben,
aber hier der Code dazu:
1 | write_command
|
2 | movwf command |
3 | ; call wait100ms |
4 | ;status check |
5 | call read_status |
6 | btfss STA0 |
7 | goto write_command |
8 | btfss STA1 |
9 | goto write_command |
10 | |
11 | ;PORTC auf Ausgang umschalten |
12 | banksel TRISC |
13 | movlw d'0' |
14 | movwf TRISC |
15 | banksel PORTC |
16 | |
17 | movfw command |
18 | movwf PORTC |
19 | |
20 | bsf RD_ ;read disabled |
21 | bsf CD_ ;command |
22 | bcf WR_ ;write énabled |
23 | bcf CE_ ;chip enabled |
24 | call wait1ms |
25 | bsf CE_ |
26 | return
|
27 | |
28 | ;wie write_command, nur STA3 abgefragt |
29 | write_auto_command
|
30 | movwf command |
31 | ; call wait100ms |
32 | ;status check |
33 | call read_status |
34 | btfss STA3 |
35 | goto write_auto_command |
36 | |
37 | ;PORTC auf Ausgang umschalten |
38 | banksel TRISC |
39 | movlw d'0' |
40 | movwf TRISC |
41 | banksel PORTC |
42 | |
43 | movfw command |
44 | movwf PORTC |
45 | |
46 | bsf RD_ ;read disabled |
47 | bsf CD_ ;command |
48 | bcf WR_ ;write énabled |
49 | bcf CE_ ;chip enabled |
50 | call wait1ms |
51 | bsf CE_ |
52 | return
|
53 | |
54 | |
55 | ;wie write_data, nur anderes busy-flag wird abgefragt |
56 | write_auto_data
|
57 | movwf txdaten |
58 | ; call wait100ms |
59 | ;status check |
60 | call read_status |
61 | btfss STA3 |
62 | goto write_auto_data |
63 | |
64 | ;PORTC auf Ausgang umschalten |
65 | banksel TRISC |
66 | movlw d'0' |
67 | movwf TRISC |
68 | banksel PORTC |
69 | |
70 | movfw txdaten |
71 | movwf PORTC |
72 | bsf RD_ ;read disabled |
73 | bcf CD_ ;data |
74 | bcf WR_ ;write énabled |
75 | bcf CE_ ;chip enabled |
76 | call wait1ms |
77 | bsf CE_ |
78 | return
|
79 | |
80 | read_status
|
81 | ;PORTC auf Eingang umschalten |
82 | banksel TRISC |
83 | movlw d'255' |
84 | movwf TRISC |
85 | banksel PORTC |
86 | bsf WR_ ;write disabled |
87 | bsf CD_ ;status |
88 | bcf RD_ ;read enabled |
89 | bcf CE_ ;chip enabled |
90 | call wait1ms |
91 | movfw PORTC |
92 | movwf status |
93 | bsf CE_ |
94 | return
|
95 | |
96 | |
97 | write_test_auto
|
98 | ;Set Data Auto Write |
99 | movlw 0xB0 |
100 | call write_command |
101 | |
102 | movlw 0x28 |
103 | call write_auto_data |
104 | movlw 0x28 |
105 | call write_auto_data |
106 | movlw 0x28 |
107 | call write_auto_data |
108 | movlw 0x28 |
109 | call write_auto_data |
110 | movlw 0x28 |
111 | call write_auto_data |
112 | movlw 0x28 |
113 | call write_auto_data |
114 | movlw 0x28 |
115 | call write_auto_data |
116 | movlw 0x28 |
117 | call write_auto_data |
118 | movlw 0x28 |
119 | call write_auto_data |
120 | movlw 0x28 |
121 | call write_auto_data |
122 | |
123 | ;Set Data Auto Reset |
124 | movlw 0xB2 |
125 | call write_auto_command |
126 | |
127 | return
|
hier nochmal der Code für den normalen ADP auto increment mode:
1 | write_command
|
2 | movwf command |
3 | ; call wait100ms |
4 | ;status check |
5 | call read_status |
6 | btfss STA0 |
7 | goto write_command |
8 | btfss STA1 |
9 | goto write_command |
10 | |
11 | ;PORTC auf Ausgang umschalten |
12 | banksel TRISC |
13 | movlw d'0' |
14 | movwf TRISC |
15 | banksel PORTC |
16 | |
17 | movfw command |
18 | movwf PORTC |
19 | |
20 | bsf RD_ ;read disabled |
21 | bsf CD_ ;command |
22 | bcf WR_ ;write énabled |
23 | bcf CE_ ;chip enabled |
24 | call wait1ms |
25 | bsf CE_ |
26 | return
|
27 | |
28 | |
29 | write_data
|
30 | movwf txdaten |
31 | ; call wait100ms |
32 | ;status check |
33 | call read_status |
34 | btfss STA0 |
35 | goto write_data |
36 | btfss STA1 |
37 | goto write_data |
38 | |
39 | ;PORTC auf Ausgang umschalten |
40 | banksel TRISC |
41 | movlw d'0' |
42 | movwf TRISC |
43 | banksel PORTC |
44 | |
45 | movfw txdaten |
46 | movwf PORTC |
47 | bsf RD_ ;read disabled |
48 | bcf CD_ ;data |
49 | bcf WR_ ;write énabled |
50 | bcf CE_ ;chip enabled |
51 | call wait1ms |
52 | bsf CE_ |
53 | return
|
54 | |
55 | |
56 | read_status
|
57 | ;PORTC auf Eingang umschalten |
58 | banksel TRISC |
59 | movlw d'255' |
60 | movwf TRISC |
61 | banksel PORTC |
62 | bsf WR_ ;write disabled |
63 | bsf CD_ ;status |
64 | bcf RD_ ;read enabled |
65 | bcf CE_ ;chip enabled |
66 | call wait1ms |
67 | movfw PORTC |
68 | movwf status |
69 | bsf CE_ |
70 | return
|
71 | |
72 | write_char
|
73 | call write_data |
74 | movlw 0xC0 |
75 | call write_command |
76 | return
|
77 | |
78 | write_test2
|
79 | |
80 | movlw 0x0F |
81 | movwf ziffer |
82 | zloop
|
83 | incf ziffer,f |
84 | movfw ziffer |
85 | call write_char |
86 | movfw ziffer |
87 | sublw 0x5A |
88 | btfss zero |
89 | goto zloop |
90 | |
91 | return
|
hier dann nochmal das Bild wie es im normalen Modus aussieht. (ist zwar im Archiv, aber hier nochmal einzeln)
Mich stürt an dem Bild noch was ganz anderes, nämlich das in den Vierergruppen das 2. und 3. Zeichen vertauscht sind. Kann es sein, das zufälligerweise die Datenleitungen D0 und D1 vertauscht sind und das Display dadurch falsch initialisiert wurde. Nur so ein Gedanke.
Daran liegts leider auch nicht. Hab das nochmal überprüft.
Naja aber wenn die Datenleitungen vertauscht sind, würde er ja gar nichts anzeigen. Ich hab mir jetzt unzählige Beispiele angeguggt und die machen auch nichts anderes. Hab auch schon verscheidene RAM Adressen probiert, und OR Modus usw, aber tut sich nichts. Vielleicht liegts ja an den Unterprogrammen "Daten senden" etc. Ist eigentlich die Reihenfolde in der man die Pins (C/D RW WR setzt egal ? Also natürlich bevor man CE auf low setzt. Nach dem CE low hab ich ihm ja auch genug Zeit gegeben (1ms)...
So hab das Problem gelöst. Ich hab ja viel rumprobiert, aber die gravierendste Änderung war vermutlich, dass ich auf den OR Modus gewechselt habe. (Obwohl ich das zwischendurch auch mal gemacht hatte, aber ohen Erfolg - warum auch immer). Vermutlich will er im Text Modus noch mehr haben...
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.