Pin und Port im Mikrocontroller

Ich bin ein bisschen neu in Sachen Mikrocontroller. Können Sie mir bitte sagen, was ein Port und ein Pin in einem Mikrocontroller sind? Was sind ihre Verwendungen (Pin und Port)?

Antworten (3)

Die Stifte ragen aus einem IC heraus und verbinden sich elektrisch mit der Außenwelt. Ports werden durch Register innerhalb des Mikrocontrollers dargestellt und ermöglichen dem Programm (Firmware), den Status der Pins zu steuern oder umgekehrt den Status der Pins zu lesen, wenn sie als Eingänge konfiguriert sind. Es besteht eine Eins-zu-Eins-Entsprechung zwischen den Pins auf dem Mikrocontroller und den Bits in seinen Registern.

Nehmen Sie zum Beispiel diesen 28-Pin-Mikrocontroller, der zufällig ein PIC24FJ64A004 ist :

Geben Sie hier die Bildbeschreibung ein

Dieser Prozessor hat eine 16-Bit-Architektur, sodass die Ports und Register alle 16 Bit breit sind. Andere übliche Datenbreiten (und damit Portbreiten) in Mikrocontrollern sind 8 und 32. Wie im obigen Diagramm gezeigt, müssen die Portpins nicht unbedingt zusammen gruppiert werden.

Da dieser spezielle Chip nur 28 Pins hat, gibt es nur ein Register, das vollständig implementiert werden kann, das heißt Pins hat, die allen 16 Bits im E/A-Register entsprechen. Das ist PORT B, und die Stifte sind im obigen Diagramm rot eingefärbt. Es gibt einen anderen Port, der teilweise besetzt ist, dh PORT A, der 5 Bits implementiert hat, RA0 bis RA4. Ich bleibe einfach bei PORT B.

