Forum: Mikrocontroller und Digitale Elektronik T6963 Fehlerhafte Darstellung im Textmodus


von hans23 (Gast)


Angehängte Dateien:

Lesenswert?

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....

von hans23 (Gast)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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

von hans23 (Gast)


Lesenswert?

>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 :(....

von hans23 (Gast)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

Hi

Du weisst, das bei Autowrite ein anderes BusyFlag abgefragt werden muss?

MfG Spess

von hans23 (Gast)


Lesenswert?

stimmt. Aber tut leider auch nichts zur Sache...

von spess53 (Gast)


Lesenswert?

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

von hans23 (Gast)


Lesenswert?

>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

von hans23 (Gast)


Lesenswert?

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

von hans23 (Gast)


Angehängte Dateien:

Lesenswert?

hier dann nochmal das Bild wie es im normalen Modus aussieht. (ist zwar 
im Archiv, aber hier nochmal einzeln)

von Jens (Gast)


Lesenswert?

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.

von hans23 (Gast)


Lesenswert?

Daran liegts leider auch nicht. Hab das nochmal überprüft.

von hans23 (Gast)


Lesenswert?

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)...

von hans23 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.