shift register 74HC595

necesito pines digitales en el arduino mega y me he encaminado a conocer "shift register 74HC595" para llegar a tal fin, he abquirido 2 de ellos y un condensador 100nf, y siguiendo los pasos del tutorial de arduino sobre este registro lo he montado, pero no me acaba de funcionar.
http://www.arduino.cc/es/Tutorial/ShiftOut

he copiado el tercer ejemplo para hacer la pruevas, y provando... no me salen los 5 voltios en las salidas, para poder maniobrar mediante unos ulm2803, 15 contactores, pero lo que me interesa, es conseguir hacer funcionar los registros y entender el tercer ejemplo
he montado en una board lo el dibujo sin los led y testeo para comprovar voltaje de las salidas es curioso....

y el codigo que le he incrementado el tiempo en el que los led deven de permanecer encendidos para ver bien el voltaje de salida

/*
Registro de desplazamiento Ejemplo
por dos registros de desplazamiento 74HC595

Este esquema se convierte en cada uno de los LEDs conectados a dos registros de desplazamiento 74HC595,
en la secuencia de salida de 0 a 15 de salida.

hardware:

  • 2 74HC595 registro de desplazamiento conectado a los pines 2, 3 y 4 de la Arduino,
    como se detalla a continuación.
  • LEDs conectados a cada una de las salidas del registro de desplazamiento

Creado 22 de mayo 2009
Modificado 23 de marzo 2010
por Tom Igoe

*/

//Pin connected to latch pin (ST_CP) of 74HC595
// Pin conectado al cerrojo pasador (ST_CP) del 74HC595
const int latchPin = 8;
//Pin connected to clock pin (SH_CP) of 74HC595
// Pin conectado al pin de reloj (SH_CP) del 74HC595
const int clockPin = 12;
//Pin connected to Data in (DS) of 74HC595
// Pin conectados a los datos de (DS) del 74HC595
const int dataPin = 11;

char inputString[2];

void setup() {
//set pins to output because they are addressed in the main loop
// conjunto de pines a la salida, ya que se tratan en el bucle principal
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
Serial.begin(9600);
Serial.println("reset");
}

void loop() {
// iterate over the 16 outputs of the two shift registers
// Iterar a través de las 16 salidas de los dos registros de desplazamiento
for (int thisLed = 0; thisLed < 16; thisLed++) {
// write data to the shift registers:
// Escribir los datos en los registros de desplazamiento:
registerWrite(thisLed, HIGH);
// if this is not the first LED, turn off the previous LED:
// Si no es el primer LED, apague el LED anterior:
if (thisLed > 0) {
registerWrite(thisLed - 1, LOW);
}

// if this is the first LED, turn off the highest LED:
// Si esta es la primera LED, apague el LED más alto:
else {
registerWrite(15, LOW);
}
// pause between LEDs:
// Hacer una pausa entre los LEDs:
delay(1000); // mas tiempo
}

}

// This method sends bits to the shift registers:
// Este método envía los bits de los registros de desplazamiento:

void registerWrite(int whichPin, int whichState) {
// the bits you want to send. Use an unsigned int,
// so you can use all 16 bits:
// Los bits que desea enviar. Use un entero sin signo,
// Para que pueda utilizar los 16 bits:
unsigned int bitsToSend = 0;

// turn off the output so the pins don't light up
// while you're shifting bits:
// Desactivar la salida para los pasadores no se encienden
// Mientras que usted está cambiando bits:
digitalWrite(latchPin, LOW);

// turn on the next highest bit in bitsToSend:
// Enciende el bit más próxima en bitsToSend::
bitWrite(bitsToSend, whichPin, whichState);

// break the bits into two bytes, one for
// the first register and one for the second:
// Apertura de los bits en dos bytes, uno para
// El primer registro y otro para el segundo:
byte registerOne = highByte(bitsToSend);
byte registerTwo = lowByte(bitsToSend);

// shift the bytes out:
// Cambio de los bytes de salida:
shiftOut(dataPin, clockPin, MSBFIRST, registerTwo);
shiftOut(dataPin, clockPin, MSBFIRST, registerOne);

// turn on the output so the LEDs can light up:
// Conectar la salida de lo que el LED se enciende:
digitalWrite(latchPin, HIGH);
}

el programa hace que tenga tension una salida detras de otra....
testeando las salida veo que tengo algo de voltaje pero minimo (mV), y curiosso digo, pues provando... al sacar el cable que va a la entrada del primer registro ( el de "data" que viene del arduino )salen los 5 voltios deseados en las salidas no entiendo....

Pacooh

  • acordate de usar el botoncito de # - Insert Code para meter el código
  • No uses el capacitor del ejemplo
  • Acordate que el 2803 es NPN, con lo cual te habilita la tierra, polo negativo o como se llame.

Si los 2803 son npn y a ellos les daría la señal los integrados 74HC595 controlados por arduino.
Haré un esquema, hoy no.... mañana!!! Que tengo los ojos como platos

Creo que son los pines que pone en el ejemplo que no son los que tocan para comunicarse co los integrados 74HC595. hace lo que le dan en gana el ejemplo

Salvo por el capacitor/condensador en la línea de datos, que a mi sólo me dio problemas (la solución es eliminarlo) los pines están bien en el ejemplo. Yo lo usé y me funcionó.
Acordate que el Pin 13 (OE) tiene que quedar LOW y el PIN 10 (MR) en HIGH, en ambos integrados.
Si no funciona, pasá un esquema o una fotito y vemos.
Saludos

bueno pues esto es lo que tengo montado, aun sigo indagando por google a ver que encuentro....

Coincido con los demás en que en ese montaje lo único que da problemas es el condensador, lo quitas y listo. Por lo demás yo lo he usado en varios montajes, el esquema del ejemplo tal cual (sin condensador) y funciona sin problemas.

Comprueba que los pines de control del 74HC595 que tienen que estar constantemente a 5v o a GND reciban la señal adecuada (un mal contacto en la protoboard puede dar dolores de cabeza).

Un saludo.