Wie genau funktioniert dieses Schieberegister? - Fairchild 74HC589

Ich verwende ein PISO -Schieberegister, insbesondere das Fairchild Semiconductor 74HC589 .

Ich habe die Kurzfassung der Funktionsweise eines generischen Schieberegisters über den sehr nützlichen animierten GIF im Wikipedia-Link oben erhalten, obwohl es einen Schritt gibt, der mir entgeht:

  • Laut Datenblatt gibt es einen Serial Load Pin (13) und einen Read Clock Pin (12). Angenommen, ich möchte einfach alles, was sich in den Eingangslatches befindet, in das Schieberegister selbst laden und dann einfach die Bits einzeln zum seriellen Ausgangspin austakten. Welche Art von Signal/Timing-Sequenz suche ich?

Wie ich herausgefunden habe, sollte der serielle Ladestift aktiviert werden, um die Eingangsstifte zu verriegeln, und dann sollte der Lesetakt von den Verriegelungen zum Schieberegister übertragen werden, richtig?

Ich muss das wissen, weil ich den SR über einen PIC32MX steuere und vorerst wissen muss, wie ich kann SEToder CLEARwelche Pins ich mit dem SR verbunden habe, damit ich dann seriell in anderen PIC32-Pin lesen kann.

Irgendwelche Gedanken?

BEARBEITEN:

Damit jeder meine Frage (hoffentlich) ein bisschen besser versteht, ist jeder Pin des Schieberegisters direkt mit einem Pin im PIC32 verbunden. Zum Beispiel:

    #define READ_CLK                PORTFbits.RF0
    #define READ_CLK_TRIS           TRISFbits.TRISF0

    #define SERIAL_LOAD             PORTEbits.RE4
    #define SERIAL_LOAD_TRIS        TRISEbits.TRISE4

    #define SR_CLK                  PORTEbits.RE3
    #define SR_CLK_TRIS             TRISEbits.TRISE3

    #define SDI_BUS                 PORTEbits.RE2
    #define SDI_BUS_TRIS            TRISEbits.TRISE2

Auf diese Weise kann ich die Pins im Schieberegister aktivieren / deaktivieren, indem ich jedes Signal SETing oder ing.CLEAR

Am Ende wäre die Idee, den Pin des PIC einzulesen, SDI_BUSwas auch immer aus dem QH-Ausgang (Pin 9) des Schieberegisters kommt.

EDIT2:

Ich habe ein bisschen mehr darüber gesucht - ich habe herausgefunden, dass es sich um eine Technik namens Bit-Banging handelt. Ich habe mein spezielles Problem irgendwie auf die Chipaktivierungs- / Auswahlphase dessen reduziert, was ich zu erreichen versuche. Mir ist nicht ganz klar, wie die serielle Last und die gelesenen Taktstifte in das Bild passen.

Es muss eine Sequenz geben, in der sie hoch (oder niedrig ) gebracht werden , um das Austakten zum QH-Pin durch Umschalten des seriellen Taktpins zu ermöglichen . Das ist im Grunde das, was ich versuche zu verstehen.

EDIT3:

Nach der Antwort von @shuckc muss ich Folgendes klarstellen:

  • Der Pin verbindet das Schieberegister und den PIC nicht direkt . Dazwischen gibt es Level-Shifter. Spannungstechnisch sind die Signale richtig angepasst.
  • Die Tatsache, dass das verwendete Schieberegister-Design 30 Jahre alt ist, entzieht sich meiner Kontrolle. Ich arbeite an einer Schaltung, die mit Komponenten gebaut wurde, die seit geraumer Zeit gelagert wurden und als Prototyp eines Designkonzepts dienten. Ich habe keine andere Wahl, Geldautomat.
  • Was ich zu verstehen versuche, ist die Signalfolge, die ich am Schieberegister eingeben muss, damit ich die zwischengespeicherten Bits seriell ausgeben kann. Dies zielt darauf ab, vom SERIELLEN AUSGANG des Schieberegisters in den PIC einzulesen .

Was ich gerade versuche zu tun, ist etwas in der Richtung von:

enableShiftRegister() // OE pin in SR ->High; SLOAD pin in SR -> High
latchSignal(); // LATCH_PIN = SET; delayNs(2); LATCH_PIN = CLEAR - RCLK in SR
loadSR(); // SLOAD_PIN = CLEAR; delayNs(2); SLOAD_PIN = SET;
for(i=0; i<8; i++){
    clockSR(); // SRCLK_PIN = SET; delayNs(2); SRCLK_PIN = CLEAR; - SRCLK in SR
    sdiBus = SDI_BUS;
}

Die delayNs(x)Funktion verzögert die CPU um xNanosekunden. Ich habe auch versucht zu erklären, welcher Pin im SR von welchem ​​PIC-Pin gesteuert wird - denken Sie daran: Sie sind spannungsangepasst, das ist also keine Frage.

Warum nicht den seriellen Bitstrom direkt auf einem PIC-Pin erzeugen? Es gibt eingebaute Peripheriegeräte, um ein genaues Timing über einen breiten Bereich von Baudraten zu erhalten.
@shuckc weil ich das tun muss und diese Option nicht habe. Die SDI_BUSLeitung ist mehreren Modulen gemeinsam, die in Reihe geschaltet sind, und jedes Modul hat eine Reihe von Schieberegistern mit Fotodioden, die mit ihren parallelen Laststiften verbunden sind. Ich muss wissen, wie das Schieberegister betrieben wird, damit ich die Daten in diesen Pins sequentiell abrufen kann.
Ah OK, hört sich so an, als wären Sie viel näher dran als die anfängliche Frage klang!

