¡Qué tal a todos!:
Hoy hablaremos de un tema necesario para poder comunicar a un microcontrolador con el exterior.
Tema:
Los puertos de Entrada/Salida.Bien, es muy usual que los microcontroladores llamen PORT a los puertos de entrada/salida, aunque no siempre es así.
Para los microcontroladores PIC, los puertos toman los nombres: PORTA, PORTB, PORTC, etc.
Para los microcontroladores AVR, los puertos se llaman: PORTA, PORTB, PORTC, etc. cuando se utilizan como salida, y toman los nombres PINA, PINB, PINC, etc. cuando se comportan como entradas.
En algunos microcontroladores, como es el caso de los PIC, los puertos de E/S se encuentran mapeados en la memoria de datos RAM. ¿Qué quiere decir esto? Pues que, simple y sencillamente, algunas direcciones de la memoria de datos están conectadas a los puertos de E/S. Cuando el microprocesador desea enviar datos a un puerto, lo que hace es enviar esa información a una dirección de la memoria de datos RAM que está conectada con ese puerto. La ventaja de esto es que se pueden manejar los puertos con las mismas instrucciones que operan sobre la memoria de datos.
Por ejemplo, para el PIC16F84A:
clrf 5
Esta instrucción borra el contenido de la dirección 5 de la memoria de datos. Pero resulta ser que la dirección 5 de la memoria de datos está conectada al puerto A, por lo tanto, lo que esta instrucción está haciendo es borrar los bits del puerto A.
Ahora, bien, estos puertos de E/S son bidireccionales, esto quiere decir que pueden funcionar como entradas y/o salidas. Para determinar el sentido que tomarán las terminales de cada puerto (entradas o salidas) existen registros especiales, llamados TRIS en el caso de los microcontroladores PIC. Para otros microcontroladores estos registros se llaman DDR (Data Direction Register)
Enfoquémonos en los microcontroladores PIC.
El registro TRISx controla la dirección de PORTx de la siguiente manera:
- Si un bit del registro TRISx se encuentra a ‘0’, el correspondiente bit de PORTx funciona como salida.
- Si un bit del registro TRISx se encuentra a ‘1’, el correspondiente bit de PORTx funciona como entrada.
Para ejemplificar veamos la siguiente figura:
Figura 5. Ejemplo de conexiones entre microcontrolador y periféricos externos.
Antes que nada, haremos un convenio: los bits no utilizados de los puertos los configuraremos como salidas (¿Por qué? No pregunten, lo entenderán más tarde).
Podemos ver que el puerto A del PIC16F84A tiene 5 bits, desde RA0 hasta RA4. Veamos que conexiones tenemos en el PORTA.
En RA0 tenemos conectada la base de un transistor NPN, cuyo colector queda conectado a un relevador. Como ya sabemos, la base de un transistor controla el funcionamiento del mismo, llevándolo a corte o a saturación, según sea el caso. Por tanto, el microcontrolador decidirá cuándo se activará o desactivará el relevador enviándole información a la base del transistor. Ello quiere decir que el bit RA0 debe ser salida. Para ello, el bit 0 del registro TRISA debe estar en ‘0’.
En la terminal RA1 está conectado un buzzer, el cual puede funcionar como una pequeña alarma. Para activar o desactivar el buzzer, el microcontrolador debe enviarle información a través de RA1, por lo cual, este bit debe ser salida. Esto se logra poniendo a ‘0’ el bit 1 del registro TRISA.
La terminal RA4 está conectada a un interruptor, SW1. Al cerrarse, el interruptor le envía un ‘0’ al microcontrolador. Al abrirse, le envía un ‘1’. Por lo tanto, la terminal RA4 debe ser configurada como entrada. Poniendo a ‘1’ el bit 4 del registro TRISA se logra esto.
Las terminales RA2 y RA3 no están conectadas a dispositivo alguno, ya quedamos que serán configuradas como salidas.
El PORTA, entonces, debe quedar configurado así:
El registro TRISA debe contener para ello:
Ahora vamos a analizar el PORTB.
La terminal RB0 está conectada a la salida de un OPAMP que funciona como detector de cruce por cero. El OPAMP le informa al microcontrolador si la señal de alterna se encuentra en el semiciclo positivo o en el negativo. Por tanto, la terminal RB0 debe ser entrada.
No hay que ser genios para darnos cuenta que las terminales RB1 y RB2, conectadas cada una a un led, deben ser salidas.
RB6 y RB7 están conectadas cada una a un pulsador. Cuando un pulsador está abierto envía un ‘1’ a la respectiva terminal. Cuando un pulsador está cerrado envía un ‘0’ a la respectiva terminal. Ello quiere decir que RB6 y RB7 deben ser configuradas como entradas.
Las terminales RB3, RB4 y RB5 no están conectadas a dispositivo alguno; quedarán configuradas como salidas.
El PORTB debe quedar configurado de la siguiente manera:
Para ello, el TRISB debe contener:
Pues bien, por el momento es todo. Que se la pasen bien.