Cómo conectar un MSP430G2553 a 24 entradas con la ayuda de tres 74HC165

El objetivo es leer 24 entradas empleando tres pines del microcontrolador. Para ello se utilizan en cascada tres 74HC165, conectando la salida QH de uno a la entrada SER del siguiente y la última salida QH al microcontrolador.

img2

Los pines CLK y SH/LD se conectan en paralelo.

Los pines CLK INH se pueden conectar en paralelo al microcontrolador o dejarlos conectados a GND. El chip ignora la señal de CLK con CLK INH high.

Tres 74HC165 conectadosen cascada a un MSP430

Esquema de conexión

 

En el esquema aparece un buffer no inversor CD4050 para convertir la señal de 5V a 3.3V que utiliza el MSP430. También he añadido un condensador de 10nF en la linea LD para mitigar el ruido.

 

En el analizador lógico se ve así.

En el analizador lógico se ve así.

Código en el MSP430G2553

/* Definciones */
#define COUNTER_CLK BIT0
#define COUNTER_LOAD BIT1
#define COUNTER_DATAIN BIT2
#define COUNTER_CLK_INH BIT6
#define COUNTER_DELAY __delay_cycles(10);	// Retardo con el reloj a 16 Mhz

#define COUNTER_CLK_HIGH P1OUT |= COUNTER_CLK;
#define COUNTER_CLK_LOW P1OUT &= ~COUNTER_CLK;
#define COUNTER_LOAD_LOW P1OUT &= ~COUNTER_LOAD;
#define COUNTER_LOAD_HIGH P1OUT |= COUNTER_LOAD;


/* Inicialición de los pines */
void initCounter () {
	// COUNTER_CLK Y COUNTER_LOAD como salidas
	P1DIR |= COUNTER_CLK | COUNTER_LOAD;
	//COUNTER_DATAIN como entrada
	P1DIR &= ~COUNTER_DATAIN;

	//ESTADO INICIAL
	COUNTER_LOAD_HIGH;
	COUNTER_CLK_HIGH;
}

/* La función que lee los datos de tres 74HC165 */
void readCounter(){
	int i;
	unsigned char c;

	// Variables donde guardar el resultado
	counterValues[0] = 0; counterValues[1] = 0; counterValues[2] = 0;

	// Envia el pulso para cargar el estado de las entradas
	// e nel registro del 74HC165
	COUNTER_LOAD_LOW;
	COUNTER_DELAY
	
	COUNTER_LOAD_HIGH
	COUNTER_DELAY

	for (c=0; c < 3; c++) {
		// El 74HC165 envia los datos MSB
		for (i=7; i >=0 ; i--) {
			counterValues[c] += ((P1IN & COUNTER_DATAIN) == COUNTER_DATAIN) << i;

			COUNTER_CLK_LOW
			COUNTER_DELAY

			COUNTER_CLK_HIGH
			COUNTER_DELAY
		}
	}
}

 

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Time limit is exhausted. Please reload CAPTCHA.