Go Down

Topic: Preguntas sobre los 595 y 165 (Read 2684 times) previous topic - next topic

Metaconta

Apr 06, 2015, 09:51 am Last Edit: Apr 06, 2015, 09:52 am by Metaconta
Hola a todos y a todas:

Quiero manejar bien estos dos integrados tanto del 74HC595 y el 74HC165 de forma manual antes de meterme con ellos a base de Arduino.



Ver zoom.

Hay un enlace abajo para que descarguen el ejemplo en Proteus.

Se manejar el 74HC595 de forma manual, lo que no tengo claro cual son los bits de menor y mayor peso a su salida.

1) ¿La salida Q7 del 74HC595 es el bit de mayor peso o menor peso?

Es la única duda que tengo sobre del 595.

En cuanto al 74HC165 no tengo idea de como funciona, a pesar de mirar vídeos como este, no me hace caso. No se si es porque tengo algo mal conectado o soy yo mismo el problema.

Voy a explicar como creo que funciona el 74HC165 y si me equivoco me corrigen. Pongo el bit 4 activado. Dejo pulsado PL a 1 o activado, mientras pulso 8 veces CLK. Si no pulso PL o lo dejo pulsado mientras estoy pulsando CLK, esto no funciona.

2) ¿Es así su manera de funcionar?

Última duda, al menos por ahora. Quiero conectar el 74HC595 y el 74HC165 juntos, es decir, que si pongo como entrata los bits estos por poner un ejemplo 11110000 en el 165, a la salida del 595 tiene que aparecer los mismos bits de entrada, tambiéna 11110000.

3) ¿Cómo son sus conexiones en el circuito de arriba con el Proteus?

Por ahora es todo, gracias por leer hasta aquí.

Un cordial saludo.

surbyte

#1
Apr 06, 2015, 02:08 pm Last Edit: Apr 06, 2015, 03:18 pm by surbyte
El 74HC165 anda perfecto. Prueba esto.
Boton 4 conectado a 5volts no lo pulses porque no puedes hacer las dos cosas a la vez
Luego PL en 1, luego pulsa 8 veces CLK y verás que a la 4ta vez se prende.
Luego te respondo el resto.

1) ¿La salida Q7 del 74HC595 es el bit de mayor peso o menor peso?
Si, Asi es, por eso cuando anidas 595s, usas la salida Q7 para la siguiente etapa, justamente por ser el MSB.

2) ¿Es así su manera de funcionar?
Si pero en tu esquema hay una pequeña falla, y es que como lo estas haciendo manual, en lugar de push buttons debes usar switch button, o sea verdaderos interruptores que mantengan el estado.
Reemplaza las entradas del 165 por los comandos que tienes para PL y CLK y veras que si funciona.


3) ¿Cómo son sus conexiones en el circuito de arriba con el Proteus?
No entiendo la pregunta,  te refieres a tenerlos juntos 595 y 165?

Se que esto no responde exacto porque creo que quieres una conexión como la que sugieres en el punto 2

Este es un teclado de 8x8 teclas o sea 64 teclas usando una combinación 595 y 165. De el puedes aprender o tal vez no es lo que buscas.



Este código es el que lo hace funcionar, tal vez te ayude
Code: [Select]
#include <SPI.h>
02
03 enum { REG_LATCH_IN = 8 };
04 enum { REG_LATCH_OUT = 9 };
05
06
07 void setup()
08 {
09   Serial.begin(9600);
10   SPI.begin();
11
12   pinMode(REG_LATCH_IN, OUTPUT);
13   digitalWrite(REG_LATCH_IN, HIGH);
14   pinMode(REG_LATCH_OUT, OUTPUT);
15   digitalWrite(REG_LATCH_OUT, HIGH);
16 }
17
18 void loop()
19 {
20
21    digitalWrite(REG_LATCH_OUT, LOW);
22    SPI.transfer(0);
23    digitalWrite(REG_LATCH_OUT, HIGH);
24    
25    digitalWrite(REG_LATCH_IN, LOW);
26    digitalWrite(REG_LATCH_IN, HIGH);
27    int states = SPI.transfer(0);
28
29         Serial.print("Button-");
30         Serial.println(states); // шлём номер кнопки
31         delay(100);
32 }

Metaconta

Hola:

Con el nuevo esquema algo mejorado.

Ver zoom.

1) ¿Hay que dejar pulsado PL en estado a 1 o activado, o hay que dejarlo a 0 como normalmente?

2) Pensando bien, si hay que usar más de tres pines, por lo menos uno más y se llama Data.
¿El motivo?

