Tuesday, September 8, 2020

ATMega32 SPI interfaces to 74HC165 and 74HC595 shift registers

Reading a digital data from 74HC165, and sending the data to 74HC595 shift registers doesn't always require the SPI module of the MCU. Using a software bit-banging could make this job done by a dozen lines of code.

However, using the bit-banging method could make some timing delay in the program. This's because of a sub-routine that perform an SPI-like communication protocol. The program need to wait a little time until the operation is completed.

Using the SPI module of the MCU yield a high speed, reliable communication interface to external SPI peripherals. It's code effective since the program doesn't need to spend time bit-banging. In a high speed communication to the SPI device - like a high speed ADC, it gives more advantage.

In the previous post, I didn't use the SPI module of the MCU to interface to these devices. It was done by software bit-banging.

In this example, I use the SPI master of ATMega32 to read the digital data from these two device. Conventionally, adding one more SPI peripheral on bus requires one more slave select pin.

ATMega32 SPI interfaces to 74HC165 and 74HC595 shift regsiters
A Simulation Screen Shot

To send the data to 74HC595, we just put the data to the SPDR register. Similarly, reading the data from the 74HC165 shift registers, it's required to send 8 SPI clock pulse to the device. Each data bit of 74HC165 is shift out every rising edge of the pulse.

AVR C Source Code

Schematic Diagram

ATMega32 SPI interfaces to 74HC165 and 74HC595 shift regsiters
Schematic Diagram

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.


 

Click here to download the zip file of this example. There is another serial to parallel shift registers IC, the SN74HC164. It's simpler than this chip. It requires only two serial pins - data and clock pin.

  1. ATMega32 SN74HC164 Three-Digit Multiplexing Display
  2. ATMega32 SN74HC164 Seven Segments Display And Switch Interfacing  
  3. ATMega32 And SN74HC164 Serial Seven Segment Display 
  4. ATMega32 Interfaces To SN74HC164 Shift Registers 
  5. ATMega32 SPI Interfaces To SN74HC164 And LED 

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 (56) 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 (71) 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 (31) TM1637 (2) UART (7) Ultrasonic (4) Voltmeter (7) WDT (1) XC16 (2) XC8 (94)