Académique Documents
Professionnel Documents
Culture Documents
OBJETIVOS
MATERIAL REQUERIDO.
Ya sabemos que Arduino UNO dispone de 14 pines digitales que podríamos usar para entrada
y salida y que además disponemos de 6 puertas de entrada analógicas de A0 hasta A5. Lo que
no suele ser muy conocido es que las puertas analógicas también se pueden usar como pines
digitales en caso necesario. Podemos leer y escribir valores digitales exactamente como lo
hacemos con los pines digitales normales:
digitalWrite(A1, HIGH) ;
Nuestras puertas analógicas se comportarán gentilmente como puertas digitales (Si, también
podemos hacer lo mismo para la lectura). Os animo a que hagáis el blinking LED con una
puerta analógica.
Aqui teneis que hace el parpadeo de un LED con la puerta A1 Blinking LED y el
Prog_20_2 que lee en digital el pin A1 Lectura digital
Así pues, en realidad, disponemos de 20 puertas digitales para nuestras cosas. Pero en la vida
de toda persona, siempre hay un momento en que esto nos suficiente.
Podemos pasarnos a un Arduino Mega que con 54 pines digitales más 16 puertas analógicas
hacen el impresionante numero de 60 puertas disponibles. Pero al final, la combinación entre
la ley de Murphy y la segunda ley de la termodinámica (La de que todo tiende al caos)
garantizan que aparezca alguien que quiere un cuadro de luces con 64 LEDs (o 128 ya puestos)
y la catástrofe nos acecha porque no hay Arduinos con más pines.
Afortunadamente la industria electrónica nos provee con una forma sencilla de aumentar el
número de salidas digitales de nuestros Arduinos sin demasiada complicación. Unos pequeños
chips llamados Shift Registers fáciles de encontrar como el 74HC595.
Si lo que necesitas es aumentar los pines digitales de entrada, prueba a usar 74HC165
que es un shift register de entrada
En la Sesión 7 vimos que para comunicar dos puntos con una conexión serie
necesitábamos pactar una velocidad de envío para saber cuándo hay que leer los datos que
llegan.
Cuando los 8 bits se han leído en el registro un tercer pin (Latch pin) escribe estos bits en los
pines de salida del chip y los mantiene hasta que se reciban nuevos datos.
Fíjate en el gráfico
superior. Nuestro Arduino envía la señal de Clock Pin de modo regular para indicar cuando hay
que leer (Se lee en el flanco de subida, cuando Clock sube de 0 a 1).
A medida que Arduino va poniendo valores en el Data Pin(DS), el chip los va leyendo en el
flanco de subida del Clock pin y por eso va a ir leyendo 1 1 1 0 0 0 1 1 sucesivamente.
Cada uno de estos valores se van pasando en orden a los pines de salida de Q0 hasta Q7, pero
aún no se activan. Cuando el Latch Pin se activa (también por flanco de subida) los valores
pasan a los pines de salida y se memorizan.
Vamos a montar un circuito que use estas salidas para gobernar un conjunto de 8 LEDs, usando
solo 3 pines de Arduino que corresponden a Clock, Data y Latch.
Y despues el setup
void setup()
{ pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
Las comunicaciones síncronas son tan frecuentes, que nuestro Arduino las soporta de fábrica
con una serie de funciones. La que nos interesa, se llama shiftOut(). (Podeis Goglear el manual)
Para iniciar la comunicación síncrona basta poner el Latch en LOW
DigitalWrite(latchPin, LOW);
Y ahora enviar los 8 bits llamando a shiftOut() y pasándole que pines usamos para Data y Clock
además indicándole el valor que queremos enviar a la salida:
Lo de MSBFIRST significa Most Significant Bit First, o sea, enviar el número binario
empezando por la izquierda. También podría ser al revés como LSBFIRST (Least
Significant Bit First) . Solo es una forma de que los informáticos se hagan los
interesantes y en este caso nos da absolutamente lo mismo.
Y por último fijar los valores en la salida poniendo HIGH el Latch de nuevo.
void loop()
delay(500);
}
Veremos que los LEDs irán contando mostrando los valores de Num en binario. Aquí tenéis
otro ejemplo con este mismo circuito en el que leemos la puerta serie para recibir un número
entre 0 y 9 y lo pasamos a los pines LEDs de salida: https://www.youtube.com/watch?v=7lk-
gNXV1Y0
Una curiosidad del 74HC595, es que si le metemos un tren de más bits de los 8 que puede
almacenar, sencillamente los va empujando hacia la salida por su pin 9 (que os habréis fijado
no hemos utilizado en el ejemplo anterior) y los va dejando caer al olvido.
Pero si conectamos este pin 9, al pin 14 de entrada de datos de un segundo chip 74HC595, y
compartimos entre ellos el Clock y el Latch, en lugar de caer en el olvido entrará en el
siguiente chip de la cadena y seguirá en el juego.
Hemos conseguido una ampliación de otras 8 salidas digitales sin utilizar pines adicionales de
nuestro Arduino. Y naturalmente una vez visto el truco, no hay límite en principio al número
de chips que podemos concatenar.
Si ese que quería un cuadro de luces de 128 LEDS vuelve, lo podríamos arreglar con 128/8 = 16
chips. O si preferís, también existen estos chips en 16 bits: SN74LS674, 74F675A que son 16-Bit
Serial-In, Serial/Parallel-Out Shift Register, y lo arreglaríamos con solo 8 chips.
Si buscáis en internet encontrareis que existe casi cualquier cosa que os imaginéis en chips
digitales, pero tomároslo con precaución porque mientras que un 74HC595 lo compras por
1€, el SN74LS674 de 16 bits se va a 4€ y los demás no he mirado pero me lo imagino.
RESUMEN DE LA SESIÓN
o Hemos visto que los pines analógicos también se pueden usar como digitales.