Es gibt andere Mikrocontroller in derselben Prozessorfamilie, die in einem 44-Pin-Gehäuse geliefert werden, in dem zusätzliche Registerpins definiert sind (RA7-RA10 und RC0-RC9.

Wie bereits erwähnt, werden die Ports über verschiedene Register manipuliert.

Je nach Prozessortyp können die Register in derselben Speicherabbildung erscheinen wie der Arbeitsspeicher (RAM) des Prozessors; in diesem Fall werden die Adressen für diesen Zweck reserviert und dieses RAM-Segment wird nicht implementiert. Der Vorteil dabei ist, dass alle Befehle, die im RAM arbeiten, auch mit den I/O-Registern arbeiten.

Das andere Schema besteht darin, einen speziellen Adreßraum für E/A-Register und spezielle Befehle (dh INP und OUT) zu haben, die nur auf diese Register zugreifen. Welches Schema verwendet wird, ist historisch, bereits in den 1970er Jahren begann Intel mit der Verwendung des separaten E/A-Adressierungsschemas, und Motorola entschied sich unter anderem dafür, sowohl E/A- als auch RAM-Adressen in denselben Speicherplatz zu legen.

Diese mit PORT B ​​im PIC24FJ64A004 verbundenen Register sind:

Geben Sie hier die Bildbeschreibung ein

Die Konfiguration des Ports erfolgt über die TRISB- und ODCB-Register. TRIS-Zustände für Tristate, was ein Zustand ist, bei dem ein Pin in einen Zustand mit hoher Impedanz versetzt wird und keine Ausgänge ansteuern kann. Das TRISB-Register bestimmt, ob jeder PORT B-Pin ein Eingang oder ein Ausgang ist. (Bei einigen anderen Mikrocontrollern wird dies als Datenrichtungsregister oder DDR bezeichnet - DDRB im Fall von PORT B. Ich denke, DDR ist ein besserer Name für dieses Register als TRIS.)

Das Setzen des zugehörigen Bits in TRISB macht den Pin zu einem Eingang, und das Setzen auf 0 macht ihn zu einem Ausgang.

Jeder Pin kann, wenn er als Ausgang konfiguriert ist, auch als Open-Drain oder Push-Pull konfiguriert werden. Dies geschieht mit dem ODCB-Register (Open Drain Control Register),

Open-Drain bedeutet, dass der Pin nur Strom "senkt", dh er kann einen Ausgang steuern, der bereits an eine positive Spannung angeschlossen ist, z. B. eine LED oder ein anderes E / A-Peripheriegerät, das an Vcc (die Systemspannung) angeschlossen ist, indem er ihn ausschaltet. Push-Pull bedeutet, dass der Pin sowohl Spannung "liefern" (den Ausgang auf eine hohe Spannung gleich Vcc setzen) als auch Strom wie ein Open-Drain-Ausgang senken kann.

Das Setzen des zugehörigen Bits in ODCB macht den Pin Open-Drain, und das Setzen auf 0 macht ihn Push-Pull.

Warum Open-Drain? Ein Grund dafür ist, dass mehrere Geräte dieselbe Leitung ansteuern können, die mit einem Pull-up-Widerstand verbunden ist. Wenn der Open-Drain-Ausgang auf 1 gesetzt wird, wird er wie ein Eingang in einen hochohmigen Zustand versetzt. Nur das Gerät, das auf 0 (Masse) gesetzt ist, steuert also aktiv die Leitung.

Wenn der Pin als Eingang konfiguriert ist, wird beim Lesen des Ports der Zustand des Pins gelesen. Wenn der Pin als Ausgang konfiguriert ist, dann ändert das Schreiben entweder in das LATB- oder das PORTB-Register den Zustand des Ausgangspins. Warum sowohl LATB als auch PORTB? Denn beim Lesen von PORTB wird immer der Zustand des Pins gelesen, egal ob der Pin ein Ein- oder Ausgang ist. Das Lesen des LATB-Registers liest alles, was in den Port geschrieben wurde.

Das Setzen des Bits im Ausgangsregister auf 1 eines als Open-Drain-Ausgang konfigurierten Pins versetzt den Pin in einen hochohmigen Zustand, und das Setzen auf 0 setzt den Ausgang auf Masse. Das Setzen des Bits im Ausgangsregister auf 1 eines als Push-Pull konfigurierten Pins treibt den Ausgang hoch, und das Setzen des Bits auf 0 treibt den Ausgang niedrig.

Obwohl auf den gesamten Port gleichzeitig geschrieben oder gelesen werden kann, gibt es Anweisungen zum Setzen oder Testen einzelner Bits in einem E/A-Register. Dies erspart beispielsweise das Merken des vorherigen Werts eines I/O-Registers beim Zurückschreiben des gesamten Inhalts.

Beachten Sie im Diagramm des Mikrocontrollers oben, dass es zusätzlich zu den RBx-Bezeichnungen viele andere Funktionen gibt, die mit diesen Pins gekennzeichnet sind. Dadurch kann der Mikrocontroller die Pins für andere Zwecke wie analoge Eingänge, Komparatoren, externe Oszillatoren, Input Capture/Output PWM, UART, SPI, I²C und PMP (Parallel Master Port) konfigurieren.

Dieses Diagramm zeigt die interne Logik, die einem Pin eines E/A-Ports zugeordnet ist, sowie die Schaltung, die verwendet wird, um einen Pin mit einem Peripheriegerät zu teilen.

Geben Sie hier die Bildbeschreibung ein

Um eines dieser Peripheriegeräte zu aktivieren, ist es normalerweise nur erforderlich, ein Freigabebit im Steuerregister für das Peripheriegerät zu setzen. Dadurch kann das Peripheriegerät den entsprechenden Pin steuern und ihn von den PORT-Registern trennen.

Eines der ungewöhnlichen Merkmale der PIC24-Familie ist, dass sie über eine Funktion namens PPS (Peripheral Pin Select) verfügt. Das bedeutet, dass viele der im Diagramm des Mikrocontrollers gezeigten Funktionen tatsächlich anderen Pins zugewiesen werden können - das Diagramm zeigt nur die Standardpositionen. Die mit RP bezeichneten Pins repräsentieren die neu belegbaren Peripheriepins.

Schließlich verfügt dieser Mikrocontroller über einen 10-Kanal-ADC. Acht dieser Kanäle teilen Pins mit PORTB (RB0-RB3 und RB12-RB15). Ein Register namens AD1PCFG wird verwendet, um zu steuern, ob ein Pin als analoger Eingang verwendet wird oder ob er von PORT B ​​verwendet wird.

Beispielsweise ist ein Port in einem Mikrocontroller, wie er in den Arduino-Entwicklungsboards (wie dem Uno) zu finden ist, ein Array von normalerweise 8 Pins (da es sich um eine 8-Bit-Architektur handelt, ist es sinnvoll, Pins in Gruppen von 8 anzuordnen). die entweder so konfiguriert werden können, dass sie als digitale (Ein/Aus) Eingänge, Ausgänge fungieren oder von einem speziellen Peripheriegerät wie einem Analog-Digital-Wandler, Timer für Dinge wie Ausgangsvergleich (PWM) verwendet werden, und manchmal können diese angeschlossen werden spezielle interne Interrupt-Generierung, um beispielsweise von einer externen Quelle geweckt zu werden, wenn der Mikrocontroller schläft.

Hier ist ein kurzes Pinout-Diagramm eines Beispiel-Mikrocontrollers:

Pinbelegungsdiagramm

Sehen Sie, wie die Etiketten Dinge wie PB0 ... PB7 und PA0 bis P7 usw. sind? Dies sind 8-Bit-Ports, die mit B bzw. A bezeichnet sind. Mikrocontroller können eine beliebige Anzahl von Ports haben, es hängt wirklich von der Architektur, der Pin-Anzahl des Pakets und dem Gesamtdesign ab, das vorschreibt, wie viele Pins sich in einem Port befinden, wie viele Ports/Pins sich in einem Mikrocontroller befinden und was sie möglicherweise tun. Jeder ist speziell und anders, aber die meisten folgen der Port-Beschriftung in Buchstaben, mit Pin-Nummern speziell in Zahlen, und P bedeutet "Port". PA0 bezieht sich also auf Port A, Pin 0. Pin-Nummern beginnen normalerweise bei 0, ich gehe davon aus, dass aufgrund von Firmware / Programmierung eine bevorzugte Indexierung bei 0 beginnt. Beachten Sie, dass in Footprints und schematischen Designs auch im Bild die tatsächlichen physischen Pin-Nummern immer beginnen um 1!

Das folgende Bild zeigt eine vereinfachte Version dessen, was sich in einem modernen Mikrocontroller-Pin befindet (der normalerweise in Ports oder Arrays dieser Schaltung alle in einer Reihe gruppiert ist).

Pin-Schaltung

Wenn der Pin als Eingang eingestellt ist, leitet er die Verbindungen dieses Pins zur "Eingangsseite" der Schaltung und deaktiviert die Ausgangsseite. Dasselbe gilt, wenn der Pin als Ausgangspin konfiguriert ist, die Eingangsseite deaktiviert/getrennt wird.

Der Block "Logikfunktionalität" jedes Pins in der Mitte des Diagramms ist normalerweise mit dem Datenregister des Ports verbunden, wo der Prozessor die Werte aller seiner Pins zu jedem Zeitpunkt lesen kann. Beachten Sie, dass das Datenregister lediglich eine Darstellung des am Pin angezeigten Werts ist, es ist nicht gerade eine direkte Verbindung. Das Datenregister kann normalerweise beschrieben werden, wenn der Pin auf einen Ausgang gesetzt ist, um den Ausgangswert auf 0 oder 1 zu ändern. Auch hier ist das Setzen dieser Werte nur eine Darstellung, die im Diagramm gezeigten Ausgangsporttreiber da MOSFETs zumindest versuchen , den erforderlichen Wert zu erreichen, aber externe Schaltungen oder Probleme werden dies möglicherweise nicht wirklich erreichen.

Denken Sie daran, dass logische Eingangs-/Ausgangswerte eigentlich nur Vergleichsschwellenwerte der gegebenen VCC-/Quellenspannung für den Mikrocontroller sind. Wenn Sie den Mikrocontroller mit 5 V versorgen, verwendet er diese als Vergleichsspannung für seine logischen Ausgänge und Eingänge. Ausgänge nur, weil die Ausgangstreiber-FETs Strom liefern und auf die gleiche Potentialdifferenz (AKA-Spannung) wie VCC treiben, wenn sie auf "logisch hoch" gehen, und Strom in Richtung der Massereferenz ziehen / ziehen, wenn sie auf "logisch niedrig" gehen.

Für den Eingang gibt es hochohmige Komparatoren (möglicherweise mit Schmitt-Triggern, um eine gewisse Hysterese zu haben und eine logische hohe/niedrige Unsicherheit zu vermeiden, wenn ein Eingang an der Grenze dieser Werte liegt), die VCC (die Eingangsversorgungsspannung, denken Sie daran!) als verwenden Vergleichspunkt, und dann wird ein bestimmter Prozentsatz davon verwendet, um zu sagen, ob ein Eingangssignal ein logisches HIGH- oder logisches LOW-Signal ist. Häufig sind die verwendeten Prozentsätze > 66 % von VCC für logisch HIGH und < 33 % für logisch LOW. Dies lässt eine schöne Lücke für unbekannte oder verrauschte Signale zurück. Wenn der Mikrocontroller in meinem obigen Beispiel 4 V am Eingang sieht, liegt dies über 66% von 5 V (3,3 V) und wird im Datenregister dieses Ports für diesen bestimmten Pin als "1" angezeigt.

Ok, zuerst sind die Pins die physischen Leitungen und die Ports sind der E / A-Eingangs- / Ausgangskanal, der intern mit diesen Pins verbunden ist. Die Stifte werden zum Indizieren und Ausrichten des physischen Chips verwendet. Zum Beispiel befindet sich Pin 1 fast immer oben links auf dem Chip, aber immer links von der halbkreisförmigen Aussparung an einem Ende des Chips.

Die Ports werden verwendet, um zum und vom Chip zu kommunizieren, zum Beispiel könnte PortA Bit 1 auf Pin 1 und PortA Bit 2 auf Pin 2 liegen. Dies ist natürlich nur ein Beispiel, da es bei jedem Mikrocontroller anders ist.

Sie meinen also, alle Beine, die wir außerhalb des ic sehen (außer vcc, gnd ... usw.), sind Ports. Wir können draußen keine Pins sehen?
@MacroBoy-Stifte sind die Beine des Pakets. Bei einigen der sehr großen Mikrocontroller gibt es jedoch Möglichkeiten, interne Portverbindungen zu externen physischen Pins zu "multiplexen". Dies liegt daran, dass einige Ports für viele interne Peripheriegeräte/Funktionen verwendet werden können, während andere mit der Außenwelt „verbunden“ sind
Also was meinst du mit DDRC und DDRB
@MacroBoy - siehe meine Antwort zu den DDR-Pins (Data Direction Register).