Pin y puerto en microcontrolador

Soy un poco nuevo en microcontroladores. ¿Puede decirme qué es un puerto y un pin en un microcontrolador? ¿Cuáles son sus usos (pin y puerto)?

Respuestas (3)

Los pines son los que sobresalen de un IC y se conectan eléctricamente al mundo exterior. Los puertos están representados por registros dentro del microcontrolador y permiten que el programa (firmware) controle el estado de los pines o, por el contrario, lea el estado de los pines si están configurados como entradas. Existe una correspondencia uno a uno entre los pines del microcontrolador y los bits en sus registros.

Tomemos, por ejemplo, este microcontrolador de 28 pines, que resulta ser un PIC24FJ64A004 :

ingrese la descripción de la imagen aquí

Este procesador tiene una arquitectura de 16 bits, por lo que los puertos y registros tienen un ancho de 16 bits. Otros anchos de datos comunes (y, por lo tanto, anchos de puerto) en los microcontroladores son 8 y 32. Como se muestra en el diagrama anterior, los pines del puerto no necesariamente tienen que estar agrupados.

Dado que este chip en particular tiene solo 28 pines, solo hay un registro que se puede implementar completamente, es decir, tiene pines correspondientes a los 16 bits en el registro de E/S. Ese es el PUERTO B, y los pines están coloreados en rojo en el diagrama de arriba. Hay otro puerto que está parcialmente ocupado, es decir, el PUERTO A que tiene 5 bits implementados, RA0 a RA4. Me quedaré con el PUERTO B.

