LABORATORIO NUMERO 7
En este laboratorio se usara el integrado 74HC595 el cual es un encapsulado de registro de desplazamiento, por lo tanto este integrado nos permitirá reducir la cantidad de pines utilizados en el arduino, y así poder aumentar la cantidad de salidas controladas por este.
El 74HC595 un registro de desplazamiento de 8 bits con entrada serie, salida serie o paralelo con latch (bloqueo); 3 estados.". En otras palabras, puedes usarlo para controlar 8 salidas simultaneas usando unos pocos pines del micro controlador Incluso se pueden enlazar varios integrados de manera que ampliamos el numero de salidas mucho mas.
este integrado se sincroniza por medio del pinClock asignado en el arduino el cual permitirá efectuar su trabajo de una manera adecuada.
Este modo de comunicación difiere con la "comunicación serie asíncrona de la función Serial.begin() en la que emisor y receptor fijan de forma independiente una velocidad de transferencia.
A Continuación se podra observar un esquema del encapsulado con toda la configuración de sus pines de entrada y salida.
después de haber configurado el encapsulado procederemos a la programación de la comunicación entre este y el sistema arduino el cual se basa en un comando de transmisión de datos llamado shiftout, después de esto procederemos a establecer la configuración de las secuencias que queremos realizar por medio de los diodos leds, el cambio de secuencias se lograra gracias a la trasmisión de una señal entre 0 y 5 voltios generada por un potenciometro conectado a un pin de entrada análoga
MATERIALES
- 1 arduino mega adk
- 8 diodos leds
- 1 potenciometro de 1k
- 1 computador
- cables
- integrado 74HC595
DIAGRAMAS
DIAGRAMA DE MONTAJE EN PROTOBOARD
.
DIAGRAMA ESQUEMÁTICO
DIAGRAMA PARA MONTAJE EN TARJETA PERFORADA
FOTOS DEL PROCESO DE MONTAJE
foto 1
foto 2
foto 3
foto 4
foto 5
foto 6
CÓDIGO EN ARDUINO
#define pot A0
//Pin connected to latch pin (ST_CP) of 74HC595
const int latchPin = 44;
//Pin connected to clock pin (SH_CP) of 74HC595
const int clockPin = 46;
////Pin connected to Data in (DS) of 74HC595
const int dataPin = 48;
const int MaxLED = 8;
int LED[MaxLED] = {
2,3,4,5,6,7,8,9};
const int MaxSEQ = 32;
int seq0[MaxSEQ] = {1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1,1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1};
int seq1[MaxSEQ] = {1,2,4,8,4,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,32,64,128,8,16,128,32,16,1,68,2,16};
int seq2[MaxSEQ] = {1,8,128,2,16,64,4,128,8,1,64,4,32,2,4,1,8,128,2,16,64,4,128,8,1,64,4,32,2,4,128,1};
int seq3[MaxSEQ] = {1,128,2,64,4,32,8,16,16,32,16,64,8,128,2,1,1,128,2,64,4,32,8,32,16,32,16,64,8,128,2,1};
int seq4[MaxSEQ] = {128,64,32,16,8,4,2,1,1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1,1,2,4,8,16,32,64,128};
int seq5[MaxSEQ] = {8,16,4,32,2,64,1,128,128,64,32,16,8,4,2,1,8,16,4,32,2,16,1,128,128,64,32,2,32,64,128,1};
int seq6[MaxSEQ] = {2,16,4,64,2,8,32,128,128,32,8,2,64,16,4,1,1,4,16,64,2,8,32,128,128,32,8,2,64,16,4,1};
int seq7[MaxSEQ] = {1,16,2,32,4,64,16,128,128,16,64,8,32,4,16,1,2,1,16,2,32,4,64,16,64,64,16,64,8,64,4,14};
void setup() {
//set pins to output because they are addressed in the main loop
pinMode (pot, INPUT);
for(int i=0;i<MaxLED;i++)
pinMode(LED[i],OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
// Serial.begin(9600);
// Serial.println("reset");
}
void loop() {
int valorpot = analogRead(pot); //lectura de la secuencia proveniente del pot
int i = map(valorpot, 0, 1023, 0, 7); //mapeo de los datos enviados por el pot de o a 7
cambioseq(i);
}
void cambioseq(int i)
{
switch (i){ // interruptor seleccionador de secuencia
case 1:
for(int x = 0; x < MaxLED; x++){
accionseq(seq0[x]);
delay(100);
}
break;
case 2:
for(int x = 0; x < MaxLED; x++){
accionseq(seq1[x]);
delay(100);
}
break;
case 3:
seq2;
for(int x = 0; x < MaxLED; x++){
accionseq(seq2[x]);
delay(100);
}
break;
case 4:
for(int x = 0; x < MaxLED; x++){
accionseq(seq3[x]);
delay(100);
}
break;
case 5:
for(int x = 0; x < MaxLED; x++){
accionseq(seq5[x]);
delay(100);
}
break;
case 6:
for(int x = 0; x < MaxLED; x++){
accionseq(seq5[x]);
delay(100);
}
break;
case 7:
for(int x = 0; x < MaxLED; x++){
accionseq(seq6[x]);
delay(100);
}
break;
case 8:
for(int x = 0; x < MaxLED; x++){
accionseq(seq7[x]);
delay(100);
}
break;
}
}
// Uso de la orden interna shiftout función
void accionseq(int i)
{
digitalWrite (latchPin, LOW);
shiftOut (dataPin, clockPin, MSBFIRST, i);
digitalWrite (latchPin, HIGH);
delay(50);
}
No hay comentarios:
Publicar un comentario