fungsi shift register 74hc595 pada projek mikrokontroler
Fungsi Shift Register 74HC595 pada Projek Mikrokontroler
Pernah nggak sih kamu ngalamin masalah kehabisan pin GPIO di Arduino atau ESP32 waktu lagi bikin project? Nah, ini masalah yang sering banget dihadapi maker, terutama kalau proyeknya butuh banyak output kayak LED matrix, 7-segment display, atau kontrol relay. Solusinya? Pake shift register 74HC595.
74HC595 ini chip kecil yang bisa ngubah data serial jadi output paralel. Jadi dengan cuma pake 3 pin aja dari mikrokontroler kamu, kamu bisa ngontrol 8 output sekaligus. Lebih gila lagi, kamu bisa daisy-chain beberapa chip 74HC595 buat dapetin puluhan bahkan ratusan output, tetep cuma butuh 3 pin mikrokontroler.
Di artikel ini kita bakal bahas tuntas gimana cara kerja 74HC595, pinout-nya, dan aplikasinya di berbagai project mikrokontroler. Langsung aja riset dulu spesifikasinya.
Spesifikasi 74HC595
| Parameter | Nilai |
|---|---|
| Tipe IC | 8-bit Serial-In Parallel-Out Shift Register |
| Tegangan Operasi (VCC) | 2.0V - 6.0V |
| Jumlah Pin | 16 pin (DIP/SOIC/TSSOP) |
| Jumlah Output | 8 pin paralel (Q0-Q7) |
| Arus Output per Pin | ±6 mA (typical), 20 mA (max) |
| Clock Frequency (5V) | Sampai 55 MHz |
| Konsumsi Daya | 80 µA (max) |
| Teknologi | Silicon-gate C2MOS |
| Output Type | 3-state parallel output |
| Cascading | Ya (via pin QH') |
Apa Itu Shift Register dan Kenapa Pake 74HC595?
Shift register itu komponen yang bisa nyimpen dan mindahin data bit secara serial. Bayangin kayak gini: kamu punya 8 LED yang pengen kamu kontrol. Normalnya kamu butuh 8 pin GPIO dari Arduino buat ngontrol satu-satu. Tapi dengan shift register, kamu bisa kirim data 8 bit secara berurutan lewat 1 pin aja, terus shift register ini bakal ngubah data serial itu jadi output paralel buat 8 LED tersebut.
74HC595 khususnya adalah shift register tipe SIPO (Serial-In Parallel-Out). Artinya dia terima input data satu per satu (serial), tapi keluarin datanya sekaligus (paralel) ke 8 output pin. Yang bikin dia populer adalah karena chip ini murah, gampang dipake, dan bisa dikaskadir (daisy-chain) tanpa batas.
Plus, 74HC595 kompatibel sama logika 3.3V dan 5V, jadi cocok buat Arduino UNO, Mega, ESP32, ESP8266, dan mikrokontroler lainnya. Konsumsi dayanya juga rendah banget, cuma 80 µA maksimal.
Pinout 74HC595
74HC595 punya 16 pin dengan fungsi masing-masing. Buat identifikasi pin 1, cari takik U kecil di atas chip, pin 1 ada di sebelah kiri takik ini. Berikut diagram pinout-nya:
┌───────────────┐
Q1 ─│1 16│─ VCC
Q2 ─│2 15│─ Q0
Q3 ─│3 14│─ DS (Serial Data)
Q4 ─│4 13│─ OE (Output Enable)
Q5 ─│5 12│─ RCLK (Latch Clock)
Q6 ─│6 11│─ SRCLK (Shift Clock)
Q7 ─│7 10│─ SRCLR (Reset)
GND ─│8 9│─ QH' (Serial Out)
└───────────────┘
Penjelasan Tiap Pin:
- Pin 1-7 dan 15 (Q0-Q7): Output paralel yang bisa kamu pake buat ngontrol LED, relay, transistor, atau apapun. Tiap pin bisa ngasih arus sampai 6 mA dengan aman (maksimal 20 mA tapi nggak disarankan kontinyu).
- Pin 8 (GND): Ground, konek ke ground dari power supply dan mikrokontroler.
- Pin 9 (QH' atau Q7'): Serial output buat daisy-chaining. Pin ini ngeluarin bit terakhir dari shift register, jadi bisa disambung ke pin DS (pin 14) dari 74HC595 kedua kalau kamu mau nambah lebih banyak output.
- Pin 10 (SRCLR atau MR): Master Reset, active LOW. Kalau pin ini dikasih logika 0, semua bit di shift register bakal di-reset jadi 0. Biasanya pin ini langsung konek ke VCC (5V) supaya nggak ke-reset terus.
- Pin 11 (SRCLK atau SHCP): Shift Register Clock. Setiap ada rising edge (LOW ke HIGH) di pin ini, data dari pin DS bakal masuk ke shift register dan semua bit di dalamnya geser satu posisi.
- Pin 12 (RCLK atau STCP): Storage Register Clock atau Latch pin. Setelah 8 bit data masuk ke shift register, kamu harus ngasih pulse (LOW-HIGH-LOW) di pin ini buat mindahin data dari shift register ke output register. Ini yang bikin output Q0-Q7 update sesuai data yang udah masuk.
- Pin 13 (OE): Output Enable, active LOW. Pin ini ngontrol apakah output Q0-Q7 aktif atau nggak. Kalau dikasih logika 0, output aktif. Kalau dikasih logika 1, semua output masuk mode high-impedance (kayak disconnect). Biasanya pin ini konek ke GND supaya output selalu aktif.
- Pin 14 (DS atau SER): Serial Data Input. Pin ini nerima data bit satu per satu dari mikrokontroler. Data masuk mulai dari LSB (Least Significant Bit) dulu.
- Pin 16 (VCC): Power supply, bisa 2V sampai 6V. Buat Arduino atau ESP32 biasanya pake 5V atau 3.3V.
Cara Kerja 74HC595
74HC595 punya dua register di dalamnya: shift register dan storage register. Keduanya punya lebar 8-bit. Cara kerjanya gini:
Step 1: Masukin Data Serial
Data masuk satu bit per satu bit lewat pin DS (pin 14). Setiap kali ada rising edge di pin SRCLK (pin 11), satu bit data masuk ke shift register dan semua bit di dalamnya geser satu posisi. Jadi butuh 8 clock pulse buat masukin 8 bit data lengkap.
Step 2: Transfer ke Storage Register
Setelah 8 bit masuk, data di shift register belum langsung keluar ke pin output Q0-Q7. Kamu harus ngasih pulse di pin RCLK (pin 12) buat mindahin data dari shift register ke storage register. Nah, storage register inilah yang langsung terhubung ke output Q0-Q7.
Step 3: Output Paralel
Begitu data ada di storage register, pin Q0-Q7 langsung ngeluarin sinyal HIGH atau LOW sesuai bit yang udah masuk. Jadi dari 8 bit yang kamu kirim serial, sekarang kamu punya 8 output paralel yang bisa ngontrol LED, relay, atau apapun.
Kenapa ada dua register? Karena kalau cuma ada satu register, output bakal berubah-ubah setiap kali data masuk. Dengan dua register, kamu bisa masukin data baru ke shift register sementara output tetep stabil di storage register. Begitu data baru siap, baru kamu update output dengan pulse di RCLK.
Koneksi 74HC595 ke Arduino
Buat koneksi 74HC595 ke Arduino, kamu cuma butuh 3 pin digital Arduino. Berikut koneksi standarnya:
| Pin 74HC595 | Pin Arduino | Fungsi |
|---|---|---|
| Pin 16 (VCC) | 5V | Power supply |
| Pin 8 (GND) | GND | Ground |
| Pin 10 (SRCLR) | 5V | Disable reset |
| Pin 13 (OE) | GND | Enable output |
| Pin 14 (DS) | D11 (atau pin digital lain) | Serial data input |
| Pin 11 (SRCLK) | D13 (atau pin digital lain) | Shift clock |
| Pin 12 (RCLK) | D10 (atau pin digital lain) | Latch clock |
| Pin 1-7, 15 (Q0-Q7) | LED/Output (via resistor) | Parallel output |
Kalau kamu mau kontrol LED, jangan lupa kasih resistor 220-330 ohm antara pin output Q0-Q7 dan LED. Arus maksimal per pin cuma 6 mA, jadi aman buat LED biasa. Kalau butuh arus lebih gede kayak buat relay atau motor, pake transistor atau MOSFET sebagai driver.
Daisy-Chaining 74HC595
Salah satu fitur paling keren dari 74HC595 adalah kemampuan daisy-chain. Artinya kamu bisa sambung beberapa chip 74HC595 secara seri buat nambah jumlah output, tapi tetep cuma pake 3 pin mikrokontroler.
Cara daisy-chain gampang banget:
- Pin QH' (pin 9) dari 74HC595 pertama disambung ke pin DS (pin 14) dari 74HC595 kedua.
- Pin SRCLK (pin 11) dan RCLK (pin 12) dari semua chip dihubungkan paralel ke Arduino.
- Begitu seterusnya buat chip ketiga, keempat, dan seterusnya.
Misal kamu pake 2 chip 74HC595, kamu punya 16 output. Pake 3 chip? 24 output. Pake 6 chip? 48 output. Semua tetep cuma butuh 3 pin Arduino. Yang berubah cuma kamu harus kirim 16 bit, 24 bit, atau 48 bit data, tapi tetep lewat 3 pin yang sama.
Di Arduino, kamu bisa pake fungsi shiftOut() buat kirim data. Fungsi ini otomatis ngatur clock pulse dan serial data. Contoh kode simpel:
int latchPin = 10; // RCLK
int clockPin = 13; // SRCLK
int dataPin = 11; // DS
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, 0b10101010); // Kirim pola LED
digitalWrite(latchPin, HIGH);
delay(500);
}
Kode di atas bakal nyalain LED di Q0, Q2, Q4, Q6 dengan pola alternating.
Aplikasi 74HC595 di Projek Mikrokontroler
74HC595 ini super fleksibel dan bisa dipake di banyak banget aplikasi. Berikut beberapa contoh project yang umum pake chip ini:
- LED Matrix Display: Buat bikin LED matrix 8x8, 16x8, atau bahkan lebih gede. Satu 74HC595 bisa ngontrol 8 kolom atau 8 baris. Kombinasi dengan multiplexing, kamu bisa bikin display yang bisa nampiliin animasi, teks scrolling, atau grafik. Buat matrix 8x8 butuh 2 chip, buat 48x8 butuh sekitar 7 chip.
- 7-Segment Display: Display 7-segment butuh 8 pin buat ngontrol 7 segmen + 1 decimal point. Dengan 74HC595, kamu cuma butuh 3 pin Arduino. Kalau pake 4-digit 7-segment display, bisa pake 1 chip 74HC595 buat segment dan kontrol digit pake transistor. Cocok buat bikin jam digital, counter, atau thermometer.
- Kontrol Banyak Relay: Misalkan kamu bikin home automation yang butuh kontrol 16 relay buat lampu, kipas, AC, dll. Dengan 2 chip 74HC595, kamu bisa kontrol semua relay tersebut cuma pake 3 pin. Tapi karena 74HC595 cuma ngasih 6 mA per pin, kamu harus pake transistor atau relay driver buat switch relay-nya.
- Addressable RGB LED: Kombinasi beberapa 74HC595 buat ngontrol puluhan LED RGB. Meskipun sekarang ada LED RGB addressable kayak WS2812B yang lebih praktis, tapi 74HC595 tetep jadi pilihan kalau kamu butuh kontrol full PWM custom atau LED RGB yang nggak addressable.
- Multiplexed Button Matrix: Selain buat output, 74HC595 bisa dikombinasi sama shift register input (kayak 74HC165) buat bikin button matrix. Kamu bisa scan puluhan button cuma pake beberapa pin. Cocok buat bikin keyboard custom, game controller, atau control panel.
- Bargraph dan Level Indicator: Bikin indicator level audio, battery level, atau sensor dengan LED bargraph. Pake 74HC595, kamu bisa kontrol 8, 16, atau 24 LED buat bikin VU meter atau indicator suhu dengan LED yang nyala bertingkat.
- Neon atau Nixie Tube Display: Buat display retro pake nixie tube atau neon tube, 74HC595 bisa ngontrol driver transistor high-voltage buat nyalain tube satu per satu. Project kayak nixie clock jadi lebih gampang dengan chip ini.
Tips Setup dan Troubleshooting
Berikut beberapa tips yang bisa ngebantu kamu waktu setup 74HC595:
Setup di Arduino IDE:
- Nggak perlu library khusus, Arduino udah punya fungsi
shiftOut()built-in yang bisa langsung dipake. - Definisikan pin yang dipake buat latchPin, clockPin, dan dataPin di awal kode.
- Set semua pin sebagai OUTPUT pake
pinMode(). - Buat kirim data, set latchPin LOW, panggil
shiftOut(), terus set latchPin HIGH. - Kalau daisy-chain, kirim data dari chip terakhir dulu, baru ke chip pertama (LIFO - Last In First Out).
Troubleshooting Umum:
- Output nggak update: Pastikan kamu udah kasih pulse di pin RCLK (latch pin). Tanpa ini, data nggak bakal pindah ke output register.
- LED nyala semua atau nggak nyala sama sekali: Cek koneksi pin OE. Kalau pin ini floating atau konek ke HIGH, output bakal mati. Pastikan konek ke GND.
- LED nyala tapi pola salah: Cek urutan bit yang kamu kirim. Kadang kita perlu kirim LSBFIRST atau MSBFIRST tergantung desain circuit. Coba ganti parameter di
shiftOut(). - Output nge-reset sendiri: Pastikan pin SRCLR konek ke VCC, bukan floating. Kalau pin ini LOW atau floating, shift register bisa ke-reset random.
- LED redup atau nggak nyala: Arus per pin 74HC595 cuma 6 mA. Kalau LED butuh arus lebih gede atau kamu konek beberapa LED paralel, pake transistor atau MOSFET driver.
- Flickering di LED matrix: Ini normal kalau pake multiplexing. Coba tingkatin refresh rate atau kurangi delay di loop code. Kalau masih flicker, mungkin supply current kurang atau koneksi ground jelek.
Perbandingan 74HC595 vs Alternatif Lain
Ada beberapa alternatif lain selain 74HC595 buat ekspansi GPIO. Kapan harus pake 74HC595 dan kapan harus pake yang lain?
| Chip | Kelebihan | Kapan Pake |
|---|---|---|
| 74HC595 | Murah, gampang, bisa daisy-chain, output paralel | Kalau butuh banyak output dan nggak butuh kontrol individual real-time. Cocok buat LED, relay, 7-segment. |
| 74HC165 | Parallel-in serial-out, buat input ekspansi | Kalau butuh banyak input kayak button matrix atau sensor digital. |
| MCP23017 | I2C, 16 GPIO, bisa input dan output, interrupt | Kalau butuh GPIO yang bisa dinamis jadi input atau output, dan pengen protocol I2C. |
| PCF8574 | I2C, 8 GPIO, bisa input dan output | Kalau butuh GPIO fleksibel dengan jumlah lebih sedikit dan tetep pake I2C. |
| MAX7219 | Driver khusus buat LED matrix dan 7-segment, ada multiplexing built-in | Spesifik buat LED matrix atau 7-segment display, nggak perlu coding multiplexing manual. |
| TLC5940 | 16 channel PWM output, cocok buat LED RGB dengan brightness control | Kalau butuh kontrol PWM per channel buat LED RGB atau dimming. |
Kesimpulannya: pake 74HC595 kalau kamu butuh output aja, nggak butuh PWM individual, dan pengen solusi paling murah dan gampang. Kalau butuh input juga, pake MCP23017 atau PCF8574 via I2C.
Perbedaan 74HC595 vs 74HCT595 vs 74LS595
Selain 74HC595, ada juga varian lain kayak 74HCT595 dan 74LS595. Apa bedanya?
- 74HC595: Logika CMOS, supply voltage 2V-6V, cocok buat mikrokontroler modern 3.3V atau 5V. Switching speed sedang, konsumsi daya rendah.
- 74HCT595: Logika CMOS tapi kompatibel sama TTL. Supply voltage lebih sempit 4.5V-5.5V. Switching speed lebih cepat dari HC, tapi konsumsi daya sedikit lebih tinggi. Pake ini kalau kamu interface dengan logic TTL lama.
- 74LS595: Logika TTL murni, supply voltage 5V aja. Arus output sekitar 2.6 mA (sourcing) dan 24 mA (sinking). Konsumsi daya lebih tinggi dari HC atau HCT. Udah jarang dipake karena udah obsolete.
Buat project Arduino atau ESP32, pake 74HC595 aja karena paling fleksibel, murah, dan gampang dicari.
Limitasi 74HC595
Meskipun 74HC595 keren dan fleksibel, ada beberapa limitasi yang perlu kamu tau:
- Arus Output Rendah: Per pin cuma 6 mA typical, maksimal 20 mA tapi nggak disarankan kontinyu. Kalau butuh arus gede buat relay, motor, atau LED high-power, wajib pake driver eksternal kayak transistor atau MOSFET.
- Output Aja, Bukan I/O: 74HC595 cuma buat output, nggak bisa dipake buat input. Kalau butuh input, pake shift register PISO kayak 74HC165 atau chip GPIO ekspansi kayak MCP23017.
- Nggak Ada PWM Built-in: Kalau kamu butuh PWM buat kontrol brightness LED atau kecepatan motor, kamu harus coding software PWM sendiri atau pake chip lain kayak TLC5940 yang punya PWM built-in.
- Speed Limit buat Aplikasi Real-time: Meskipun clock frequency bisa sampai 55 MHz, buat aplikasi yang butuh update super cepet kayak LED POV (Persistence of Vision) atau high-speed communication, 74HC595 bisa jadi bottleneck. Pertimbangin pake DMA atau chip khusus.
- Update Nggak Simultan: Waktu data di-shift, output bisa berubah sementara sebelum latch. Kalau aplikasi kamu butuh update benar-benar simultan di semua output, kamu harus extra careful dengan timing latch.
Kesimpulan
74HC595 adalah solusi yang sangat praktis dan ekonomis buat nambah jumlah output di mikrokontroler. Dengan cuma pake 3 pin GPIO, kamu bisa ngontrol 8, 16, 24, atau bahkan ratusan output tergantung berapa banyak chip yang kamu daisy-chain. Chip ini cocok banget buat project LED matrix, 7-segment display, kontrol relay, atau aplikasi lain yang butuh banyak output digital.
Kelebihannya jelas: murah, gampang dipake, support 3.3V dan 5V, konsumsi daya rendah, dan bisa dikaskadir tanpa batas. Limitasinya juga ada, terutama arus output yang rendah per pin, tapi itu bisa diatasi dengan transistor atau MOSFET driver. Buat maker pemula, 74HC595 adalah komponen wajib punya di toolbox elektronik.
Kalau kamu lagi planning project yang butuh banyak LED, display, atau relay tapi kehabisan pin di Arduino atau ESP32, jangan ragu pake 74HC595. Setup-nya nggak ribet, dokumentasi dan tutorial di internet banyak banget, dan harganya murah meriah. Plus, dengan teknik daisy-chain, skalabilitas project kamu jadi nggak terbatas.
Selamat bereksperimen dengan 74HC595 dan semoga project mikrokontroler kamu sukses!
