Forum: Mikrocontroller und Digitale Elektronik DOGL Display über 80C517A ansteuern funktioniert nicht


von blutengel (Gast)


Lesenswert?

Hallo,


ich versuche schon seit Stunden ein DOGL Display mit einem 80C517A 
anzusteuern. An meinem AVR Board funktioniert das problemlos, also kann 
der Fehler nicht am GLCD liegen.

Leider tut sich auf dem GLCD gar nichts.Ich bin schon am verzweifenl.

Hier mal der Code:
1
$INCLUDE (reg517aw.inc)
2
3
4
5
6
7
Daten       EQU R5
8
Column_counter   EQU  R6
9
Page_counter   EQU  R7
10
Spiout       EQU P1.7        ;SI
11
Spiin      EQU  P1.5        ;A0
12
Clock       EQU P1.6        ;SCL
13
CS        EQU  P1.3        ;CS1B
14
Reset      EQU  P1.4        ;Reset
15
16
17
18
MOV    Column_counter,#0128D
19
MOV    Page_counter,#0B0H
20
SETB  Reset
21
clr   Clock
22
Lcall   Glcd_init
23
Lcall   Glcd_clear
24
;__________________________________________________________________
25
Haupt:
26
    
27
  
28
    CLR      CS
29
    SETB    Spiin
30
    MOV      Daten,#01H
31
    LCALL    SPI_SEND
32
    MOV      Daten,#01H
33
    LCALL    SPI_SEND
34
    MOV      Daten,#01H
35
    LCALL    SPI_SEND
36
    MOV      Daten,#0FFH
37
    LCALL    SPI_SEND
38
    MOV      Daten,#01H
39
    LCALL    SPI_SEND
40
    MOV      Daten,#01H
41
    LCALL    SPI_SEND
42
    CLR      Spiin
43
    
44
    SJMP $
45
46
47
48
         
49
;____________________________________________________________________     
50
51
Glcd_init:
52
53
          SETB  CS
54
          LCALL  Warte_30ms
55
          CLR    CS
56
          CLR    Spiin
57
          CLR    Reset
58
          LCALL  Warte_50ms
59
          SETB  Reset
60
          LCALL  Warte_50ms
61
          MOV    Daten,#040H
62
          LCALL  SPI_SEND
63
          MOV    Daten,#0A1H
64
          LCALL  SPI_SEND
65
          MOV    Daten,#0C0H
66
          LCALL  SPI_SEND
67
          MOV    Daten,#0A6H
68
          LCALL  SPI_SEND
69
          MOV    Daten,#0A2H
70
          LCALL  SPI_SEND
71
          MOV    Daten,#02FH
72
          LCALL  SPI_SEND
73
          MOV    Daten,#0F8H
74
          LCALL  SPI_SEND
75
          MOV    Daten,#000H
76
          LCALL  SPI_SEND
77
          MOV    Daten,#027H
78
          LCALL  SPI_SEND
79
          MOV    Daten,#081H
80
          LCALL  SPI_SEND
81
          MOV    Daten,#016H
82
          LCALL  SPI_SEND
83
          MOV    Daten,#0ACH
84
          LCALL  SPI_SEND
85
          MOV    Daten,#000H
86
          LCALL  SPI_SEND
87
          MOV    Daten,#0AFH
88
          LCALL  SPI_SEND
89
          MOV    Daten,#0A4H
90
          LCALL  SPI_SEND
91
          SETB  CS
92
          LCALL  Warte_50ms
93
          
94
          
95
RET
96
;____________________________________________________________________
97
SPI_SEND:   
98
          MOV     A,Daten
99
          MOV     R4,#8    ; 8 Bits schreiben Schleifenwert
100
Put_spi:          CLR     c
101
                    RRC     A             ; Akku nach Carry
102
                    MOV     Spiout,C       ; Carry nach Port
103
                    SETB    Clock           ; SCLK Impuls
104
                    clr     Clock
105
                    DJNZ    R4,Put_spi
106
RET
107
;____________________________________________________________________  
108
Glcd_clear:
109
110
          CLR    CS
111
          SETB  Spiin  
112
          MOV    Daten,#000H
113
          LCALL  SPI_SEND
114
          CLR    Spiin
115
          DEC    Column_Counter
116
          MOV    A,Column_counter
117
          JNZ    Glcd_clear
118
          MOV    Column_counter,#0128D
119
RET
120
;____________________________________________________________________
121
Change_Page:
122
123
          CLR    CS
124
          CLR    Spiin
125
          MOV    A,Page_counter
126
          MOV    Daten,A
127
          LCALL   SPI_SEND
128
          SETB  CS
129
          INC    Page_counter
130
RET
131
;____________________________________________________________________
132
Change_column:
133
          CLR    CS
134
          CLR    Spiin
135
          MOV    Daten,#010H