Porque en cualquier momento desde Arduino puede modificar por sofrware las salidas del 74HC595 sin tener encuenta las entradas digirales físicas. Por ejemplo: Hay una a alarma de algo y se activa de modo intermitente una salida del 595 un zumbador más un Led.

3) Otra cosa:
Ya que tienes PL activado por defecto. Por lo que he probado, hay que pulsar los pulsadores de entrada por ejemplo 00100000, luego PL, luego 8 veces Data y al final Latch para que aparezca el Led correspondiente encendido.

¿Si tengo un sensor digital y precisamente quiero el bit sindicado arriba?

El sensor solo deja pulsado el bit de entrada correspondiente, como dije arriba hay que enviarlo así: 00100000.

4) ¿Quién activa el PL? (Que no sea una persona, no olvidar que estos Ic se conectará a Arduino).

Saludos.

surbyte

lo que no ves es que el 165 no te lee nada si no mantienes presionado o no el pulsador deseado MIENTRAS le das un cambio al reloj.
Dime como haces con ese esquema para peresionar el boton 4 y ademas activar el reloj que haga que se vea el 4to bit en 1? Sigo hablando del 165.

Metaconta

#4
Apr 08, 2015, 10:41 pm Last Edit: Apr 08, 2015, 10:42 pm by Metaconta
Hola:

1)
Pulso los botones 7, 6 y 5, más bien dejado pulsado a 1 o alto o encendido o activado o como quieras decirlo.

2) PL está pulsado como normalmente pulsdo, le doy un toque y se queda otra vez pulsado.

3) Pulso en mi caso Clock 9 veces.

4) Pulso Latch y se encienden los Led que exactamente son los pulsadores 7, 6 y 5, es decir, los mismos que debería ser.

¿Alguna otra pregunta, campeón?

Un cordial saludo.

surbyte


Metaconta

#6
Apr 09, 2015, 04:17 am Last Edit: Apr 09, 2015, 06:08 am by Metaconta
Buenas:

He montado, al principio con todo tipos de fallos, lo volví a montar en una DemoBoard.


Ver zoom.

1) Al encender el 74HC595, ¿es normal que los Led estén todos encendidos?
Si pulso Latch se apagan todos de golpe.

2) Parece ser que tiene antirebotes, porque sea interruptores o pulsadores, me hace cosas raras. Con esto digo. ¿Hay algún ejemplo de Arduino UNO que contenga ejemplo básicos sobre el control del 74HC595?
Aunque sea un Led corriendo en una dirección y luego vovler.

Saludos.

Edito:
Encontré este:
http://arduino.cc/en/pmwiki.php?n=tutorial/ShiftOut

Code: [Select]
//**************************************************************//
//  Name    : shiftOutCode, Hello World                                
//  Author  : Carlyn Maw,Tom Igoe, David A. Mellis
//  Date    : 25 Oct, 2006    
//  Modified: 23 Mar 2010                                
//  Version : 2.0                                            
//  Notes   : Code for using a 74HC595 Shift Register           //
//          : to count from 0 to 255                          
//****************************************************************

//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;



void setup() {
  //set pins to output so you can control the shift register
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  // count from 0 to 255 and display the number
  // on the LEDs
  for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
    // take the latchPin low so
    // the LEDs don't change while you're sending in bits:
    digitalWrite(latchPin, LOW);
    // shift out the bits:
    shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay);  

    //take the latch pin high so the LEDs will light up:
    digitalWrite(latchPin, HIGH);
    // pause before next value:
    delay(500);
  }
}

http://arduino.cc/en/Tutorial/ShftOut11

Funciona.

Aún así quiero saber la primera pregunta y hacer otro tipo de códigos que al pulsar un pulsador externo active y desactive el Led que yo tenga indicado, por ejemplo esto.

00100000

Si vuelvo a pulsar.

00000000

Espero que se entienda.

Edito 2:

Hice un pequeño código, parece que si me funciona.
Code: [Select]

// Pin conectado a ST_CP del 74HC595.
int latchPin = 8;
// Pin conectado a  SH_CP del 74HC595.
int clockPin = 12;
// Pin conectado a  DS del 74HC595.
int dataPin = 11;


void setup() {
// Pines configurados como salidas.
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  
  digitalWrite(latchPin, LOW); // Apaga todos los Led desde el inicio.
  shiftOut(dataPin, clockPin, MSBFIRST, 128); // 10000000 en binario.
  digitalWrite(latchPin, HIGH);
  delay(500); // Retardo de 0.5 segundos.
  
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, 1); // 00000001 en binario.
  digitalWrite(latchPin, HIGH);
  delay(500); // Retardo de medio segundo.
}


Otro ejemplo tipo coche fantástico. Se que se puede reducir el código a lo bestia, pero no me sale. ;)
Code: [Select]


// Pin conectado a ST_CP del 74HC595.
int latchPin = 8;
// Pin conectado a  SH_CP del 74HC595.
int clockPin = 12;
// Pin conectado a  DS del 74HC595.
int dataPin = 11;

int Tiempo = 100;

void setup() {
// Pines configurados como salidas.
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
 
  digitalWrite(latchPin, LOW); // Apaga todos los Led desde el inicio.
  shiftOut(dataPin, clockPin, MSBFIRST, 128); // 10000000 en binario.
  digitalWrite(latchPin, HIGH);
  delay(Tiempo); // Retardo de 0.5 segundos.
 
  digitalWrite(latchPin, LOW); // Apaga todos los Led desde el inicio.
  shiftOut(dataPin, clockPin, MSBFIRST, 64);
  digitalWrite(latchPin, HIGH);
  delay(Tiempo); // Retardo de 0.5 segundos.
 
  digitalWrite(latchPin, LOW); // Apaga todos los Led desde el inicio.
  shiftOut(dataPin, clockPin, MSBFIRST, 32);
  digitalWrite(latchPin, HIGH);
  delay(Tiempo); // Retardo de 0.5 segundos.
 
  digitalWrite(latchPin, LOW); // Apaga todos los Led desde el inicio.
  shiftOut(dataPin, clockPin, MSBFIRST, 16);
  digitalWrite(latchPin, HIGH);
  delay(Tiempo); // Retardo de 0.5 segundos.
 
  digitalWrite(latchPin, LOW); // Apaga todos los Led desde el inicio.
  shiftOut(dataPin, clockPin, MSBFIRST, 8);
  digitalWrite(latchPin, HIGH);
  delay(Tiempo); // Retardo de 0.5 segundos.
 
  digitalWrite(latchPin, LOW); // Apaga todos los Led desde el inicio.
  shiftOut(dataPin, clockPin, MSBFIRST, 4);
  digitalWrite(latchPin, HIGH);
  delay(Tiempo); // Retardo de 0.5 segundos.
 
  digitalWrite(latchPin, LOW); // Apaga todos los Led desde el inicio.
  shiftOut(dataPin, clockPin, MSBFIRST, 2);
  digitalWrite(latchPin, HIGH);
  delay(Tiempo); // Retardo de 0.5 segundos.
 
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, 1); // 00000001 en binario.
  digitalWrite(latchPin, HIGH);
  delay(Tiempo); // Retardo de medio segundo.
 
    digitalWrite(latchPin, LOW); // Apaga todos los Led desde el inicio.
  shiftOut(dataPin, clockPin, MSBFIRST, 2);
  digitalWrite(latchPin, HIGH);
  delay(Tiempo); // Retardo de 0.5 segundos.
 
    digitalWrite(latchPin, LOW); // Apaga todos los Led desde el inicio.
  shiftOut(dataPin, clockPin, MSBFIRST, 4);
  digitalWrite(latchPin, HIGH);
  delay(Tiempo); // Retardo de 0.5 segundos.
 
    digitalWrite(latchPin, LOW); // Apaga todos los Led desde el inicio.
  shiftOut(dataPin, clockPin, MSBFIRST, 8);
  digitalWrite(latchPin, HIGH);
  delay(Tiempo); // Retardo de 0.5 segundos.
 
    digitalWrite(latchPin, LOW); // Apaga todos los Led desde el inicio.
  shiftOut(dataPin, clockPin, MSBFIRST, 16);
  digitalWrite(latchPin, HIGH);
  delay(Tiempo); // Retardo de 0.5 segundos.
 
    digitalWrite(latchPin, LOW); // Apaga todos los Led desde el inicio.
  shiftOut(dataPin, clockPin, MSBFIRST, 32);
  digitalWrite(latchPin, HIGH);
  delay(Tiempo); // Retardo de 0.5 segundos.
 
    digitalWrite(latchPin, LOW); // Apaga todos los Led desde el inicio.
  shiftOut(dataPin, clockPin, MSBFIRST, 64);
  digitalWrite(latchPin, HIGH);
  delay(Tiempo); // Retardo de 0.5 segundos.
}


Le voy cogiendo el truco.

Ahora a por el 74HC165.

surbyte

Ahh visión limitada de mi parte.
Yo pensé que usabas el simulador como en mi caso, por eso te decía,  cómo haces para presionar 4 cosas a la vez.


Go Up