Nama : Amanda Febilala
Nim : 2055201038
Matkul : Microcontroller 1. Bentuk dr shift register 74hc596
Cara kerja sebagai berikut :
Pada awalnya, shift register 74HC595 dalam kondisi kosong, artinya tidak ada data yang tersimpan di dalamnya.
Data dimasukkan ke dalam shift register melalui input serial (sering disebut juga sebagai input data). Data dimasukkan secara serial bit demi bit, dimulai dari bit paling signifikan (MSB) ke bit paling tidak signifikan (LSB).
Setiap kali sinyal clock serial (SRCLK) berubah dari rendah ke tinggi, data di dalam shift register akan digeser satu bit ke kanan, dan bit terakhir (LSB) akan diisi dengan bit baru yang masuk melalui input serial.
Setelah data selesai dimasukkan ke dalam shift register, untuk memindahkan data dari register shift ke register output paralel, sinyal clock register (RCLK) harus diberikan. Ketika sinyal RCLK berubah dari rendah ke tinggi, data yang ada di dalam register shift akan dipindahkan ke register output paralel.
Data yang ada di register output paralel dapat diambil secara paralel dari output Q0-Q7.
Jika perlu menghapus semua data yang ada di dalam shift register, input clear (SRCLR) dapat diberikan dengan sinyal rendah.
2. Penjelasan gambarnya / jelaskan pin dan setiap fungsinya.
Penjelasan pin IC 74HC595:
VCC : Suplai tegangan + dengan tegangan 5V/3.3V.
GND : Suplai tegangan GND.
Q0-Q7 : Pin output dari IC 74HC595, berjumlah 8 dan dimulai dari Q0.
SRCLR/MR : untuk mengosongkan deretan output menjadi 0 (bersifat Active Low sehingga deretan output menjadi 0 jika diberikan tegangan GND/0.
OE : (Output Enable) berfungsi untuk mematikan menghidupkan / mengaktifkan pin output (bersifat Active Low maka jika diberikan tegangan GND pin output tetap hidup).
DATA/DS/SER : adalah pin data masukan untuk menentukan bit pin output.
SRCLK/SHCP : berfungsi untuk memasukkan bit berdasarkan bit pin data.
RCLK/STCP : berfungsi untuk mengeluarkan deretan kondisi tersebut pada pin output.
3. Contoh rangkaian dalam penerangan shift register. Berserta contoh coding program nya.
Rancangan :
Kode Program :
/*--- IoT Smart Device Development Board by Dodit Suprianto | DSP-TECH Projek: Pergerakkan LED Library:
https://github.com/Simsso/ShiftRegister74HC595 ---*/
/*---
Menambahkan library yang diperlukan ---*/
#include <ShiftRegister74HC595.h> // library shift register 74HC595 /*---
Alamat Kanal Shift Register:
--- Kanal 0 = LED 1
Kanal 1 = LED 2 Kanal 2 = LED 3 Kanal 3 = LED 4 Kanal 4 = LED 5 Kanal 5 = LED 6 Kanal 6 = LED 7 Kanal 7 = LED 8 Kanal 8 = LED 9
Kanal 9 = Buzz Piezo Speaker Kanal 10 = Relay
Kanal 11 - 15 = Kanal expansi ---*/
/*--- Pin Microcontroller NodeMCU ---*/
#define pinData 16 // pin D0
#define pinClock 2 // pin D4
#define pinLatch 0 // pin D3 /*--- Inisialisasi instance/object &
Deklarasi varibale global ---*/
// Konstruktor instance Shift register
ShiftRegister74HC595<2> srChannel(pinData, pinClock, pinLatch);
/*---
Mode Running LED dengan type enum ---*/
typedef enum { AnimKiriKanan,
AnimKiriKananSendirian, AnimTengahSamping, AnimSampingTengah } animLED;
void setup() {
/*--- Mengatur baudrate serial MCU.
Baurate disesuaikan dengan baudrate serial monitor) ---*/
Serial.begin(115200);
/*---
Set seluruh kanal shift register menjadi OFF ---*/
srChannel.setAllLow();
}
void loop() {
Serial.println("Animasi LED dari kiri ke kanan");
runningLED(AnimKiriKanan, 100);
delay(1000);
Serial.println("Animasi LED dari kiri ke kanan satu per satu");
runningLED(AnimKiriKananSendirian, 100);
delay(1000);
Serial.println("Animasi LED dari tengah ke samping");
runningLED(AnimTengahSamping, 100);
delay(1000);
Serial.println("Animasi LED dari samping ke tengah");
runningLED(AnimSampingTengah, 100);
delay(1000);
}
/*--- Function Running LED ---*/
void runningLED(animLED al, int tunda) { MematikanSemuaLED();
switch (al) {
//LED hidup dari kiri ke kanan case AnimKiriKanan:
for (uint8_t i = 0; i <= 8; i++) {
srChannel.set(i, HIGH); // LED ke-i hidup delay(tunda); // tuda 100 ms }
break;
//LED hidup dari kanan ke kiri case AnimKiriKananSendirian:
for (uint8_t i = 0; i <= 8; i++) { if (i > 0) srChannel.set(i - 1, LOW);
srChannel.set(i, HIGH);
delay(tunda);
} break;
case AnimTengahSamping:
srChannel.set(4, HIGH);
delay(tunda);
srChannel.set(3, HIGH);
srChannel.set(5, HIGH);
delay(tunda);
srChannel.set(2, HIGH);
srChannel.set(6, HIGH);
delay(tunda);
srChannel.set(1, HIGH);
srChannel.set(7, HIGH);
delay(tunda);
srChannel.set(0, HIGH);
srChannel.set(8, HIGH);
delay(tunda);
break;
//LED hidup dari samping ke tengah case AnimSampingTengah:
srChannel.set(0, HIGH);
srChannel.set(8, HIGH);
delay(tunda);
srChannel.set(1, HIGH);
srChannel.set(7, HIGH);
delay(tunda);
srChannel.set(2, HIGH);
srChannel.set(6, HIGH);
delay(tunda);
srChannel.set(3, HIGH);
srChannel.set(5, HIGH);
delay(tunda);
srChannel.set(4, HIGH);
delay(tunda);
break;
}
MematikanSemuaLED();
}
/*--- Mematikan semua LED ---*/
void MematikanSemuaLED() {
//Set seluruh kanal LED 0 - LED 8 menjadi OFF for (uint8_t i = 0; i <= 8; i++) {
srChannel.set(i, LOW);
} }