Das ist ein reiner, sachlicher Fachthread indem man gemeinsam die gefundenen Dinge berichten kann. So dass ein anderer sagen kann: "Das ist bei mir und meinem Board auch genauso".
Ich glaube auch was gefunden zu haben: C64R: Falsche Logikfamilie für die diskrete Logik verwendet?
Moin!
Ich bin durch die Arbeit an meiner eigenen C64-Reinkarnation Bitte melde dich an, um diesen Link zu sehen. vor ein paar Wochen an einem Punkt angelangt, an dem ich mich entscheiden musste, welche Logikfamilie ich für die auf dem Board verteilen diskreten Logikelemente verwende.
Beispielsweise habe ich (wie der C64R auch) auf der Platine nur ein einziges EProm, auf dem Kernal, Basic und CharSet gemeinsam gespeichert werden. Damit die Ansteuerung (lies: Auswahl des richtigen Bereiches) klappt, bedient man sich ein paar logischer Gatter, die zwischen den Select- und Adressleitungen, sowie dem anzusteuernden EProm geschaltet werden.
Siehe diese Ausschnitte aus den Schaltplänen:
Mein "C64xs"-Board:
Bitte melde dich an, um diesen Anhang zu sehen.
Das "C64 Reloaded"-Board
Bitte melde dich an, um diesen Anhang zu sehen.
Für das Problem, welches ich unten beschreibe, dient die Adressleitung A12 als Beispiel. Es betrifft jedoch weite Teile des C64R.
So sind meiner Meinung nach im C64R folgende ICs in der HCT-Logikfamilie anstatt in der HC-Logikfamilie auszuführen:
U8 (aufgrund der Ausgänge der CIA U2)
U14 (aufgrund der Signale vom VIC-II)
U15 (aufgrund Adressleitungen A10, A11 der CPU)
U16 (aufgrund der Datenleitungen)
U20 (aufgrund der Signale der PLA)
U26 (aufgrund AEC und RAS vom VIC-II)
U27 (aufgrund der Signale A12 und BA)
U28 (aufgrund COL6 und COL7 (Ausgänge der CIA U1))
U13 und U25 sind im Schaltplan zwar meiner Meinung nach fehlerhaft als HC-Logik gezeichnet, eingebaut wurde jedoch zumindest bei mir (meiner Ansicht nach richtigerweise) HCT-Logik (wegen den Adressleitungen der CPU am Eingang):
Bitte melde dich an, um diesen Anhang zu sehen.
Welcher Logikfamilie müssen dieses zwischengeschalteten ICs angehören?
Die benötigten ICs hatte ich für mein Projekt in HC-Logik und HCT-Logik verfügbar. Aber welche Logikfamilie ist die richtige? Muss ich HC verwenden oder HCT, oder ist es vielleicht sogar egal?
Ich beschreibe im Folgenden den nur wirklich relevanten Teil meiner Untersuchungen. Das Thema könnte man auch wesentlich detailierter wiedergeben, mit noch viel mehr Theorie. Das würde aber niemand bis zum Schluss lesen.
Basics
Fangen wir also an: Wo ist denn überhaupt der Unterschied zwischen HC und HCT?
HC und HCT beschreiben im Grunde nur eine Logikfamilie, nämlich "High-Speed-CMOS", wobei die HCT-Familie an ihren Eingängen eine im Vergleich zur HC-Familie andere "Empfindlichkeit für Low- und High-Pegel" besitzt.
Die Werte für die HC-Logikfamilie (Folgende Eingangswerte sind für Vcc=4,5V. Werte sind nicht fest: Bei Vcc=5,0V sind die Werte leicht höher.):
High-Pegel: 3,15V - Vcc
Low-Pegel: GND - 1,35V
Die Werte für die HCT-Logikfamilie (Eingangswerte für Vcc=5,0V. Werte sind fest definiert.):
High-Pegel: 2,0V - Vcc
Low-Pegel: GND - 0,8V
Die zu stellende Frage lautet demnach: Welche Logikfamilie erkennt an ihren Eingängen die Signale des 6510 (oder der anderen ansteuernden ICs) in jedem Fall (d.h. zu 100%) korrekt?
Eingänge bei HC und HCT
Betrachtet man nur den High-Pegel, dann lässt sich folgendes sagen: Der HCT erkennt einen Pegel von beispielsweise 2,5V zu 100% sicher als logisch 1 (da er laut Datenblatt eine logische 1 garantiert ab 2,0V erkennt), während das bei dem HC erst 100% sicher bei 3,15V passiert. Das Datenblatt für einen HC-Typ gibt zwar auch den Wert 2,4V an. Dieser Wert ist aber nur ein typischer Wert, der nicht garantiert ist, sondern nur in den allermeisten Fällen zutrifft, also eben nur typisch. Wenn ich also 2,5V an den HC-Eingang lege, wird das IC dies ziemlich sicher als logisch 1 erkennen. Wenn die Chip-Fabrik aber einen schlechten Tag hatte und das IC nicht typisch reagiert, dann könnte bei 2,5V aber auch schon mal eine logische 0 erkannt werden und z.B. erst ab 2,8V oder vielleicht 3,0V eine logische 1. Das IC wäre aber immer noch innerhalb der Spezifikation (da erst ab 3,15V zu 100% eine logische 1 erkannt werden muss) und kein Ausschuss.
Ausgänge beim 6510, 6525 und beim 6569
Das Datenblatt der ICs sagt über die Ausgangspegel an den Pins folgendes aus:
Low-Pegel: kleiner 0,4V
High-Pegel: größer 2,4V
Dies besagt, dass bei den ICs der High-Pegel einer Leitung zwischen 2,4V und 5,0V sein kann. Meistens liegt er im Bereich um 4,0V, er kann und darf(!) aber auch beispielsweise nur 2,5V betragen.
Wenn ich jetzt so einen "grenzwertigen" 6510 mit nur 2,5V an einem Adress-Pin mit einem "grenzwertigen" HC-Baustein (der vielleicht 2,8V für logisch 1 erwartet) verbinde? Was lässt sich dann über die Funktion sagen? Erkennt diese Kombination eine logische 1? Beide ICs wären ja noch innerhalb ihrer Spezifikationen.
Und wenn ich diesen "grenzwertigen" 6510 mit nur 2,5V High-Pegel an einem Adress-Pin mit einem HCT-Baustein (der garantiert 2,0V für logisch 1 erwartet) verbinde? Was ist wohl besser?
Bemerkung am Rande: Die Ausgänge der CMOS-Version des 6510 haben als Highpegel mindesten 3,5V. Da könnte man den HC-Typ ohne Probleme einsetzen...
Gegenprobe mit EProm
Wenn man sich das Datenblatt des eingesetzten EProms für die ROM-Inhalte (Kernal, Basic, CharSet) anschaut (dabei ist der Hersteller völlig egal, oder der Typ (27C256 oder 27C512)), dann stellt man hier fest, dass das EProm für seine Eingangssignale am Adressbus für Low und High folgende Eigenschaften erwartet:
Low: Pegel kleiner 0,8V
High: Pegel größer 2,0V
Dies entspricht exakt den Werten für die Eingangssignale bei der HCT-Familie. Und das macht auch Sinn, da es einen Einsatz eines CMOS-Eproms in einer TTL-Umgebung ermöglicht.
Fazit
Die obige Untersuchung ist bei meiner kleinen C64xs-Platine die Entscheidungsgrundlage für die Verwendung der HCT-Familie für diskrete Interface-Logik gewesen.
Warum im C64R nun nahezu durchgängig die HC-Familie für Interface-Logik verwendet wurde, obwohl bei dieser Familie die Erkennung einer logischen 1 zu 100% erst bei höheren Pegeln spezifiziert ist, kann ich nicht sagen. Aufgrund obiger Untersuchung halte ich dies jedoch für nicht richtig.
Bitte versteht mich nicht falsch: Die Pegel des 6510, 6526 und 6569 sind in über 99% der Fälle weit über den Mindestwerten und von daher wird der C64R auch funktionieren. Jedoch können ja auch externe Module den 6510 abschalten und von externer Seite den aktiven Part übernehmen und wenn diese sich am Rande der Spezifikation befinden, dann kann es auch zu Stabilitätsproblemen kommen. Oder Du hast einen 6510 in den Nullkraftsockel eingesetzt, der selbst nahe an den im Datenblatt genannten Mindestwerten arbeitet. Auch dann würde ich mich über mangelnde Stabilität nicht wundern.
Jetzt seit ihr dran:
Kramt die Datenblätter raus und versucht meine Beschreibungen zu verifizieren. Irgendwelche Fehler meinerseits? Vielleicht gibt es einen Aspekt, den ich nicht bedacht habe? Gibt es einen Grund, warum HC hier die bessere Wahl sein sollte? Ich würde mir wirklich wünschen, wenn jemand meine Feststellungen hier fundiert widerlegt!
Bis dahin bleibe ich bei meiner Meinung: "Für diskrete Logik im C64xs ist die HC-Logikfamilie NICHT die richtige Wahl!"
Gruß,
Thomas