Vamos a continuar con nuestro estudio de los GPIOs. En la entrada anterior hablamos de su uso como salida, hoy explicaremos el concepto de triestado y su uso como entradas.
Triestado
Sobre el tema de las salidas, en el capítulo anterior quedó en el aire media repuesta a la pregunta ¿Y que sucedería si estuvieran ambos transistores desactivados?
Pero antes de responder hablemos del sistema digital, donde sólo tenemos 2 valores/estados para funcionar: 0 y 1, lo que conocemos como codificación binaria. Como el nombre del concepto que queremos definir nos hace sospechar (triestado), lo que hacemos es añadir un tercer estado. Entonces tenemos 0, 1 y ¿? Si estamos trabajando en binario!!!
Respondamos ahora a la pregunta pendiente: al no estar ninguno de los dos transistores activos, el efecto es como si esa salida no estuviera conectada al resto del circuito (en este caso no hay resistencia de pull-up). Por lo que ese tercer estado que buscamos es desconectado.
La duda sería ¿nos complica este tercer estado nuestra lógica de aplicación? No, tranquilos. Una salida en triestado nos está diciendo “yo no formo parte de la ecuación”, como ya hemos dicho, es el equivalente a estar desconectada.
Esto es aprovechado para poder conectar múltiples dispositivos a un bus. Sólo una de las salidas de todos estos dispositivos deberá estar activa, estando todas las demás desactivadas. OJO: Si hubiera más de una activa se podría producir un cortocircuito, en este caso son salidas push-pull.
Un ejemplo sería el bus SPI, donde el master selecciona el periférico con el que quiere comunicar mediante la línea chip select, una por periférico (en el enlace anterior se puede ver el esquema), este periférico activará su salida mientras que los demás mantendrán la suya en triestado. Aquí es responsabilidad del master no activar nunca más de una línea de chip select.
Pines como Entrada
Configuración
Si nos fijamos en el esquema de cabecera vemos que al esquema de la salida, visto en la entrada anterior, se ha añadido un triangulo. Este triangulo es el símbolo para representar un circuito denominado buffer. Un buffer es un circuito que realiza una adaptación de la señal para que sea más fácil de leer por el microcontrolador.
La conexión que va a un lado del triángulo indica la entrada y la que va al vértice la salida del circuito. Dicho de otro modo, el triangulo forma una “flecha” que indica la dirección de la señal.
Realmente, al menos en la mayoría de los diseños, la configuración como entrada viene a ser la “no configuración”como salida. Si nos fijamos en el esquema vemos que el pin está siempre conectado al buffer. Entonces podemos añadir una tercera respuesta a la pregunta ¿Y que sucedería si estuvieran ambos transistores desactivados? Pues que el pin está configurado como entrada.
Uso
Para su uso simplemente será necesario leer el valor del pin, mediante registros o funciones como ya hablamos, obteniendo un 0 o 1 según la señal que haya a la entrada.
Como veis el uso como entrada es bastante más sencillo, a nivel de lógica, que el uso como salida. Solo hay que leer y ya.
El hecho de que el circuito de entrada esté siempre conectado al pin nos ofrece una característica interesante:
- Detección de colisión: Si nos conectamos a un bus tipo AND-cableada (explicado en la entrada anterior) y queremos transmitir, podemos detectar si hay alguien más transmitiendo. Si transmitimos un 1 y leemos un 0, hay colisión y significa que hay alguien más transmitiendo. Si escribimos un 1 y leemos un 1 (o 0 y 0) puede haber alguien más transmitiendo o no, esto no lo podemos detectar, pero en este caso al ser el mismo dato no nos corrompe el mensaje.
Buffers
Podemos hablar principalmente de 2 tipos de buffer. Hablando de los digitales.
- Normal: Este tipo de buffer simplemente permite realizar la conmutación a los estados 0 y 1 en función de la tensión de entrada que haya en el pin. Si la señal tiene mucho ruido puede generar repetidas transiciones que podrían interferir con el correcto funcionamiento de nuestro programa.
- Schmitt: Este tipo de buffer dispone de un circuito de histéresis para realizar la conmutación, lo que lo hace más resistente al ruido de la señal. Ya hablaremos un poco más sobre este circuito en otra entrada. El dibujo dentro del triangulo hace referencia a la función de transferencia de la histéresis.
Tendremos que comprobar qué tipo lleva cada pin para poder aprovecharnos de sus ventajas.
Tensiones
Os voy a contar ahora una “mentira” en la que vivimos: la electrónica digital no existe ? toda electrónica es analógica.
Ahora os lo explico: Cuando hablamos de electrónica digital decimos que hay 2 valores (como ejemplo hablemos alimentados a 5V): 0V para representar el 0 y 5V para representar el 1. Sin embargo, con 0.1V también es un 0, con 4.9V también es un 1, con 4.5V también es un 1, con 0.2V también es un 0…
Resulta entonces que tenemos “infinitos” valores, analógicos, y no solo 2… El truco está en la interpretación que le damos a esos valores.
Para esta interpretación digital existen 4 valores analógicos que nos permiten realizarla correctamente:
- VIL: Es la tensión máxima que será interpretada en una entrada como un 0.
- VIH: Es la tensión mínima que será interpretada en una entrada como un 1.
- VOL: Esta es la tensión máxima que dará a la salida para indicar un 0.
- VOH: Esta es la tensión máxima que dará a la salida para indicar un 1.
Aunque parece un lío, es fácil recordar cual es cual, solo hay que ver los subíndices:
- Primer subíndice: I para la entrada (input) y O para la salida (output).
- Segundo subíndice: L para el 0 (low) y H para el 1 (high). Hablando en lógica positiva, claro.
Estos valores los podremos encontrar en las hojas de datos de cada componente.
¿Que valor tendremos exactamente en el pin? Pues el valor exacto dependerá de la carga que pongamos en el pin. Cuanto más baja sea la carga más próximo estará a 0V o 5V, según sea un 0 o 1. Mientras que cuanto más alta sea la carga el valor estará más próximo a VOL o a VOH.
Para terminar por hoy, un par de apuntes sobre estas tensiones:
- ¿Una tensión de salida entre VOL y VOH?: Una tensión así no se dará, pues los integrados, digitales, están diseñados para que no suceda. Solo darán tensiones para 0 o 1. Y si hay una tensión en este rango es que algo malo le pasa al circuito.
- ¿Una tensión de entrada entre VIL y VIH?: Esta tensión puede darse, p.e. si conectamos un fototransistor al pin. Una tensión en este rango no asegura una interpretación exacta y puede variar según situaciones o por lo que siempre debe ser evitada cuando diseñamos nuestros circuitos.
Próximamente acabaremos esta serie de artículos hablando de otros periféricos.