desktop

Alimentar Arduino y motores con la misma fuente ?

Estuve revisando el diagrama y creo que está mal. ¿No?
Me parece que el pin 13 y el 14 están mal.
Deja hago una simulación y te comento, pero creo que va por ahí.
A ver si no me equivoco, porque se complica XD

Mira este vídeo que hice para que veas como funciona el 595
Prueba esto:

Código:
byte RelayDatos = 2;
byte RelayReset = 3;
byte RelayReloj = 4;
byte RelayOE=5;
byte Shift595 = 0b11011110;


void setup()
{
    pinMode(RelayDatos, OUTPUT);  //Se configuran los tres pines del
    pinMode(RelayReset, OUTPUT);   //74HC595 como salidas
    pinMode(RelayReloj, OUTPUT);
    pinMode(RelayOE, OUTPUT);
    digitalWrite(RelayReset,1);
    
}

void loop()
{
    Relay595(Shift595); //manda al primer 595
    Relay595(Shift595); //manda al segundo 595
    digitalWrite(RelayReloj,0); //Se hace un flanco de subida para 
    digitalWrite(RelayReloj,1); //enviar el Ultimo dato
    delay(2000); //pausa
   
    Resetea(); // resetea
    
    delay(2000); //pausa

}
void Resetea()
{
     digitalWrite(RelayReset,0);
    digitalWrite(RelayReloj,0);
    digitalWrite(RelayReloj,1);
    digitalWrite(RelayReset,1);
 
  }
void Relay595(byte A) 
{
    digitalWrite(RelayOE, 1);        //Desactiva el 74HC595  
    digitalWrite(RelayReloj,LOW);    //Flanco de subida   
    shiftOut(RelayDatos, RelayReloj, LSBFIRST, A);  //Entran los
    digitalWrite(RelayOE, 0);        //Ahora activa el 74HC595
}
Captura.jpg

En proteus se obvian el pin 8 y 16, que son la alimentación, pero los conectas OBVIO.
 
Última edición por un moderador:
si te funciona... creo que este codigo esta mas cool a 16bits...
Código:
byte RelayDatos = 2;
byte RelayReset = 3;
byte RelayReloj = 4;
byte RelayOE=5;
byte Shift8 = 0b11011110;
byte Shift16 = 0b11000110;


void setup()
{
    pinMode(RelayDatos, OUTPUT);  //Se configuran los tres pines del
    pinMode(RelayReset, OUTPUT);   //74HC595 como salidas
    pinMode(RelayReloj, OUTPUT);
    pinMode(RelayOE, OUTPUT);
    digitalWrite(RelayReset,1);
    
}

void loop()
{
    Relay595(); //manda 16bits a los  595

    delay(2000); //pausa

    bitWrite(Shift16,4,1);  //cambia 1 bit, el cuarto del segundo 595
    bitWrite(Shift8,5,0);  //cambia 1 bit, el quinto del primer 595
    Relay595();  //Actualiza relays

    delay(2000); //pausa

    Resetea(); // resetea
    
    delay(2000); //pausa

}
void Resetea()
{
    digitalWrite(RelayReset,0);
    digitalWrite(RelayReloj,0);
    digitalWrite(RelayReloj,1);
    digitalWrite(RelayReset,1);
  }
void Relay595() 
{
    digitalWrite(RelayOE, 1);        //Desactiva el 74HC595  
    digitalWrite(RelayReloj,LOW);    //Flanco de subida   
    shiftOut(RelayDatos, RelayReloj, LSBFIRST, Shift16);  //Entran los datos
    shiftOut(RelayDatos, RelayReloj, LSBFIRST, Shift8);  //Entran los datos
    digitalWrite(RelayReloj,0); //
    digitalWrite(RelayReloj,1); //Envia el Ultimo dato
    digitalWrite(RelayOE, 0);        //Ahora activa el 74HC595
}
 
Última edición:
Como siempre gracias por las explicaciones.
He estado haciendo pruebas y en principio parecería que tu circuito vá bien, pero creo que lo mismo estoy haciendo alguna conexión mal porque después de compilar y subir al Arduino, las salidas del 595 no se corresponden con el sketch.
Sucede que para las conexiones siempre me he guiado por el siguiente esquema, que se basa en la localización física de las "patitas" del 595 (al reset le llamo gatillo, quizá erróneamente):

FiaD9s2.png


El pin 5 de tu sketch (OE) he supuesto que es el 4º comenzando de la izquierda, es decir el GND, si?

Mira, he conseguido dos de estos 595:

jkZWre7.jpg


Entiendo que las conexiones de la derecha de la primera placa se conectan con sus correspondientes de la izquierda de la segunda, pero podrías comentarme cuales son las conexiones: a datos(¿SERIN?), a reset, a clock?
Gracias!
 
prueba asi...
jkZWre7.jpg

no estoy muy seguro pero creo que asi va... nunca los he usado en modulo

en el lado izquierdo esta las conexiones de los pines del arduino.

con respecto al primer esquema de los encapsulados DIP... busca como se enumeran las patitas de esos encapsulados... hay un estandar...
de la parte inferior izquierda es el 1, hasta el 8 de la parte inferior derecha...
la parte superior derecha es el 9, hasta la parte superior izquierda que es el 16
 
Última edición:
RCLK creo que es el reloj del latch
SRCLK seria el reloj del registro de corrimiento

No los pongas en paralelo.

Pd: Reset es reset, "gatillo" es el reloj del latch, no confundas las cosas, si bajas el reset (SRCLR) se borran los datos del shift register, si mandas pulso al reloj del latch los datos del shift son copiados al latch donde pasan a las salidas.

__________________________________________________

No había leído el código y debo decir que lo están haciendo mal

OE cambia a Z las salidas, si usas eso provocarás reinicio a un estado indeterminado en las salidas, en algunos casos eso dará problemas, está ahí para usar el chip en un bus de datos compartidos, no para usarse como mecanismo de control al enviar los datos, para eso se usa el reloj de latch.

En tu ejemplo pones en paralelo ambos relojes, en tu código pones el reloj a bajo, envías los datos y luego envías otro pulso adiciona al reloj que está en paralelo, esto también desplazará el registro otro bit, no se si funciona bien, habría que ver el diagrama de tiempo y los flancos de transferencia.

La manera adecuada está claramente ejemplificada en Arduino en la referencia
y como tutorial
únicamente se hace
Código:
//ground latchPin and hold low for as long as you are transmitting
* * digitalWrite(latchPin, LOW);
* * shiftOut(dataPin, clockPin, LSBFIRST, j); * 
* * //return the latch pin high to signal chip that it 
* * //no longer needs to listen for information
* * digitalWrite(latchPin, HIGH);

Considerando que los relevadores son "lentos", no debería afectar mucho tu método si la velocidad de transferencia es lo suficientemente alta, pero si la usa para un dispositivo que detecte un flanco de disparo, cuando cambie las salidas a Z podría interpretarlo como otro pulso nuevo.
 
Última edición:
He estado leyendo varios artículos y según entiendo en la siguiente imagen:

jkZWre7.jpg


las entradas de la izquierda son:
SERIN: Datos, en mi sketch, el pin2
RCLK: Latch, en mi sketch "Gatillo", pin 3
SRCLK: Reloj, en mi sketch pin 4
OE: En alta desactiva la salida de datos, pero no los borra del registro, en baja permite que los datos salgan, o sea que en baja el Shift Register se vuelve "transparente" a la salida de datos, según he leído por ahí, algunos colocan una resistencia de 10K a la entrada de 5 volts (resistencia pull down?) y lo dejan siempre en baja, o sea que OE siempre está conectado a GND, a veces con una resitencia de 10k a 5v. Es el cuarto pin que se vé en algunos esquemas buscando en google, pero no termino de entender para qué gastar una cuarta salida del Arduino si se puede conectar directamente a GND y ahorrar ese cuarto pin.
SRCLR: Según entiendo es un reset si se lo pone en baja, de lo contrario siempre conectado a los 5v.

El sketch sería:

Código:
byte RelayDatos = 2;
byte RelayGatillo = 3;
byte RelayReloj = 4;
byte Primer595 = 0b11111111;     //todos apagados (los relés tienen lógica inversa)
byte Segundo595 = 0b11111111;

void setup()
{
    pinMode(RelayDatos, OUTPUT);       //Se configuran los tres pines del
    pinMode(RelayGatillo, OUTPUT);     //74HC595 como salidas
    pinMode(RelayReloj, OUTPUT);
}

