Beiträge von Gerrit im Thema „1 SPI-Bit am Expansionport lesen ?“

    Der DIP-Schalter für die Umschaltung des Taktes will mir nicht gefallen.

    Wenn du Platz hast, dann nimm einen 74x00, bau aus den 4 Gattern einen 2-zu-1 Multiplexer (das geht genau auf) und du schaltest nur ein statisches Signal mit einem Schalter/Jumper.

    Ok... Jetzt noch die Frage was mit den Ausgängen SO, SS0, SS1 und CLK ist. Das sind alles Open-Collector-Ausgänge. Da brauchst du noch Pullups irgendwo zwischen deiner Schaltung un dem angeschlossenen Device und zwar ziemlich kleine wenn du hier mit knapp 8 MHz arbeiten willst und es funktionieren soll.

    SI solltest du dir auch nochmal ansehen. Wenn das Device keinen aktiven Treiber oder eigenen Pullup mitbringt wirst du auch dort einen verwenden müssen.

    Äh, nein, nicht ganz. Du hast einen 7407, also einen Open-Collector-Treiber mit den Eingängen A und B des 74HC164 verbunden. Sobald der Eingang des 7407 HIGH ist, hängen A und B frei in der Luft. Wenn du den 7407 dort verwenden willst brauchst du einen Pullup an A und B.

    Ich sehe da noch einen Fehler... Du hast die Ausgänge von IC8B und IC6A miteinander verbunden. Der eine ist zwar Open-Collector, der andere aber nicht. Das gibt Ärger.

    Ebenso brauchst du einen Pullup am Ausgang von IC8C sonst hängt dort ein Eingang in der Luft wenn der Eingang von IC8C HIGH ist.

    Das Problem mit offenen CMOS-Eingängen ist, daß die erste darauf folgende CMOS-Stufe im IC dann beide Transistoren gleichzeitig freischalten kann. Mit entsprechenden Folgen für Funktion und Wärmeentwicklung.

    Man befindet sich hier in einem undefinierten Bereich und sowas will man bei Digitalschaltungen um jeden Preis vermeiden. Die soll schliesslich immer funktionieren (oder bei Fehler gar nicht), aber auf keinen Fall hin und wieder nicht.

    Vorsicht, der 74xx125 schaltet den Ausgang in Tristate wenn du das Freigabesignal entfernst. Damit hängt CLK in der Luft. Geht zwar meist, aber bei CMOS-ICs sollte man das nicht machen.

    Das kann man mit einem 74xx32 besser lösen. Einer der Eingänge eines OR-Gatters ist die Freigabe und der andere ist CLK. CLK erscheint nur dann am Ausgang wenn die Freigabe LOW ist. Ist sie HIGH, dann ist der Ausgang immer HIGH.

    Alternativ geht das auch mit einem 74xx08, dort wird das Signal durchgereicht wenn die Freigabe HIGH ist, ansonsten ist der Ausgang immer LOW.

    Wenn ich das nicht komplett falsch verstehe, solltest du das Flipflop einfach durch einen Treiber eines 74LS125 ersetzen können und fertig. Sobald du liest bekommst du Zustand von SO auf D3 geliefert. Nebenbei hast du dann noch 3 freie Tristatetreiber für andere Zwecke übrig.

    Nein, der Ansatz ist falsch weil du den Ausgang des Flipflops nicht tristaten kannst. Damit liegt dessen Ausgang Q immer auf D3 an und der C64 wird nicht laufen.

    Du brauchst statt dem Flipflop (oder danach) noch einen Tristate-Treiber. Zu finden z.B. im 74LS125.

    Nachtrag: Wenn du etwas am Expansionport an die Datenleitungen hängst musst du immer dafür sorgen, daß dieses Gerät nur dann Pegel auf die Leitungen legt wenn es das auch darf (also über sein Freigabesignal angesprochen wird). Zu allen anderen Zeiten müssen seine Ausgangstreiber inaktiv sein. Daher der Bedarf für Tristate-Treiber. Bei fertigen I/O-Chips ist die ganze Logik schon integriert, deshalb vergisst man dieses Detail beim Selbstbau gerne.