Posts mit dem Label Display werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Display werden angezeigt. Alle Posts anzeigen

Dienstag, 29. November 2011

Grafisches Display am Z80

Zum Testen und als erste halbwegs sinnvolle Anwendung der neuen Platine habe ich ein grafisches LCD-Display mit 128x64 Auflösung angebunden:
Z80 mit Display
Das ist ein DEM 128064A SYH-LY mit einem 8-Bit-Interface. Das Interface besteht im Wesentlichen aus dem 8-Bit-Datenbus, einer Register Select Leitung (RS), zwei high-aktive ChipSelects (CS1,CS2), high-aktives Enable (E) und low-aktives Reset (RSTB).
Das Display ist aus zwei Segmenten mit 64x64 Pixeln aufgebaut, betrieben durch je einem Treiber-IC S6B0108. Deswegen gibt es auch die beiden Chip Selects CS1, CS2. Mit CS1 selektiert man den linken Teil des Displays, mit CS2 den rechten. Register Select bestimmt, ob das Datum auf dem Datenbus ein Befehl für einen Treiber-IC ist (RS=low), oder in den Speicher des Displays geschrieben werden soll (RS=high). Bei einer fallenden Flanke von E wird das Datum vom Datenbus vom selekierten IC gelatcht und dort entsprechend verwurstet.

Montag, 21. Februar 2011

Es funzt!!

Mann mann, das war frustrierend! Manchmal hat die Schaltung funktioniert, sprich der Z80 hat über den UART mit mir gesprochen. Dann habe ich kleine Änderungen an der Z80-Software gemacht, nämlich Code in Subroutinen gepackt, die mit dem call-Befehl aufgerufen werden. Dann hat es sporadisch funktioniert, aber nach einem Reset wieder nicht. Dann habe ich die alte, funktionierende Version aufgespielt, die dann aber plötzlich nicht mehr funktionierte. Sehr seltsam, genau wie bei meiner alten, selbstverdrahteten Platine! Also habe ich heute eine kleine Display-Platine gebastelt, um zu schauen, ob diese denn ansprechbar ist. Hier trat das gleiche Phänomen auf. Das Problem musste also auf der Main-Platine liegen.
Mir ist dann aufgefallen, das die Masse der Displayplatine unsauber war. Und siehe da: Eine kalte Lötstelle an einer Steckbuchse auf dem Mainboard. Doch das hat das Problem immer noch nicht beseitigt. Da nur Probleme bei Aufrufen von Subroutinen auftraten, bin ich dann endlich mal auf die Idee gekommen, den RAM-Baustein zu testen. Bei einem Lese-/Schreibtest hat sich dann rausgestellt, dass der manchmal Daten nicht richtig speichert. Das erklärt auch, warum der Z80 Probleme mit den Subroutinen hatte. Denn beim Subroutinen-call wird der PC (Program Counter) auf den Stack kopiert, der sich im RAM befindet. Und wenn der RAM den Wert nicht richtig speichert, wird beim return der PC nicht korrekt zurückgesetzt und der Z80 springt sonstwo hin.
Die UART-Platine funktioniert nun auch wie gewünscht.

Hier ein Foto der Display-Platine: