Go Down

Topic: Problema al utilizar mas de 4 SN74HC165N (Read 388 times) previous topic - next topic

EnricRoca

Hola

He conectado 5 x SN74HC165N, pero no funciona correctamente.

La programacion y esquema electrico es exactamente el mismo del ejemplo https://playground.arduino.cc/Code/ShiftRegSN74HC165N excepto que estoy utilizando un Nano y 5 x SN74HC165N, y conectado los positivos que no aparecen en el esquema.

He cambiado el codigo tal y como dice, cambiando BYTES_VAL_T unsigned de int a long

Teniendo conectados los 5 SN74HC165N, resulta que si le digo que solo tengo 1 (#define NUMBER_OF_SHIFT_CHIPS 1), el primero funciona perfectamente, si le digo 2, tambien funcionan, 3 pues funcionan 3, 4 los 4. Pero si le digo 5, el primero deja de funcionar y no recibo informacion cuando pulso pero el resto funcionan perfectamente.

Gracias por vuestra ayuda.

Lucario448

Hay que modificar el código que proveen, ya que al utilizar una variable de 32 bits (unsigned long) para el retorno de datos, se estaría limitando a 4 registros.
Al tener 5, se estarían intentando ingresar 40 bits en una variable de 32; lo que efectivamente acaba descartando los bits del primer registro para acomodar los del quinto (desbordamiento).


Antes de realizar cambios grandes, prueba si colocar esto, en la respectiva línea, lo soluciona:

Code: [Select]
#define BYTES_VAL_T uint64_t
No es muy conocido, pero uint64_t es el único tipo de dato que permite declarar variables de 64 bits, ¡con este tienes espacio hasta para 8 registros!

Lucario448

PD: hubieran hecho así la parte de escoger el tipo de dato, solo habría que preocuparse de la definición NUMBER_OF_SHIFT_CHIPS:

Code: [Select]
#if NUMBER_OF_SHIFT_CHIPS < 2 // Only 1
#define BYTES_VAL_T byte

#elif NUMBER_OF_SHIFT_CHIPS == 2 //Exactly 2
#define BYTES_VAL_T unsigned int

#elif NUMBER_OF_SHIFT_CHIPS > 2 && NUMBER_OF_SHIFT_CHIPS < 5 // 3 or 4
#define BYTES_VAL_T unsigned long

#elif NUMBER_OF_SHIFT_CHIPS > 4 && NUMBER_OF_SHIFT_CHIPS < 9 // Between 5 and 8
#define BYTES_VAL_T uint64_t

#else // More than 8
#error "Only up to 8 chips are supported"

#endif
#endif
#endif
#endif

EnricRoca

Muchisimas gracias, ahora funciona a la perfeccion.

Los tiros tenian que ir por ahi, por que como dije ya cambie a unsigned long, pero nada.

Incluso modifique display_pin_values() para que me mostrara el valor de i aunque no fuera HIGH y me devolvia el numero de pin que yo pulsaba, pero no lo consideraba pulsado.

Repito, muchisimas gracias.

Go Up