RS 232 am Capri Z180

https://www.youtube.com/watch?v=12Pm2nniUdo
Genutzt wird Channel1 TXA1, RXA1
Das Datenblatt des Mikroprozessors gibt Auskunft welche Register wie zu konfigurieren sind. Hier im folgenden ein Excerp aus dem Zilog Datenblatt des Z180
Excerp / Registers ASCI (asynchronous serial communicationi interface) -> serielle Schnittstelle

Parametrisierung der Register

; Configure Time Constant for BRG (TCHR1L,TCHR1H)        LD      A,$0        OUT0    (TCHR1H),A
       LD      A,$9
       OUT0    (TCHR1L),A         ;57600 ; set Clock Source  (phi / 10240)-->06h (bit2,1,0 of CNTLB1)
       LD      A,$06
       OUT0    (CNTLB1),A         ;bit 7..3 is 0 after reset anyway ; Configure Frame
       LD      A,$14              ;Start+8bit+1Stop
       OUT0    (CNTLA1),A ; Enable BRG
       LD      A,$08            ;set BRG Bit to 1
       OUT0    (ASEXT1),A ; Enable Transmit Line
       IN0     A,(CNTLA1)
       OR      A,$30              ;Enable Bit TE
       OUT0    (CNTLA1),A

Software zur Ausgabe eines einzelnen Zeichens

writeZ:
; put value 5  into transmit data register

wait:        IN0     A,(STAT1)
       AND     A,$02
       CP      A,$02
       JP      NZ,wait
       LD      A,5
       OUT0    (TDS1),A
       JP      writeZ

Prüfen der Logik Pegel am Level-Shifter MAX233

Der MAX233 Level Shifter ist ebenso vom Schaltplan und vom Boardlayout her falsch bedrahtet. Zwei vermeintliche Eingänge (es sind schon eingänge… denke ich) sind gutgemeint auf GND gelegt. Jedoch scheint dies dem MAX 233 nicht gut zu tun. Das IC (chip / integrated circuit) wurde heiss. So lange, bis ich die entsprechenden PINs (Anschlussbeinchen) von den Lötpads "weggehoben" habe. Jedoch bis dahin, erfuhr das IC eine Menge Hitze. Wie es derzeit aussieht, ging das IC dadurch kaputt. 
Dies zeigt sich, wenn man das serielle Signal von der TTL Seite her betrachtet. Es hat ein TTL Spannungspegel bei logisch 1 von 5 V → das ist richtig. Der TTL Spannungspegel bei logisch 0 sollte jedoch unterhalb von 0.8V liegen. Die Messung mit dem Oszilloskop zeigt jedoch dass dort ein offset (Spannungsversatz) von +2V vorhanden ist. Das zeigt nachfolgendes Bild.
Da für den MAX233 am Eingang ein als logisch 0 zu wertendes Signal durch eine kleinere Spannung als 0.8V angeboten werden muß - dieses sich aber nur mit mindestens 2V anbietet - würde der MAX233 konstant ein logisch 1 wahrnehmen und entsprechend verfahren. Der entsprechende Ausgang des MAX233 würde demnach konstant ein logisch 1 in Form von RS232 spezifischen Spannungspegeln ausgeben. –> Die zu übertragenden Worte würden sich also immer gleichermaßen nach "nichts ordentliches" anhören. Man könnte auch sagen, dass die serielle Schnittstelle an dieser Stelle nuschelt. 
 
Jetzt war die Frage von wo kommen diese +2V ? Kommt dieser Offset vom Prozessor, oder vom angeschlossenen IC (dem MAX233) ? Um dies zu prüfen ist der Eingangs-Pin (Anschlussbeinchen) vom Levelshifter für TTL In ebenso vom Lötpad hochgehoben worden. 
Bei der anschliessenden Messung ergibt sich nun folgendes elektrisch betrachtet richtiges Bild.
Es zeigt nun korrekte TTL Spannungspegel. Das logisch 1 wird durch 5V repräsentiert. Das logisch 0 wird mit 0V (GND-potential) dargestellt. Ergo: Das IC MAX233 hat sich verabschiedet, bedeutet : ist defekt. Also wurde es ausgelötet… sieht etwas martialisch aus. (Mir tat es auch weh)
Letztenendes nach wiedereinlöten eines Ersatzteils für den MAX233 und legen einer ebenso, später festgestellten, notwendigen GND Leitung ist der MAX233 ordentlich in Betrieb und wandelt die zu sendenden TTL bits in RS232 entsprechende Signals um.

Anbinden an Laptop als Host (Host empfängt)

Erste Übung ist ein Programm zu schreiben, welches simpel ein "Buchstabe" an den Host Computer schickt. Es wird ein Terminalprogrammm genutzt, welches auf COM4 hört und mit 57k 8n1 konfiguriert ist. An dieser Stelle, mit diesem Programm wird nur geprüft ob der Host Computer Daten vom CAPRI Z180 empfangen kann.
Auf der linken Seite des Bildes ist ein Terminalprogramm gezeigt, welches bereits die empfangenen Buchstaben (immer der selbe - da der CAPRI Z180 wieder in einer endlos Schleifen schickt…) darstellt. Es ist der Buchstabe "K" der auf der rechten Seite des Assembler Programms markiert ist. Im Vordergrund (vor dem Terminalprogramm) ist dessen Konfigurationsseite eingeblendet, in dem man die Übertragungsparameter konfiguriert - also die Empfangsgeschwindigkeit der Worte. Es ist hier auch 57600 baud gesetzt (56kbit/s) . Das war im übrigen in den 90zigern so der Traum an Modem geschwindigkeiten, bevor ISDN und später DSL eingeführt worden ist. Wir erinnern uns.. boah… ein 56k Modem. Rock'n Roll !

Zweite Übung: Direkte Rückantwort (echoing) von empfangen Daten

Das Controlregister wurde soweit verändert dass auch der Empfänger aktiv ist. Ein kleines Programm wurde geschrieben welches im Poll Betrieb darauf wartet dass der Empfangsbuffer meldet, dass ein Wort zur Abholung bereit steht. Dieses wird in die Schleife mit einbezogen um letzten endes dieses wieder auszugeben.
Die obere Kurve zeigt die elektrische repräsentation des zum CAPRI Z180 Board gesendeten Zeichens. Die Untere Kurve zeigt die elektrische "rück" Übermittlung zum Absender (dem Laptop mit einem Terminalprogram. Das Terminalprogram ist im folgenden abgebildet.
Zu guter letzt ist hier ein Teil des Assembler Quellcodes dargestellt. Es zeigt oben das polling auf den leeren Sendebuffer und weiter unten auf den gefüllten Empfangsbuffer. Den Wert aus dem Empfangsbuffer wird in das generische B-Register zwischengespeichert. Beim wieder antritt der Schleife wird dieses Byte genommen (das Byte entspricht der gedrückten Taste) und in den Sendebuffer gelegt.
writeZ:
; put value 5  into transmit data register

wait:      IN0     A,(STAT1)       
              AND     A,$02  
              CP      A,$02
               JP      NZ,wait
              LD      A,B
              OUT0    (TDS1),A
              JP      waitRX
set20:    IN0     A,(CCR)        
              OR      $80
             OUT0    (CCR),A
              jp prog
waitRX:        IN0     A,(STAT1)
              AND     A,$80
              CP      A,$80  
              JP      NZ,waitRX
              IN0     A,(RDR1)  
              LD      B,A       
 JP      writeZ