Forum: Mikrocontroller und Digitale Elektronik Pull-Up und -Down am Bus umschaltbar?


von Frank E. (vierauge) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich arbeite gerade an einer Schaltung mit einem Intel 8008. In der 
Schaltung wird bei einem Interrupt und beim Reset kein Speicher und kein 
I/O selektiert. Der Prozessor liest dann, weil alle Chips im Tristate 
sind, dank der Pullups und Pulldowns am Bus einen 1-Byte Sprungbefehl 
ein. Drei Bits bestimmen dabei den Sprungvektor und werden durch 
Umschalten zwischen Pullup und -pown gesetzt.

Damit ist es aber nicht möglich, zwischen Reset und Interrupt zu 
unterscheiden. Ich würde jetzt gerne mit dem INT-Signal eine der 
Busleitungen umschalten. Ich habe die Idee, die Leitung 
"herunterzuziehen" indem ich den niedrigeren Pulldown mit einem FET 
durchschalte. Der "Spannungsteiler" müsste dann so festgelegt sein, das 
die Leitung dann sicher unter der "L"-Schwelle liegt.

Frage: Ist meine Idee abwegig? Oder hat jemand so was schon mal gemacht?

Der Prozessor hat ein Fan-Out von 1 und angeschlossen sind LS, HC und 
n-MOS ICs mit Tristate Eingängen.

: Bearbeitet durch User
von nectcc (Gast)


Lesenswert?

Ich würde den pull-up/down Widerstand mit dem Gegentaktausgang eines 
x-beliebigen CMOS/LS-TTTL-IC ansteuern und damit umschalten.

von Axel S. (a-za-z0-9)


Lesenswert?

Frank E. schrieb:
> Frage: Ist meine Idee abwegig?

Mir ist nicht so recht klar, warum du einen Widerstand zwischen das 
MOSFET-Drain und die Datenleitung machst. Pullup und MOSFET, mehr 
brauchts nicht. Natürlich muß du schaltungsmäßig sicherstellen, daß der 
MOSFET nur dann durchgesteuert wird, wenn alle anderen Busteilnehmer im 
Tristate sind. Aber so wie du das beschreibst, ist das ja gegegeben.

Eine ähnliche Variante habe ich mal bei einem Z80 Rechner gesehen. Der 
Z80 setzt beim Reset den PC auf 0x0000, weswegen da Programmcode im 
Speicher stehen sollte. Andererseits möchte man oft gerne einen 
möglichst großen RAM ab 0x0000 haben und setzt das BIOS-ROM lieber ans 
obere Ende des Adreßraums.

Dort wurde das so gelöst, daß mit Reset ein Flipflop gesetzt wurde, das 
einerseits alle Chip-Selects deaktivierte und andererseits alle 
Datenleitungen auf L gezogen wurden. Der Z80 hat so den Befehlcode 0x00 
= NOP gelesen und die Adressen hochgezählt. Sobald die erste Adresse im 
BIOS-ROM erreicht war, wurde das Flipflop zurückgesetzt und die 
Datenleitungen wieder los gelassen.

: Bearbeitet durch User
von Frank E. (vierauge) Benutzerseite


Lesenswert?

nectcc schrieb:
> Ich würde den pull-up/down Widerstand mit dem Gegentaktausgang eines
> x-beliebigen CMOS/LS-TTTL-IC ansteuern und damit umschalten.

Ich vermute, Du meinst statt mit einem Pulldown die Leitung mit einem 
Gatter auf Null ziehen? Das geht wegen des Timings nicht. Der Status für 
den Interrupt ist schon gesetzt, während der Prozessor möglicherweise 
noch selber auf den Bus schreibt. Dann wären 2 Ausgänge zugleich auf dem 
Bus aktiv - das möchte ich vermeiden.

von Frank E. (vierauge) Benutzerseite


Lesenswert?

Axel S. schrieb:
> Mir ist nicht so recht klar, warum du einen Widerstand zwischen das
> MOSFET-Drain und die Datenleitung machst. Pullup und MOSFET, mehr
> brauchts nicht. [...] Wenn alle anderen Busteilnehmer im Tristate sind.
Einerseits schreibt der Prozessor noch selber zeitweilig auf den Bus. 
Zum anderen ist der interne Bus in einigen Takten mit dem externen 
verbunden, damit würde der Prozessor durcheinander geraten.
Klassisch löst man das Problem mit einem 8 Bit Tristate Puffer und 
verknüpft den Interrupt Status, Read und SYNC zum OE, aber dafür 
bräuchte ich mindestens zwei zusätzliche Bausteine - viel Aufwand für 
letztlich 1 Bit :)

> Datenleitungen auf L gezogen wurden. Der Z80 hat so den Befehlcode 0x00
> = NOP gelesen und die Adressen hochgezählt. Sobald die erste Adresse im
> BIOS-ROM erreicht war, wurde das Flipflop zurückgesetzt und die
> Datenleitungen wieder los gelassen.
Genau das hat mich auf die Idee gebracht.

von Bauform B. (bauformb)


Angehängte Dateien:

Lesenswert?

Frank E. schrieb:
> nectcc schrieb:
>> Ich würde den pull-up/down Widerstand mit dem Gegentaktausgang eines
>> x-beliebigen CMOS/LS-TTTL-IC ansteuern und damit umschalten.
>
> Ich vermute, Du meinst statt mit einem Pulldown die Leitung mit einem
> Gatter auf Null ziehen?

Ich vermute, er meint nicht "statt" sondern "mit", so ähnlich wie im 
Bild. Ja, der Opcode ist falsch ;)

von Frank E. (vierauge) Benutzerseite


Lesenswert?

Bauform B. schrieb:
>> nectcc schrieb:
>>> Ich würde den pull-up/down Widerstand mit dem Gegentaktausgang eines
>>> x-beliebigen CMOS/LS-TTTL-IC ansteuern und damit umschalten.
>
> Ich vermute, er meint nicht "statt" sondern "mit", so ähnlich wie im
> Bild. Ja, der Opcode ist falsch ;)

Autsch - klar. Wenn man nur von Ausgang zu Eingang denkt, kommt man 
darauf nicht.
Vielen Dank, ich werd's gleich ausprobieren.

von nectcc (Gast)


Lesenswert?

Bauform B. schrieb:

> Ich vermute, er meint nicht "statt" sondern "mit", so ähnlich wie im
> Bild. Ja, der Opcode ist falsch ;)

So wars gemeint. Vielen Dank für die grafische Ergänzung.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.