Konfigurieren Sie einen PIC-Pin für Eingang und Ausgang

Ich arbeite an einem Projekt, das eine PIC24FJ64GA002-MCU verwendet. Ich arbeite an einer seriellen Bit-Bang-Kommunikationsfunktion, die ein Kabel zum Senden von Daten verwendet und dann in den Empfangsmodus wechselt, um Daten auf demselben Pin zu empfangen. Für die Taktung wird ein separater Pin verwendet, der immer von einer anderen Platine gesteuert wird (immer ein Eingang). Ich frage mich, ob es eine Möglichkeit gibt, den Pin für den Open-Collector-Betrieb so zu konfigurieren, dass er als Ein- und Ausgang verwendet werden kann, oder muss ich die Pin-Konfiguration jedes Mal ändern, wenn ich vom Lesen zum Schreiben gehe?

Es hört sich so an, als ob Sie möchten, dass Ihr PIC als Slave-I2C-Gerät fungiert. Vielleicht sind die Tipps zum Massmind zu diesem Thema hilfreich. techref.massmind.org/techref/microchip/i2c.htm

Antworten (2)

Ändern Sie die Pin-Konfiguration jedes Mal. Es ist das TRIS-Register, das steuert, ob es sich um einen Eingang (1) oder Ausgang (0) handelt. Und wenn Sie die Richtung ändern, müssen Sie einen Moment (überprüfen Sie das Datenblatt) wie ein oder zwei Zyklen warten, bevor Sie diesen Stift verwenden. ein paar Nop(); wird gut tun.

Und stellen Sie sicher, dass Sie in das LAT-Register schreiben und aus dem R-Register lesen.

zB für Port D, Pin 0.

//output
_TRISD0 = 0;
Nop();
Nop();
_LATD0 = 1;
_LATD0 = 0;


//input
_TRISD0 = 1;
Nop();
Nop();
int i = _RD0;

Wenn Sie einen offenen Kollektor simulieren möchten, schreiben Sie eine Null in das Latch-Register. Den Rest erledigen Sie dann mit dem TRIS-Register. Wenn eine Null an das TRIS-Bit geht, schaltet dies das Bit auf einen Ausgang und die Leitung wird niedrig getrieben. Wenn Sie dann eine Eins in das TRIS-Bit schreiben, wird die Leitung zu einem Eingang, und das Hochziehen bewirkt, dass die Leitung hoch geht, es sei denn, ein externes Gerät treibt sie niedrig. Die Leitung befindet sich zu diesem Zeitpunkt auch in einem Eingangszustand. Sie können den Port jederzeit lesen und er zeigt den richtigen Busstatus an, denn wenn das TRIS-Bit 0 ist, ist der Bus niedrig und das wird gelesen, und wenn das TRIS-Bit hoch ist, ist es ein Eingang und was auch immer im Bus wird auch gelesen.

Einige Pins haben auch die Fähigkeit, einen schwachen Pullup für sie zu aktivieren, und Sie können auch den Pin-Wechsel-Interrupt für einige der Pins aktivieren.

//init
_LATA0 = 0;


//drive low
_TRISA0 = 0;

// let pull up bring pin high.
_TRISA0 = 1;

// read bit
in = _RA0;