Ich habe an euch mal eher eine philosophische Frage:
Warum gibt es in der Elektronik eigentlich allgemein so viele active-low Signale?
Ich habe das Gefühl, dass sich für viele Standardsignale (z.B. Resets, SPI-Chip-Selects, UART) es sich irgendwie normalisiert hat, dass die Signale im Idle einfach "high" sind und das ganze auch niemand weiter hinterfragt.
Bei Leitungen mit einem open-drain und passiv-pull-up verstehe ich es irgendwie noch (wobei es sich auch hier "umgedreht" realisieren lassen würde).
Aber bei Signalen die von einem Push-Pull getrieben werden...wozu? Was ist hier der Vorteil dabei und warum sind diese nicht einfach active-high (und idle-low)?
Bei Leitungen mit einem open-drain und passiv-pull-up verstehe ich es
irgendwie noch (wobei es sich auch hier "umgedreht" realisieren lassen
würde).
Bei TTL waren die push-pull-Ausgänge auch nicht viel anders aufgebaut. Statt pull-up hast Du eine Stromquelle, aber trotzdem können 74/74L/74H und die späteren 74S/74LS wesentlich besser nach low treiben als nach high. Low ist ein durchgeschalteter Transistor mit typisch 0,3 V, High ist irgendwas zwischen 2,4 und 4,8 V. Damit ist active low störfester und die fallende Flanke ist vom Timing her besser definiert.
Die heutigen CMOS-Bausteine haben symmetrische Ausgänge, da ist es eigentlich egal. Active Low nimmt man heutzutage vor allem aus historischen Gründen, weil man es halt so macht.
Bei TTL waren die push-pull-Ausgänge auch nicht viel anders aufgebaut.
Bei TTL waren die Eingänge Pullup-Eingänge, die nach Masse gezogen werden mussten. Die passenden Ausgänge wurden also so ausgelegt, dass sie gut "Low" ausgeben konnten:
Dieser Vorzug für "Low" spiegelt sich auch in den asymmetrischen Schaltpegeln der TTL-Bausteine wieder.
Die heutigen CMOS-Bausteine haben symmetrische Ausgänge, da ist es
eigentlich egal.
Bei den älteren CMOS war im Ausgangstreiber auch noch der N-Kanal-Fet nach GND derjenige mit dem geringeren Kanalwiderstand. Ein Low-Pegel war also besser belastbar, ein Low-Aktiver Ausgang konnte mehr Eingänge treiben.
Und viel Bauteile, die danach kamen, mussten mit den vorhandenen TTL und CMOS Batueilen zusammen funktionieren oder rückwärtskompatibel sein.
Bei den älteren CMOS war im Ausgangstreiber auch noch der N-Kanal-Fet
nach GND derjenige mit dem geringeren Kanalwiderstand.
Oder der P-FET war entsprechend grösser. In den originären CD4000 sind freilich recht viele Steuereingänge active high. Da war das also nicht so eindeutig.
Ein offener TTL Eingang hat high gesehen und mußte auf low gezogen werden. Um sicher unterscheiden zu können, das er angesteuert wird, ist Active low von Vorteil.
Wenn man einen klassischen TTL Eingang mit Widerstand sicher auf low zieht, hat der ihn treibende Ausgang aufgrund der Asymmetrie recht viel Arbeit, ihn sicher auf high zu ziehen. Andersrum gehts viel besser.
Ich habe an euch mal eher eine philosophische Frage:
Idle = High kommt aus der Sicherheitstechnik. Wenn in einer Alarmanlage nur im Alarmzustand Strom fließen würde, könnte man eine durchtrennte Leitung nicht erkennen.
"Strom weg" bedeutet, dass man sich in der einen oder anderen Weise darum kümmern muss
Das hat etwas mit technischem Verständnis und weniger mit Philosophie zu tun.
Vorteil: Beim Einschalten ist auf der Leitung Nicht-Reset von Beginn an der Reset-Zustand. Und nicht erst nachdem z.B. ein PullUp High-Pegel hergestellt hat.
Ein weiterer Grund ist der, daß sich so etwas gut mit Open-Collector- bzw. Open-Drain-Ausgängen kombinieren lässt, um einfach mehere Ausgänge logisch verknüpfen zu können.
Ein typisches Beispiel sind hier Interruptleitungen, ein Prozessor wie z.B. 6502 hat einen Active-Low-Interrupteingang, an dem mehrere Bausteine parallel angeschlossen werden (und ein Pullup-Widerstand). Nun kann jeder dieser Bausteine einen Interrupt auslösen, ohne daß weitere Schaltungslogik erforderlich ist. Der Interrupthandler muss natürlich bei jeder möglichen Interruptquelle nachsehen, ob sie den Interrupt ausgelöst hat, aber bei Prozessoren, die keine komplexere Interruptlogik und nur sehr wenige Interrupteingänge haben, ist das der praktischte Weg.
IBM hat es beim Design des PC übrigens genau falsch gemacht, die haben Interruptsharing verunmöglicht (durch die Kombination von Active-High-Interupts und Totem-Pole-Treiber), was bei einem so beschränktem Design wie dem PC mit insgesamt 8 Interruptleitungen (oder 15 beim AT) schon reichlich bescheuert war.
Statt pull-up hast Du eine Stromquelle, aber trotzdem können 74/74L/74H
und die späteren 74S/74LS wesentlich besser nach low treiben als nach
high.
Wobei allerdings der Lastfaktor beachtet werden mußte. Die 74'er Serie hatte, soweit ich mich erinnere, Lastfaktor 10, d.h. man konnte maximal 10 Eingänge mit Standardlast 1 treiben.
Wobei allerdings der Lastfaktor beachtet werden mußte. Die 74'er Serie
hatte, soweit ich mich erinnere, Lastfaktor 10, d.h. man konnte maximal
10 Eingänge mit Standardlast 1 treiben.
Richtig, Lastfaktor 10 war auch bei H(ighspeed), L(owpower), S(chottky) und LS innerhalb der Serie üblich. Erst bei CMOS entspannte sich das.
dazu kam, das vereinzelte Eingänge auf Faktor 2 haben konnten.
dazu gab es dann Umrechnungsfaktoren von einer Serie zur anderen.
Der 7440 war ein Doppel NAND mit 4 Eingängen, dessen Ausgang Faktor 20 hatte. der war als Treiber gedacht, wenn ein normaler Ausgang nicht mehr reichte. Z.B. bei synchronen Zähler/Teilern