136
          LCALL   SPI_SEND
137
          MOV    Daten,#010H
138
          LCALL   SPI_SEND
139
          SETB   CS
140
          SETB  Spiin
141
RET
142
;____________________________________________________________________
143
Warte_30ms:
144
145
; Warteschleife: 30 ms
146
;  Anzahl Maschinenzyklen: 30000
147
148
          push   PSW
149
          push   0
150
          push   1
151
          mov   1,#114
152
ws1_labelB1:
153
          mov   0,#37
154
ws1_labelB0:
155
          nop
156
          nop
157
          nop
158
          nop
159
          nop
160
          djnz   0,ws1_labelB0
161
          djnz   1,ws1_labelB1
162
          pop   1
163
          pop   0
164
          pop   PSW
165
       
166
RET
167
;____________________________________________________________________
168
Warte_50ms:
169
; Warteschleife: 50 ms
170
;  Anzahl Maschinenzyklen: 50000
171
172
          push   PSW
173
          push   0  
174
          push   1
175
          mov   1,#134
176
ws2_labelB1:
177
          mov   0,#41
178
ws2_labelB0:
179
          nop
180
          nop
181
          nop
182
          nop
183
          nop
184
          nop
185
          nop
186
          djnz   0,ws2_labelB0
187
          djnz   1,ws2_labelB1
188
          pop   1
189
          pop   0
190
          pop   PSW
191
          
192
RET
193
;_____________________________________________________________________________
194
END

von Klaus (Gast)


Lesenswert?

Ganz spontan würde ich sagen das hier ist falsch.
MOV    Column_counter,#0128D

So viel ich noch weiss passen in einem Register 8 Bit.
Korrigiert mich wenn das falsch sein sollte.


Bleib lieber bei Hex also
MOV    Column_counter,#80h

Sowas kann auch nicht sein:
MOV    Daten,#010H  sollte doch  eher  MOV    Daten,#10H sein.

Fällt dir bei deinem Code was auf.

von blutengel (Gast)


Lesenswert?

Oh da hast du recht. Ich sollte bei einer Form bleiben. Aber was sollte 
mir sonst noch auffallen

von Klaus (Gast)


Lesenswert?

Die nullen! mach die mal alle raus. Du hast doch keine 16Bit Register.


Glcd_init:

          SETB  CS
          LCALL  Warte_30ms
          CLR    CS
          CLR    Spiin
          CLR    Reset
          LCALL  Warte_50ms
          SETB  Reset
          LCALL  Warte_50ms
          MOV    Daten,#040H
          LCALL  SPI_SEND
          MOV    Daten,#0A1H
          LCALL  SPI_SEND


korrigiert:
Glcd_init:

          SETB  CS
          LCALL  Warte_30ms
          CLR    CS
          CLR    Spiin
          CLR    Reset
          LCALL  Warte_50ms
          SETB  Reset
          LCALL  Warte_50ms
          MOV    Daten,#40H
          LCALL  SPI_SEND
          MOV    Daten,#A1H
          LCALL  SPI_SEND

von Thomas E. (thomase)


Lesenswert?

Klaus schrieb:
> Ganz spontan würde ich sagen das hier ist falsch.
> MOV    Column_counter,#0128D
>
> So viel ich noch weiss passen in einem Register 8 Bit.
> Korrigiert mich wenn das falsch sein sollte.

Und wieviel Bit braucht man für 128?

> Bleib lieber bei Hex also
> MOV    Column_counter,#80h
>
> Sowas kann auch nicht sein:
> MOV    Daten,#010H  sollte doch  eher  MOV    Daten,#10H sein.
>
> Fällt dir bei deinem Code was auf.

Klaus schrieb:
> Die nullen! mach die mal alle raus. Du hast doch keine 16Bit Register.

Die einzige Null bist du hier!
1
00000000000000000000000000000000000000000000000000000000000000123 = 123 !!!

mfg.

