Buenas y bienvenidos a la entrada habitual de los Lunes. Ya estamos acabando con los ejemplos basados en LEDs, así que iremos empezando a cerrar este capítulo con la creación de un "Escáner Larson", o, dicho de otro modo, las luces de KITT (O los Cylons de Battlestar: Galactica). Usaremos 8 LEDs para recrear dicho efecto, pero para liberar pines en nuestra placa, vamos a usar un micro denominado Shift Register (Desplazador de Registro), que nos permite aumentar el numero de pines digitales de que disponemos de manera que utilizando 3 pines de nuestra placa, obtendremos más de 10 pines extra, y por supuesto, podemos combinar todos los de desplazadores que queramos, con lo que podemos tener un número ilimitado de pines (Desgraciadamente, de memoria seguimos con la EEPROM de 32k).
![]() | |
Desplazador de registro 74HC595N |
Como siempre, empezaremos por el diagrama:
Aquí podemos observar que, tomando los pines D4, D5 y D6, sacamos 8 pines extra que denominaremos D1a, D2a, D3a, D4a, D5a, D6a, D7a y D8a. La entrada de 5V la conectamos directamente al desplazador, y la toma de tierra tanto del breadboard como del desplazador las dirigimos al mismo punto. Pasamos a la lista de materiales que utilizaremos:
Como siempre, empezamos por disponer la protoboard en una superficie plana, firme y con bastante luz, para evitar problemas de visión. (En mi caso suelo acercarme siempre una lámpara).
Uno a uno, vamos poniendo los LEDs sobre la protoboard, respetando la polaridad de cada uno, y de esta forma: Rojo, rojo, amarillo, verde, verde, amarillo, rojo, rojo. (Se realizó así por falta de diodos rojos):
Insertamos el 74HC595N en la breadboard, en el centro, aprovechando el hueco para insertar ICs que nos trae la breadboard. El lado con la hendidura en el centro es el lado por el que empezamos a contar (o dicho de otra forma, el que pondremos siempre mirando hacia arriba):
Poco a poco, vamos insertando las resistencias, con cuidado. Tienen que ir todas conectadas si o si al micro, ya que el micro es el equivalente al polo positivo:
ATENCIÓN: Pase lo que pase, que NINGUNA resistencia entre en contacto con la otra, ya que podemos FREIR EL CIRCUITO DE LA PLACA. |
Comenzamos el cableado, conectando los cables amarillos en la breadboard, y dejando los referentes a D4 y D6 sin conectar:
Continuamos con los cables naranjas, dejando así los LEDs conectados al Desplazador, y el D5 libre:
Conectamos los cables azules, referentes a la toma de tierra del Desplazador de Registros (usa dos tomas de tierra, una para el desplazador y otra para el resto del circuito):
Conectamos el cable blanco:
Y finalmente conectamos la salida de tierra y el de 5V en la breadboard:
Guiándonos del diagrama de Fritzing, conectamos los pines en la placa, como corresponde:
Y entonces cargamos el Sketch, que podemos tanto descargarlo AQUI, como copiarlo:
int clockPin = 6; //D6
int dataPin = 4; //D4
int latchPin = 5; //D5
byte patterns[40] = {
B00000000, 100,
B00000001, 100,
B00000011, 100,
B00000110, 100,
B00001100, 100,
B00011000, 100,
B00110000, 100,
B01100000, 100,
B11000000, 100,
B10000000, 100,
B00000000, 100,
B11000000, 100,
B01100000, 100,
B00110000, 100,
B00011000, 100,
B00001100, 100,
B00000110, 100,
B00000011, 100,
B00000001, 100,
B00000000, 100,
};
int index = 0;
int count = sizeof(patterns) / 2;
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, patterns[index * 2]);
digitalWrite(latchPin, HIGH);
delay(patterns[(index * 2) + 1]);
index++;
if (index >= count){
index = 0;
}
}
¿Cómo funciona el código? Lo primero que hace es identificar los 3 pines referentes al Desplazador, y acto seguido lee la progresión de los LEDs a la hora de encenderse. Luego activa los 3 pines del Desplazador como pines de salida, y luego con la instrucción shiftOut va desplazandose, de forma que va activando los pines que necesitamos sin tener los 8 pines ocupados, aliviandonos un poco el número de pines que utilizamos. El código por supuesto se puede simplificar más, por ejemplo, creando un bucle For para controlar las luces.
El vídeo no he podido tenerlo a tiempo para complementar la entrada, aunque mañana sin falta estará aquí subido el video.
La semana que viene continuaremos cerrando el capitulo referido a los LEDs, hasta entonces, no dejeis de revisar el blog.
No hay comentarios:
Publicar un comentario