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:
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 SET
oder CLEAR
welche 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 SET
ing oder ing.CLEAR
Am Ende wäre die Idee, den Pin des PIC einzulesen, SDI_BUS
was 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:
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 x
Nanosekunden. 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.
Wenn ich Ihre Frage richtig verstehe, ist es wichtig zu verstehen, dass das Gerät in ein paar separaten Phasen funktioniert.
Wenn ich die Wahrheitstabelle und das Zeitdiagramm im Datenblatt richtig verstehe, ist die richtige Reihenfolge der Schritte wie folgt:
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.
shuckc
Joum
SDI_BUS
Leitung 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.shuckc