Hay otros microcontroladores en esta misma familia de procesadores que vienen en un paquete de 44 pines, donde se definen pines de registro adicionales (RA7-RA10 y RC0-RC9.

Como se mencionó anteriormente, los puertos se manipulan a través de varios registros.

Según el tipo de procesador, los registros pueden aparecer en el mismo mapa de memoria que la memoria del procesador (RAM); en este caso las direcciones se reservan para este fin y no se implementa ese segmento de RAM. La ventaja aquí es que todas las instrucciones que operan en la RAM también funcionarán con los registros de E/S.

El otro esquema es tener un espacio de direcciones especial para los registros de E/S y tener instrucciones especiales (es decir, ENTRADA y SALIDA) que solo acceden a estos registros. El esquema que se utiliza es histórico, allá por la década de 1970, Intel comenzó a usar el esquema de direccionamiento de E/S separado y Motorola, entre otros, optó por colocar las direcciones de E/S y RAM en el mismo espacio de memoria.

Estos registros asociados al PUERTO B en el PIC24FJ64A004 son:

ingrese la descripción de la imagen aquí

La configuración del puerto se realiza a través de los registros TRISB y ODCB. Los estados TRIS para tres estados, que es una condición en la que un pin se coloca en un estado de alta impedancia y no puede impulsar ninguna salida. El registro TRISB determina si cada pin PORT B ​​es una entrada o una salida. (En algunos otros microcontroladores, esto se denomina registro de dirección de datos, o DDR -- DDRB en el caso del PUERTO B. Creo que DDR es un mejor nombre para este registro que TRIS).

Establecer el bit asociado en TRISB convierte al pin en una entrada y establecerlo en 0 lo convierte en una salida.

Cada pin, si se configura como una salida, también se puede configurar como drenaje abierto o push-pull. Esto se hace con el registro ODCB (registro de control de drenaje abierto),

Open-drain significa que el pin solo "sume" corriente, es decir, puede controlar una salida ya conectada a un voltaje positivo, como un LED u otro periférico de E/S conectado a Vcc (el voltaje del sistema) apagándolo. Push-pull significa que el pin puede "generar" voltaje (establecer la salida a un alto voltaje igual a Vcc) o absorber corriente de la misma manera que una salida de drenaje abierto.

Establecer el bit asociado en ODCB hace que el pin se abra y se drene, y establecerlo en 0 lo convierte en push-pull.

¿Por qué desagüe abierto? Una de las razones es que permite que varios dispositivos controlen la misma línea, que está conectada a una resistencia pull-up. Cuando la salida de drenaje abierto se establece en 1, se pone en un estado de alta impedancia, igual que una entrada. Entonces, solo el dispositivo que está configurado en 0 (tierra) controla activamente la línea.

Si el pin está configurado como una entrada, al leer el puerto se leerá el estado del pin. Si el pin está configurado como una salida, escribir en los registros LATB o PORTB cambiará el estado del pin de salida. ¿Por qué tanto LATB como PORTB? Porque leer PORTB siempre lee el estado del pin, ya sea que el pin sea una entrada o una salida. La lectura del registro LATB lee todo lo que se escribió en el puerto.

Establecer el bit en el registro de salida en 1 de un pin configurado como salida de drenaje abierto pone el pin en un estado de alta impedancia, y establecerlo en 0 establece la salida a tierra. Establecer el bit en el registro de salida en 1 de un pin configurado como push-pull impulsa la salida alta, y establecer el bit en 0 impulsa la salida baja.

Aunque se puede escribir o leer todo el puerto a la vez, existen instrucciones para establecer o probar bits individuales en un registro de E/S. Esto ahorra, por ejemplo, la necesidad de recordar el valor anterior de un registro de E/S al escribir todo el contenido.

Tenga en cuenta que en el diagrama del microcontrolador anterior, además de las designaciones RBx, hay muchas otras funciones etiquetadas con estos pines. Esto permite que el microcontrolador configure los pines para otros fines, como entradas analógicas, comparadores, osciladores externos, PWM de captura/salida de entrada, UART, SPI, I²C y PMP (puerto maestro paralelo).

Este diagrama muestra la lógica interna asociada con un pin de un puerto de E/S, además de los circuitos utilizados para compartir un pin con un periférico.

ingrese la descripción de la imagen aquí

Para habilitar cualquiera de estos periféricos, generalmente solo es necesario establecer un bit de habilitación en el registro de control del periférico. Esto permite que el periférico controle el pin correspondiente y lo desconecta de los registros del PUERTO.

Una de las características inusuales de la familia PIC24 es que tiene una característica llamada PPS (Peripheral Pin Select). Eso significa que muchas de las funciones que se muestran en el diagrama del microcontrolador en realidad se pueden reasignar a otros pines; el diagrama solo muestra las ubicaciones predeterminadas. Los pines etiquetados como RP representan los pines periféricos reasignables.

Finalmente, este microcontrolador tiene un ADC de 10 canales. Ocho de estos canales comparten pines con PORTB (RB0-RB3 y RB12-RB15). Se usa un registro llamado AD1PCFG para controlar si un pin se usa como entrada analógica o si se usa en el PUERTO B.

Como ejemplo, un puerto en un microcontrolador como el que se encuentra en las placas de desarrollo Arduino (como el Uno) es una matriz de normalmente 8 pines (debido a que es una arquitectura de 8 bits, tiene sentido organizar los pines en grupos de 8) que pueden configurarse para actuar como entradas y salidas digitales (encendido/apagado), o ser utilizados por un periférico especial, como un convertidor analógico a digital, un temporizador para cosas como la comparación de salida (PWM) y, a veces, estos pueden conectarse a generación de interrupción interna especial, por ejemplo, para ser despertado por una fuente externa si el microcontrolador está durmiendo.

Aquí hay un diagrama rápido de pin-out de un microcontrolador de ejemplo:

diagrama de pines

¿Ves cómo las etiquetas son cosas como PB0 ... PB7 y PA0 a P7, etc.? Estos son puertos de 8 bits etiquetados B y A respectivamente. Los microcontroladores pueden tener cualquier número de puertos, realmente depende de la arquitectura, el número de pines del paquete y el diseño general que determina cuántos pines hay en un puerto, cuántos puertos/pines hay en un microcontrolador y qué podrían hacer. Cada uno es especial y diferente, pero la mayoría sigue el etiquetado del Puerto en letras, con números de pin específicamente en números, y P significa "Puerto". Entonces, PA0 se refiere al puerto A, pin 0. Los números de pin generalmente comienzan en 0, supongo que debido a la indexación preferida de firmware / programación que comienza en 0. Tenga en cuenta que en las huellas y diseños esquemáticos, en la imagen también, los números de pines físicos reales siempre comienzan ¡a la 1!

La siguiente imagen muestra una versión simplificada de lo que hay en el pin de un microcontrolador moderno (que recuerde que generalmente se agrupa en puertos o matrices de este circuito, todo en una fila).

circuito pin

Si el pin se configura como una entrada, enrutará las conexiones de ese pin al lado de "entrada" del circuito y deshabilitará el lado de salida. Lo mismo ocurre si el pin está configurado como un pin de salida, el lado de entrada está deshabilitado/desconectado.

El bloque de "funcionalidad lógica" de cada pin en el medio del diagrama generalmente está conectado al registro de datos del puerto, donde el procesador puede leer los valores en todos sus pines en cualquier momento. Tenga en cuenta que el registro de datos es simplemente una representación del valor visto en el pin, no es exactamente una conexión directa. El registro de datos generalmente se puede escribir, si el pin se establece en una salida, para cambiar el valor de salida a 0 o 1. Nuevamente, establecer estos valores es solo una representación, los controladores del puerto de salida que se muestran en el diagrama ya que los MOSFET al menos intentarán igualar el valor requerido, pero es posible que los circuitos externos o los problemas no lo hagan realidad.

Recuerde que los valores lógicos de entrada/salida son en realidad solo umbrales de comparación del voltaje de fuente/VCC dado para el microcontrolador. Si alimenta el microcontrolador con 5 V, lo usará como voltaje de comparación para sus salidas y entradas lógicas. Salidas simplemente porque los FET del controlador de salida generan corriente y conducen a la misma diferencia de potencial (voltaje AKA) que VCC cuando va a "lógica alta" y absorbe/tira corriente hacia la referencia de tierra cuando va a "lógica baja".

Para la entrada, hay comparadores de alta impedancia (tal vez con Schmitt Triggers para tener algo de histéresis y evitar la incertidumbre lógica alta/baja si una entrada está en el límite de estos valores) que usan VCC (el voltaje de la fuente de alimentación de entrada, ¡recuerde!) como el punto de comparación, y luego un cierto % de esto se usa para decir si una señal de entrada es una señal lógica ALTA o lógica BAJA. A menudo, los porcentajes utilizados son >66 % de VCC para lógica ALTA y <33 % para lógica BAJA. Esto deja un buen espacio para que se rechacen las señales desconocidas o ruidosas. Si el microcontrolador en mi ejemplo anterior ve 4V en la entrada, esto está por encima del 66% de 5V (3.3V) y se verá en el registro de datos de ese puerto, para ese pin en particular, como un "1".

Bien, primero, los pines son los cables físicos y los puertos son el canal de entrada/salida de E/S conectado internamente a esos pines. Los pines se utilizan para indexar y orientar el chip físico. Por ejemplo, el pin 1 casi siempre está en la parte superior izquierda del chip, pero siempre está a la izquierda del recorte de medio círculo en un extremo del chip.

Los puertos se utilizan para comunicarse hacia y desde el chip, por ejemplo, el bit 1 de PortA podría estar en el pin 1 y el bit 2 de PortA podría estar en el pin 2. Por supuesto, esto es solo un ejemplo, ya que es diferente con cada microcontrolador.

Entonces quiere decir que todas las patas que vemos fuera del ic (excepto vcc, gnd..etc) son puertos. ¿No podemos ver los pines afuera?
Los pines @MacroBoy son las patas del paquete. Sin embargo, hay formas de "multiplexar" las conexiones del puerto interno a los pines físicos externos en algunos de los microcontroladores muy grandes. Esto se debe a que algunos puertos pueden usarse para muchos periféricos/funciones internas, mientras que otros están "conectados" al mundo exterior.
Entonces, ¿qué quieres decir con DDRC y DDRB?
@MacroBoy: vea mi respuesta con respecto a los pines DDR (registro de dirección de datos).