Wednesday, May 13, 2020

Reading The Digital Inputs From 74HC165 Parallel-Load Shift Register With PIC16F84A

When the digital inputs of an MCU is used up, we can expand the digital inputs using various digital communication ICs such as I2C, SPI etc.

With a simple digital IC 74HC165 8-bit parallel-load shift register, reading  digital input is such an easy way.

This IC commonly found in any photocopier machine.

Reading The Digital Inputs From 74HC165 Parallel-Load Shift Register With PIC16F84A
A common SN74HC165 DIP Package.
It come with 16 pins DIP, ease of breadboard prototyping.


The SH/~LD load the 8 parallel inputs from Low to High transition.

The 8-bit parallel input labels from A to H. The internal circuitry start loading these parallel inputs at 4th clock (CLK) pulse, and shift out via QH pin.

A working waveform of 74HC165 simulated in Proteus VSM.

In this example, I use PIC16F84A to read the digital input from SN74HC165. PortB of PIC16F84A uses to output the reading the data.

PIC16F84A clocks at 4 MHz, reads the digital inputs from 74HC165.

PORTB displays the digital output to Bar graph LEDs.

The 74HC165 reads the digital inputs from DIP switches, and commanded to

shift out the data from PIC16F84A.

 The communication initiated by only three lines from PIC16F84A:


  • CLK : clock line feds to SN74HC165
  • ~EN : the Enable line feds to SH/~LD pin of SN74HC165

  • DI : the QH (SO) serial data output line from SN74HC165

The program is driven by the 74165.c driver of CCS PICC compiler. We can use more than one 74HC165 IC as we need.

C source code could be downloaded here:

/*
Digital Input expanding Using 74HC165 SPI
*/
#include<16F84A.h>
#fuses XT
#use delay(clock=4M)
//Pre-Define Parameters For 74165.c
#define EXP_IN_ENABLE   PIN_A1
#define EXP_IN_CLOCK    PIN_A0
#define EXP_IN_DI       PIN_A2
#define NUMBER_OF_74165 1
#include<74165.c>
void main(void){
   char readInput;
   output_b(0x00);
   set_tris_b(0x00);
   while(1){
      read_expanded_inputs(&readInput);
      output_b(readInput);
      delay_ms(100);
   }
}

If you want a standard PCB for ATMega32 micro-controller, you can order my AVR Microcontroller project from PCBWay with a reasonable price. Click here to get a free $5 credit for new account.

Interfacing ATMega32 to 74HC595 shift register
ATMega16 ATMega32 Experiment Board PCB from PCBWay

 

No comments:

Post a Comment

Search This Blog

Labels

25AA010A (1) 8051 (7) 93AA46B (1) ADC (30) Analog Comparator (1) Arduino (15) ARM (6) AT89C52 (7) ATMega32 (54) AVR (57) CCS PICC (28) DAC (1) DHT11 (2) Display (105) Distance Sensor (3) DS18B20 (3) dsPIC (2) dsPIC30F1010 (2) EEPROM (5) Environment Sensor (4) esp8266 (1) I2C (29) Input/Output (67) Interrupt (19) Keil (5) Keypad (10) LCD (47) Master/Slave (1) MAX7221 (1) MCP23017 (5) MCP23S17 (4) Meter (3) MikroC (2) Motor (15) MPLABX (66) Nokia 5110 LCD (3) OLED (2) One-Wire (6) Oscillator (8) PCB (6) PCD8544 (3) PCF8574 (5) PIC (107) PIC12F (2) PIC16F628A (2) PIC16F630 (1) PIC16F716 (3) PIC16F818 (10) PIC16F818/819 (2) PIC16F84A (15) PIC16F876A (1) PIC16F877A (9) PIC16F88 (1) PIC16F887 (60) PIC18 (19) PIC18F1220 (4) PIC18F2550 (3) PIC18F4550 (12) PWM (11) RTC (8) Sensor (10) SH1106 (1) Shift Register (11) Shift Registers (3) SPI (24) STM32 (6) STM32 Blue Pill (6) STM32CubeIDE (6) STM32F103C8T6 (6) SysTick (3) temperature sensor (11) Thermometer (21) Timer/Counter (30) TM1637 (2) UART (7) Ultrasonic (4) Voltmeter (7) WDT (1) XC16 (2) XC8 (94)