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....