void loop()
{
    bitWrite(Primer595,0,0);                     //Activa la primera salida del primer 595(lógica inversa)
    bitWrite(Segundo595,0,0);                  //Activa la primera salida del segundo 595(lógica inversa)
    Relay595(Primer595,Segundo595);        //Llama a la función Relay595
    delay(2000);
    bitWrite(Primer595,0,1);            
    bitWrite(Segundo595,0,1);
    Relay595(Primer595,Segundo595);        //Llama a la función Relay595
    delay(2000);
}
void Relay595(byte A, byte B) 
{
    digitalWrite(RelayGatillo, 0);        //Desactiva el 74HC595         
    shiftOut(RelayDatos, RelayReloj, MSBFIRST, A);  //Entran los
    shiftOut(RelayDatos, RelayReloj, MSBFIRST, B);  //datos al 595
    digitalWrite(RelayGatillo, 1);        //Ahora activa el 74HC595
    delay(500);                           //Aguarda medio segundo
}
 
Última edición:
Mmmm... ya me empieza a desesperar esto... jajajja

no vi la edicion de nuyel, y no concuerdo en algunas partes que dice....

creo que por ahi tengo un par de 595, un arduino y un modulo con reles que estoy armando con transistores para otra cosa... vere si no me da flojera y armo el circuito funcional o comento los detalles si se presenta problemas en un video...
y voy a partir de la trama segun la ficha tecnica... (no de tutoriales ni foros de arduino ni etc...)

Captura.JPG

si algo sale mal, la culpa la tiene Texas instruments... :LOL:
 
Última edición:
:D:LOL::aplauso:
Pues cuando lo montes (y espero que sea pronto), espero que me aclares, pero por favor, "hablando en cristiano", no sé si te has percatado que mis conocimientos de electrónica no son para presumir.
Con respecto a lo que he comentado en el hilo anterior, ¿son correctas las descripciones de las entradas?
 
Mmm... mira deja lo armo... y veo como estan esos modulos...

Yo al igual qur nuyel tengo duda que funcione porque podria decirse que no estan diseñados para activar relay, porque hay de dos sopas... o las dejas las salidas en alta impedancia o las mantienes activas y mientras se estan lacheando las salidas van cambiando de estado y puede que encienda y apague el rele haciendo una microoscilacion... pero como dijo nuyel... los relays son tan lentos que quizas en ninguno de los dos modos se inmuten...

 
Ok, cuando armes el circuito, trata de conectar a la salida del relé por ejemplo un motor, lo digo de cara a ver si no dá fallo, creo que te comenté que tengo montado dos 595 que encienden directamente 16 diodos leds y no dan ningún fallo (pero los leds son de 20 mA)...
 
ok.. pero ya vi y no tengo el 595... tengo el 4094 que creo son lo mismo incluso pin a pin... lo armare en protoboard y con la misma fuente... de echo creo que aqui comente que hice un proyecto de un dispensador y llevaba unos 4094 y todo se alimentaba con la misma fuente de ahi sacare los 4094.

en cuanto lo arme comento.
 
Como se diría por ahí "hay que jod... mucho" :LOL::cry:
Recapitulando, el circuito que he montado de prueba está formado por 2 shift register 74HC595, un Arduino Uno y un módulo de 4 relés optoacoplados. Más arriba en el mismo tema hay fotos, circuitos y el sketch.

En la parte de carga, he puesto dos salidas de 220v AC: una lámpara led de 10 wats y una válvula solenoide (a veces un secador de cabello de 1400 wats) y otras dos salidas de 12v DC que alimentan un ventilador de 80 mm y un motor (bomba peristáltica).

Mientras no se conecte la bomba peristáltica el circuito funciona bien, en cuanto conecto la bomba se vuelve loco :eek:
Le coloqué un condensador electrolítico de 33uf y 25v a la entrada del motor pero igual, sigue dando fallos.

El motor en cuestión lo conecté con un par de cables de unos 20 cm de largo, y no sé cómo se me ocurrió cambiar y conectarlo utilizando 1,5 metros de cable bipolar, que es la distancia a la cual irá la bomba peristáltica en la práctica, Y NO DA FALLOS!!!!!!

¿El metro y medio de cable disipó la interferencia del motor? :unsure:
 
Atrás
Arriba