von Eumel (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Die einzige Null bist du hier!

Sei mal nicht so anal.

von Klaus (Gast)


Lesenswert?

Thomas hast du einen Knall??

128 Dezimal ist nun mal 80h.

Beleidigungen sind wohl hier falsch am Platz.

Wenn es falsch ist was ich geschrieben habe dann erklärs besser.

von Thomas E. (thomase)


Lesenswert?

Klaus schrieb:
> Thomas hast du einen Knall??
Lieber ein Knall als aine Null.

> 128 Dezimal ist nun mal 80h.
Ja und? Deswegen kann er das doch so stehen lassen. Willst du jetzt 
allen zeigen, daß du Dezimal- in Hexzahlen umrechnen kannst?

> Beleidigungen sind wohl hier falsch am Platz.
Siehe oben

> Wenn es falsch ist was ich geschrieben habe dann erklärs besser.
Falsch ist das nicht. Aber vorher war es auch nicht falsch. Also was 
soll das?

mfg.

von Thomas E. (thomase)


Lesenswert?

blutengel schrieb:
> Hallo,
> ich versuche schon seit Stunden ein DOGL Display mit einem 80C517A
> anzusteuern. An meinem AVR Board funktioniert das problemlos, also kann
> der Fehler nicht am GLCD liegen.
> Leider tut sich auf dem GLCD gar nichts.Ich bin schon am verzweifenl.

Der 80C517A ist doch ein alter 5V-Controller und ein DOGL ein 3-3,3V- 
Vertreter. Das passt doch schonmal grundsätzlich nicht.

mfg.

von Klaus (Gast)


Lesenswert?

Hallo Thomas  und  blutengel.

Da muss ich mich selbstverständlich Entschuldigen!
Thomas hat recht.

Liegt wohl daran das ich geraumer Zeit keine Assemblerprogramme 
schreibe.

von bko (Gast)


Lesenswert?

>Der 80C517A ist doch ein alter 5V-Controller und ein DOGL ein 3-3,3V-
>Vertreter. Das passt doch schonmal grundsätzlich nicht.
Aber war der 8051(7) port 1 nicht irgentwas mit open-collector Ausgang?
Da bräuchte es doch nen Pullup oder war der intern?

Da muss ich mal mein Datenblatt abstauben (Hust) und reinschauen,
wo ist denn da die Suchfunktion ...

Oder
>SPI_SEND:
>          MOV     A,Daten
>          MOV     R4,#8    ; 8 Bits schreiben Schleifenwert
>Put_spi:          CLR     c
>                    RRC     A             ; Akku nach Carry
>                    MOV     Spiout,C       ; Carry nach Port
>                    SETB    Clock           ; SCLK Impuls
>                    clr     Clock
>                    DJNZ    R4,Put_spi

Will das olle DOGL-Dsiplay das LSB oder das MSB zuerst?
RRC schiebt das LSB zuerst raus, wenn ich mich nicht irre
http://www.self8051.de/rrc_____a,13728.html
RLC machts dann andersrum
http://www.self8051.de/rlc_____a,13725.html

von blutengel (Gast)


Lesenswert?

>Der 80C517A ist doch ein alter 5V-Controller und ein DOGL ein 3-3,3V-
>Vertreter. Das passt doch schonmal grundsätzlich nicht.




blutengel schrieb:
> An meinem AVR Board funktioniert das problemlos, also kann
> der Fehler nicht am GLCD liegen.

Und wie das funktionieren kann. Es geht hir ja auch nicht um die 
Hardware. Aber damit ihr es wisst, zwischen Bus und Display häng ein
HCF4050 Hex Non Inverting Buffer/Converter der die 5V runterregelt.
Ob ich jetzt eine 0 oder nicht davor stehen habe ändert auch nichts.

Ich hatte gedacht das vielleicht die SPI Ausgabe fehlerhaft ist oder das 
Timing. Auf einem AVR läuft es. Dort habe ich es in Bascom und in 
Assembler programmiert. Auch die SPI Ausgabe habe ich dort selber 
programmiert.

von Wilhelm F. (Gast)


Lesenswert?

Der 80C517A arbeitet in der Regel schon richtig, wenn man ein paar 
Grundregeln beherzigt.

Seine Ports können nur kräftig aktiv low schalten, und haben bei 
High-Pegel einfach nur höherohmige interne Pullups, bzw. schalten bei 
einem Befehl, der High an einen Pin legen soll, diesen Pegel für zwei 
Maschinenzyklen mit einem stärkeren FET, der dann wieder abschaltet.

Wenn man da irgend wo noch zufällig eine andere Last gegen Low an einem 
Pin hat, hat man verloren: Der erreicht bei High keinen TTL-Pegel mehr. 
Die Ports treiben bei High-Pegel nur 80µA.

von Thomas E. (thomase)


Lesenswert?

bko schrieb:
> Will das olle DOGL-Dsiplay das LSB oder das MSB zuerst?
> RRC schiebt das LSB zuerst raus, wenn ich mich nicht irre
> http://www.self8051.de/rrc_____a,13728.html
> RLC machts dann andersrum
> http://www.self8051.de/rlc_____a,13725.html

Da ist was dran. Der Hund will MSB first. Und vom AVR-Spi in 
Default-Einstellung kriegt er das auch.

mfg.

von Peter D. (peda)


Lesenswert?

Die führende 0 ist kein Fehler, sondern Absicht!

Zumindest der 8051 Assembler fordert, daß Werte immer mit einer Ziffer 
anfangen müssen.
Daher muß man schreiben:
mov reg8, #0ABh
bzw.:
mov reg16, #0ABCDh

Und der Einheitlichkeit wegen schreibt man dann eben auch:
mov reg8, #001h

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.