Die Joyce-Echtzeituhr



1. Geschichte

Inspiriert wurde ich durch das DMV-Joyce-Sonderheft 1, in dem Michael Anton über das Betriebssystem des Joyce so viel plaudert. Unter anderem war auch eine Port-Belegung für die Parallel-Seriell-Schnittstelle („CPS") angegeben, und in einem Nebensatz auch etwas über das Innenleben, dieses Kästchens erwähnt. Als ich beim Herumstöbern im XBIOS auch auf die CPS stieß, verglich ich die Ansteuerung durch das XBIOS mit den Datenblättern einiger IC's, die ich großenteils eh besaß, und es stellte sich heraus, welche Typen für die CPS verwendet sein mußten. Ich überlegte - nur so zum Spaß - wie das ganze wohl zusammenwirken mußte, und war erstaunt, mit wie wenig Aufwand das zu bewerkstelligen sein mußte. Zu diesem Zeitpunkt war dann klar, daß ich diese CPS nie kaufen, sondern bei Bedarf selbst bauen würde.

Außerdem wurmte es mich, daß unter CP/M alle möglichen Zeit- und Datumsfunktionen unterstützt werden, aber die Systemzeit nie richtig geht - außer ich stellte sie ein, und das hätte ich oft machen müssen. Kurz und gut, nach einigem Herumtüfteln und Kramen in alten Zeitschriften entschied ich mich für eine Variante und entwarf einen Plan für die gesamte Schaltung: CPS und Echtzeituhr, in einem Gehäuse der Standard CPS. Das alles ging gut und lief planmäßig, funktionierte auch auf Anhieb, nur die Uhr ging nicht. Es war dann noch einiges an Tüftelei, nötig, bis ich feststellte, daß verschiedene Annahmen über das Uhren-IC, die ich ganz gedankenlos, und in Er¬mangelung eines Datenblattes, getroffen hatte, einfach falsch waren. Nach dem Umbau funktioniert alles seit 2 Jahren tadellos, nur neulich fand ich einen Kurzschluß, der den ganzen Joyce lahmlegte und sogar das Booten verhinderte, aber nur wenn's im Zimmer kalt war: Mein Joyce hatte also doch nicht in Nachahmung menschlicher Züge wegen Frierens den Dienst verweigert, wie ich vorher schon angenommen hatte.


2.Vorbemerkungen

Ich beschreibe hier nur den Aufbau der Echtzeituhr, nicht das komplette CPS-Interface. An einigen Stellen werde ich aber auf die mögliche Erweiterung zur kompletten CPS mit Uhr hinweisen.

Eine zum Betrieb der Uhr geeignete Software, das Dienstprogramm „INITTIME", das die CP/M-Systemuhr nach den Daten des RTC stellt und über das man auch den RTC stellen kann, ist bei mir erhältlich.


3. Die Schaltung

Auf dem Schaltplan sieht man alle Komponenten der Uhrerweiterung: Der eigentliche Uhrenbaustein ist der RTC 58321. Dieser Baustein ist zum Basteln ideal: er benötigt keinerlei zusätzliche Beschaltung zum Funktionieren, sogar, der Quarz ist schon eingebaut. Damit. die Uhr auch wirklich weiter¬läuft, wenn der Rechner abgeschaltet wird, braucht sie natürlich eine Stromversorgung. In unserem Fall ist parallel zur Uhr (Pin 16) ein Akku vom Typ MEMpack, also ein sehr kompakter, geschaltet, der über einen Widerstand geladen. wird, sobald die Spannungsversorgung des Rechners aktiv wird. Die Höhe des Widerstandes bestimmt die Ladezeit, ist aber nicht sehr kritisch, da die Uhr extrem wenig Strom braucht. Um den Akku von der restlichen 5Volt-Stromversorgung zu entkoppeln, er soll schließlich nur die Uhr, nicht den ganzen Rechner versorgen, ist eine Schottky-Diode in die Stromzuführung geschaltet. Schottky-Dioden haben im Vergleich zu normalen Halbleiterdioden einen sehr geringen Spannungsabfall, so daß der RTC fast mit vollen 5 Volt betrieben wird, Inwieweit eine normale Diode ausreichen würde, habe ich nicht ausprobiert; schlimmstenfalls könnte der RTC durch die dann sehr viel höhere Spannung an seinen Datenleitungen durch die Pull-Up-Widerstände zerstört werden.

 

Leider reagiert der RTC recht träge auf äußere Signale (siehe Datenblatt). Um z.B. eines seiner Register zu lesen, muß man ihm mindestens 1μs Zeit geben, beim Schreiben sogar doppelt soviel. Die Schrieb/Lesezyklen des Z80-Prozessors im Joyce, der mit 4MHz getaktet wird, wobei ein Takt mithin 0,25μs dauert, laufen in ungefähr 2 Taktzyklen ab, also doppelt bis viermal so schnell wie der RTC reagiert. Als Zwischenspeicher, über den der Prozessor Zugriff auf den RTC hat, fungiert ein Z80-PIO, der zwei 8Bit-parallele Ports hat, Für die Uhr wird nur einer gebraucht, führt man die Ausgänge des anderen auf eine Steckerleiste, hat man zusätzlich noch eine Verbindung „nach außen", z.B. als zweite Druckerschnittstelle, um Relais anzusteuern, um Zustände von außen dem Rechner mitzuteilen etc.

Der Z80-PIO belegt vier I/0-Adressen im Adreßraum des Prozessors. Je zwei davon sind die Adressen für die Ports, also die Verbindung nach außen, und die anderen zwei die zugehörigen Kontrollregister. Diese Kontrollregister enthalten Angaben, ob das zugehörige Port ein Eingabe- oder ein Ausgabeport oder ein bidirektionales Port ist oder jede Leitung des Ports individuell als Ein- oder Ausgabeleitung dienen soll. Außerdem kann man darüber vielfältige Interruptmöglichkeiten an die Z80-CPU steuern.

In unserem Fall wird die PIO gemischt betrieben: Die oberen vier Bits immer als Ausgänge; sie steuern den RTC, die unteren 4 Bits als Datenleitungen, über die je nach Bedarf gelesen oder geschrieben wird. Die Datenleitungen enthalten zusätzlich noch je einen „Pull-Up"-Widerstand, die der RTC braucht, wenn er Daten schicken soll.

Das dritte IC dient der Zuordnung des PIO an ein bestimmtes Adressengebiet. Der verwendete 74LS138 ist ein 3-zu-8-Binär-Decoder, der gemäß dem Inhalt von 3 Auswahlleitungen (SO bis S2) genau einen Ausgang aktiviert. Zusätzlich besitzt er. noch 3 „Enable"-Eingänge, die alle in einem. bestimmten Zustand sein müssen, damit überhaupt ein Ausgang aktiviert wird. Von den 8 Ausgängen wird nur einer verwendet, der den Z80-PIO aktiviert. (Drei weitere Ausgänge steuern in einer erweiterten Schaltung SIO, Centronics-Speicher und Counter-Baustein). Bei der Auswahl der Adresse wird das Adressbit 5 nicht berücksichtigt, was bedeutet daß der 74LS138 sowohl bei OExH als auch bei OCxH als Portadressen reagiert. Der Effekt ist, daß die Uhrenlogik damit im Bereich OCCH...OCFH definiert werden kann, die Bauteile der CPS aber im Bereich von OEOH...OEBH, wie vom XBIOS erwartet. Damit ergeben sich (hoffentlich) keine Konflikte mit irgendwelchen sonstigen Ports im Joyce.

Aufgebaut wurde die Schaltung auf einer Lochrasterplatine, auf die zunächst die Fassungen für die ICs gesteckt wurden. Sämtliche Verbindungen der Platine nach "außen" erfolgten über Pfostensteckverbinder, so daß auch im Wartungs- oder Erweiterungsfall alle Kabel einfach von der Platine abgezogen werden können.. Als die Lage der Bauteile festgelegt war, wurden die IC-¬Fassungen an einigen Punkten angelötet, und die Widerstände, der Akku (Vorsicht., Nicht kurzschließen !) und der Kondensator (richtige Polarität !) so eingelötet, daß später beim Verdrahten die Verbindungswege möglichst kurz werden. Die eigentliche Verdrahtung mit einem dünnen Kupferdraht (gut geeignet ist einer für „WIRE-WRAP-Technik“, bei dem nicht abisoliert werden muß, sondern die Isolierung an den benötigten Stellen einfach mit dem Lötkolben weggeschmolzen wird) beginnt mit den Stromversorgungsleitungen (im Schaltbild zählen und kontrollieren, daß keiner, vergessen wird' !). Dann folgen die restlichen Anschlüsse des Verbindungssteckers, dann die restlichen. Leitungen der PIO. Den Akku verbindet man zweckmäßigerweise erst, nachdem die restliche Verdrahtung abgeschlossen ist: Mit einem Ohmmeter kontrollieren, daß keine Kurzschüsse zwischen Leitungen, die gar keinen Kontakt haben dürfen, da sind, und alle vorgesehenen Kontakte da sind.

An dieser- Stelle eine kurze Betrachtung zum Erweiterungsport-Anschluß: Ich habe einen 50poligen Standard-Centronics-Stecker für Lötanschluß verwendet und den Kabelkasten mit Zugentlastung entfernt, den anderen Teil des Gehäuses, der den Stecker verdeckt, weiterverwendet. An ihm befanden sich zwei Laschen, die normalerweise in den hinteren Teil des Gehäuses rasten. Die habe ich umgebogen und mit je einer Bohrung versehen, wodurch der Stecker am Schnittstellengehäuse festgeschraubt werden konnte. In das Gehäuse muß natürlich vorher (z.B. mittels Laubsäge und Feile) eine gut passende Öffnung gemacht werden, so daß der Steckereinsatz zwar in die Öffnung paßt, aber nicht durchfällt.

Nun werden alle noch fehlenden Verbindungen hergestellt und die Schaltung (noch ohne eingesteckte ICs) an den Joyce gesteckt. Wird der Joyce eingeschalten, muß er sich so verhalten wie immer. Wenn nicht: Ausschalten, Schaltung abziehen und nochmals alle Verbindungen, vor allem zum Expansionport-Stecker, kontrollieren. Mit einem Voltmeter die Spannungen an den IC-¬Fassungen messen: Versorgungsspannung, Masse; bei Daten und Adressleitungen zum Expansionport muß die Spannung, wechseln. Ist bis jetzt alles ok: Rechner ausschalten, Schaltung abziehen und ICs einsetzen, ansonsten noch mal die Verdrahtung kontrollieren (wenn der Joyce abstürzt, wenn eine der Daten- oder Adreßleitungen mit dem Voltmeter berührt wird, ist das kein Grund zur Beunruhigung, man sollte jedoch von vorneherein keine Diskette einschieben), Läuft der Joyce dann wie gewohnt, ist der mechanische Teil erst einmal abgeschlossen.

Nun folgen weitere Tests über Bildschirm und Tastatur. Diese werde ich in einem zweiten Teil beschreiben. Dort werde ich auch auf die Programmierung von PIO und RTC eingehen (Wen das allerdings nicht so sehr interessiert, kann auch einfach das Dienstprogramm INITTIME verwenden, siehe oben).

Damit erstmal Tschüß ... Reiner Seitz

 

       Register des Uhrenchips RTC58321   Als Uhrenbaustein kommt der RTC5B321 zum Einsatz ... Er hat den Quarz bereits eingebaut. was hier besonders wichtig ist, da wir um jeden Quadratmillimeter Platz auf der Platine feilschen mußten.

Der RTC58321 verfügt über einen vier Bit breiten Datenpfad. Über diesen kann die Adresse eines internen Registers eingegeben werden. Dadurch selektiert man einen der 13 Zähler, die im BCD-Format (Binary coded decimal - binär kodierte Dezimalzahl) jeweils eine Stelle der Uhrzeit und des Datums wiedergeben. Die Sekunden-Einer haben die Adresse 0; die Sekunden-Zehner die Adresse 1 und so weiter (siehe Tabelle). Nachdem das Register ausgewählt ist, kann die betreffende Stelle nun ausgelesen oder beschrieben werden.

Für das Uhren-IO laufen die Zugriffe wie folgt ab: Zuerst wird die Adresse eingegeben und der AWRT-Pin für minde¬stens 0.5 µs auf logisch 1 gepulst: Die Adresse braucht nicht vor dem AWRT-Puls angelegt zu werden. da das IC mit R, S-Flipflops an den Eingängen ausgerüstet ist. Nach der fallenden Flanke des AWRT-Signals jedoch muß die Adresse für mindestens 0.1 µs stabil bleiben. Da nun eine Stelle in der Zählerkette ausgewählt ist, kann gelesen oder geschrieben werden. Zum Lesen wird einfach der READ-Pin auf logisch 1 gelegt. Der RTC58321 treibt daraufhin die Datenleitungen, und nach einer Mikrosekunde kann der Zählerstand von den Datenleitungen abgegriffen werden. Zum Schreiben werden die Daten angelegt und der WRITE-Pin auf logisch 1 gesetzt. Auch hier ist ein Vorlauf der Daten nicht erforderlich. Nach frühestens 2µs dürfen das WRITE-Signal und die Daten (hier ohne Nachlauf) wieder entfernt werden.
Nr. Funktion des Registers
0 Sekunden Einer
1 Sekunden Zehner
2 Minuten Einer
3 Minuten Zehner
4 Stunden Einer
5 Stunden Zehner, wobei Bit 3 = 1 für 24h-Zähler
6 Tag der Woche (Mo = 1)
7 Tag Einer
8 Tag Zehner
9 Monat Einer
A Monat Zehner
B Jahr Einer
C Jahr Zehner
D Reset der Sek. Vorteiler bei WRITE
E & F

Taktsignale ausgeben, bei READ:
DO > 1024 Hz
D1 > 1 Hz
D2 > 1/60 Hz (Min. Takt)
D3 > 1/3600 Hz (Std.-Takt)

   

 

  CS1  
Chip-Select
CS2
Chip-Select
WR
Daten schreiben zum RTC
RD
Daten lesen vom RTC
AWRT
Registeradrese schreiben
Stop
internen Uhrentakt vorgeben
Vss
positive Versorgungsspannung (batterie-gepuffert)
D0 ... D3
Adress- und Datenleitungen
Alle Steuerleitungen sind positiv aktiv.
Der Datenbus besitzt offene Kollektorausgänge.