martes, 31 de mayo de 2016

Conexión de entradas / salidas (Entradas digitales)

 
Las entradas digitales se representan y definen como ceros y unos. Como ejemplo práctico, podríamos asimilarlo a lo que sería un interruptor, siendo cero el interruptor apagado (Low), y uno el interruptor encendido (High). 




Para que el microcontrolador entienda estas señales, realiza una lectura del pin en cuestión, interpretando la tensión leída según lo siguiente:

Low (0) entre 0 y 0,8 Vcc
High (1) de 2 a 5 Vcc



Así, la interpretación real que hace el microcontrolador, es que si recibe una tensión positiva entre 2 y 5 voltios, traducirá que su entrada está en High, y si por el contrario la tensión de entrada se encuentra entre 0 y 0,8 voltios, entenderá que la entrada está en Low.



Pero……, los más observadores habrán detectado que existe un pequeño inconveniente. Efectivamente existe una zona intermedia (entre 0,8 y 2 Vcc), que puede ser malinterpretada tanto como Low como High, y por lo tanto, se trata de un inconveniente que deberemos de evitar, para obtener el máximo de fiabilidad en nuestros proyectos. 



Estos umbrales intermedios de tensión, pueden estar provocados por ruidos eléctricos en la propia fuente de alimentación, interferencias externas, etc.

Para evitarlos y solucionar así este problema, se utiliza lo que conocemos por las resistencias
Pull-Up y Pull-Down.



Resistencia Pull-Up:

Este funcionamiento se basa en mantener la entrada del pin en High (es decir entre 2 y 5 Vcc), para conseguirlo conectaremos una resistencia de 10 K entre +5V y el pin de entrada.
El cambio de estado, es decir pasar la entrada a Low, se conseguirá conectando un negativo directo a este mismo pin de entrada.
Y ahora es cuando alguien se puede espantar y decir “Noooooo”, en ese pin tenemos un positivo y si le conectamos un negativo directo, provocaremos un cruce que nos freira la fuente de alimentación. Y tendrá su parte de razón, pero si contamos con que tenemos conectada una resistencia en serie con el positivo, podremos estar tranquilos de que será esta la que se encargará de evitar este cruce.

Resistencia Pull-Down:

Por otra parte el funcionamiento de la resistencia Pull Down, es practicamente el mismo que el de la resistencia Pull Up, pero al revés, en este caso la resistencia de 10 K la conectaremos entre el negativo (Gnd) y el pin de entrada. Con ello la entrada permanecería en Low, hasta que a la entrada del mencionado pin se conecte un positivo directo, (si aquí también tenemos la resistencia que evita el cruce).

Pull-Up vía Software

Tanto Arduino como otros microcontroladores ofrecen la opción de activar una resistencia Pull-Up mediante Software. Para ello tan solo es necesario incorporar la siguiente instrucción en el código:

void setup() {
pinMode(10, INPUT);
digitalWrite(10, HIGH); //Resistencia Pull-Up
}


Así, aparte de indicar que el pin 10 es una entrada, también le indicaremos que active la resistencia interna en Pull-Up.

Pero……, deberemos de intentar evitar esta opción por dos motivos:

• Las resistencias internas que asigna Arduino son de un valor resistivo muy alto, 30K aprox.
• Si por error se configura incorrectamente en el sketch, podremos provocar un cortocircuito, por lo tanto, es preferible que en todas las entradas que tengamos configuradas, conectemos siempre la resistencia externa, y así asegurarnos del correcto funcionamiento del sistema.

Otro tipo de entradas digitales
 


Si, ahora todo esto ya lo entiendo, pero……, ¿Cómo puede ser que entradas como son por ejemplo las sondas de temperatura y humedad DHT, se conecten a una entrada digital?, cuando en teoría están enviado información numérica concreta, lo cual difiere bastante de lo explicado para el caso de un interruptor (encendido o apagado).

Bien observado, y como todo en la informática / electrónica tiene su explicación, la detallaremos seguidamente.

Como hemos comentado al principio las entradas digitales interpretan valores altos y bajos, es decir ceros (0) y unos (1), y la comunicación con las sondas tipo DHT se basa en este principio pero complicándolo un poquito. Para ello se aprovechan de lo que conocemos como código binario, es decir pueden informar de valores más complejos basándose en un bucle de ceros y unos, que microcontrolador leerá como un número entero.



Como ejemplo de una sonda que esté enviando la información de temperatura y humedad, podríamos observar que transmitiría el siguiente bucle para informar de una Humedad del 53% y una Temperatura de 24ºC:

0011 0101 0000 0000 0001 1000 0000 0000 0100 1101



Aunque la explicación que daré a continuación se sale del objetivo de este artículo, explicaré brevemente el contenido de esta trama, con el objeto de que los más curiosos entiendan el concepto.

Para poder interpretar esta información, deberemos de conocer que la trama consta de cinco grupos de datos asociados según lo siguiente:

Los ocho primeros dígitos corresponden a la Humedad alta
Los ocho siguientes a Humedad baja
A continuación la Temperatura alta
Seguidamente Temperatura baja
Y finalmente la comprobación de la paridad Parity bit.

Si utilizamos una calculadora de programación en modo binario, podremos verificar que la suma de los cuatro primeros octetos coincide con la paridad.

0011 0101+0000 0000+0001 1000+0000 0000= 0100 1101

Si convertimos el primer y tercer octeto en decimal obtendremos los valores de la temperatura y de la humedad:

0011 0101 = 53 = 53% Humedad
0001 1000 = 24 = 24ºC Temperatura

No hay comentarios:

Publicar un comentario en la entrada