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