Antworten (2)

Wenn ich Ihre Frage richtig verstehe, ist es wichtig zu verstehen, dass das Gerät in ein paar separaten Phasen funktioniert.

  1. Die parallelen Eingänge. Diese haben Latches, die signalisiert werden müssen, um die Eingänge zu lesen und ihren Zustand intern zu halten. Nach dem Einrasten kann sich das Signal an den Eingangspins ändern, aber die internen Signale bleiben stabil. (RCK)
  2. Im nächsten Schritt werden diese internen Signale in das Schieberegister kopiert. ( LADEN ¯ )
  3. Der letzte Schritt ist das Herausschieben der Bits im Schieberegister (SCK)

Wenn ich die Wahrheitstabelle und das Zeitdiagramm im Datenblatt richtig verstehe, ist die richtige Reihenfolge der Schritte wie folgt:

  1. Initialisieren Sie die Signale wie folgt RCK = low; LADEN ¯ = hoch; OE ¯ = niedrig; SCK = niedrig;
  2. Legen Sie parallele Signale an die Eingänge A~H an
  3. Takten Sie die parallelen Signale in die Latches, indem Sie RCK hoch treiben. RCK triggert auf einer steigenden Flanke. Treiben Sie RCK niedrig, seinen inaktiven Zustand.
  4. Kopieren Sie die Inhalte der Eingangslatches durch Ansteuern in das Schieberegister LADEN ¯ niedrig. LADEN ¯ ist aktiv niedrig. Antrieb LADEN ¯ wieder hoch, sein inaktiver Zustand.
  5. Lesen Sie Pin Q H auf Ihrer MCU ab
  6. Lege einen Taktimpuls auf SCK an, um die Daten auf Pin QH hinauszuschieben . SCK triggert auf einer steigenden Flanke. Fahren Sie es hoch, dann niedrig.
  7. Wiederholen Sie die letzten beiden Schritte für so viele Eingaben, wie Sie möchten.
Nur um in Bezug auf Schritt 4 ganz klar zu sein, LADEN ¯ ist NICHT flankengetriggert. Der Inhalt des Schieberegisters wird gezwungen, immer mit dem Inhalt des Eingangsregisters übereinzustimmen LADEN ¯ ist niedrig. Sie müssen es hochfahren, bevor Sie etwas verschieben können. Außerdem ist bezüglich Schritt 5 die erste Ausgabe (diejenige, die der Eingabe H entspricht) sofort verfügbar Q H , bevor Sie eine steigende Flanke an SCK anlegen. Die Schritte 5 und 6 sollten wirklich vertauscht werden.
@DaveTweed Guter Fang mit dem Edge-Trigger, nicht sicher, warum ich das geschrieben habe. Vermutlich zwei Signale verwechselt. Für Q<sub>H</sub> habe ich das Zeitdiagramm falsch gelesen. Beides korrigiert.
Das ist genau die Art von Antwort, nach der ich gesucht habe, danke euch beiden! Gibt es etwas, das Sie in Bezug auf das Timing hinzufügen können? dh wie lange sollte LADEN ¯ hoch getrieben werden ? Sollte ich eine Verzögerung zwischen den Schritten einführen? Etwa ein paar Nanosekunden oder so?
@Joum Überprüfen Sie im Datenblatt unter „AC Electrical Characteristics“, dass die meisten Einrichtungszeiten maximal in der Größenordnung von 20 ns für 5 V liegen. Ihr Controller läuft wahrscheinlich mit ein paar MHz und ist wahrscheinlich "zu langsam" (<50 MHz), um wirklich ein Problem zu sein.

Im Allgemeinen wäre es einfacher, den seriellen Bitstrom direkt auf einem PIC-Pin zu erzeugen/empfangen, anstatt einen externen Parallel-zu-Seriell-Wandler zu verwenden. Besonders eines, das ein 30 Jahre altes Design ist. Der PIC verfügt über integrierte HSSI-Peripheriegeräte, um ein genaues Timing über einen weiten Bereich von Baudraten zu erhalten, wenn Sie eine enge Bitrate für UART/USB/I2C beibehalten müssen.

In Bezug auf Ihre Frage - betrachten Sie zunächst die Schnittstelle zwischen dem 3,3-V-PIC und den Eingängen des 74HC589. Haben Sie Spannungspuffer/Treiber zwischen den Chips? Sind die PIC-Ausgänge (3,3 V) bei logischen 1-Pegeln hoch genug, um im 74HC589 sauber als 1 registriert zu werden? Dies ist VIH 'Minimale Eingangsspannung mit hohem Pegel' im Datenblatt. Um dies zu überprüfen, müssen wir wissen, wie Sie die Stromschienen des 74HC589 angeschlossen haben, welche Versorgungsspannung hat er?

Sie müssen das parallele Bitmuster auf den "PARALLEL DATA PINS" mindestens 20 ns vor dem Strobe auf R-CLOCK (SETUP TIME) treiben, daher benötigen Sie einige Anweisungen, bevor Sie R-CLOCK erhöhen. Die Haltezeit beträgt mindestens 5 ns, sodass Sie R-CLOCK nicht lange hoch halten müssen. Wie sieht Ihr Softwarecode aus, der das parallele Laden durchführt?

-- aktualisieren --

Sie versuchen, von diesem Gerät zu LESEN? Ich brauche einen Schaltplan oder eine bessere Beschreibung, um zu verstehen.

Danke für den Versuch zu helfen! Bitte überprüfen Sie meine Änderungen in der Frage.