Ada kemungkinan dalam desain tertanam di mana Anda tidak memiliki cukup pin I / O yang tersedia di mikrokontroler Anda. Itu bisa terjadi karena alasan apa pun, mungkin aplikasi Anda memerlukan banyak LED atau Anda ingin menggunakan beberapa tampilan 7-segmen, tetapi Anda tidak memerlukan pin I / O di mikrokontroler Anda. Inilah komponen yang sempurna, register geser. Register geser menerima data serial dan memberikan keluaran paralel. Ini hanya membutuhkan 3 pin untuk terhubung dengan mikrokontroler Anda dan Anda akan mendapatkan lebih dari 8 pin Output darinya. Salah satu register geser yang populer adalah 74HC595. Ini memiliki 8 bit penyimpanan mendaftar dan 8 bit register geser. Pelajari lebih lanjut tentang register geser di sini.
Anda akan memberikan data serial ke register geser dan akan di- latch pada register penyimpanan dan kemudian register penyimpanan akan mengontrol 8 keluaran. Jika Anda ingin lebih banyak output, tambahkan register geser lain. Dengan mengalirkan dua register geser, Anda akan mendapatkan 8 output tambahan, total output 16bit.
Register Geser 74HC595:
Berikut adalah diagram pin dari 74HC595 sesuai lembar data-
HC595 memiliki 16 pin; jika kita melihat datasheet kita akan mengerti fungsi pin-
The QA untuk QH, dari nomor pin 1 sampai 7 dan 15 digunakan sebagai 8 bit output dari register geser, di mana sebagai pin 14 digunakan untuk menerima data serial. Ada juga tabel kebenaran tentang cara menggunakan pin lain dan memanfaatkan fungsi lain dari register geser.
Saat kami menulis kode untuk antarmuka 74HC595, kami akan menerapkan tabel kebenaran ini untuk mendapatkan output yang diinginkan.
Sekarang, kita akan menghubungkan 74HC595 dengan PIC16F877A dan mengontrol 8 LED. Kami telah menghubungkan register geser 74HC595 dengan mikrokontroler lain:
- Interfacing 74HC595 Serial Shift Register dengan Raspberry Pi
- Bagaimana Cara Menggunakan Shift Register 74HC595 dengan Arduino Uno?
- Menghubungkan LCD dengan NodeMCU menggunakan shift Register
Komponen yang Dibutuhkan:
- PIC16F877A
- 2 pcs 33pF kapasitor cakram keramik
- Kristal 20Mhz
- Resistor 4.7k
- 8 buah LED
- 1k resistor -1 pc (8 pcs diperlukan resistor 1k jika resistor terpisah pada setiap led diperlukan)
- 74HC595 ic
- Adaptor dinding 5V
- Lingkungan pemrograman PIC
- Papan tempat memotong roti dan kabel
Diagram Sirkuit:
Dalam diagram sirkuit, kami telah menghubungkan pin data serial; jam dan pin strobo (kait) pada pin RB0, RB1 dan RB2 mikrokontroler. Di sini kami telah menggunakan satu resistor untuk 8 LED. Sesuai tabel kebenaran, kami mengaktifkan output dengan menghubungkan pin 13 dari 74HC595 ke ground. The QH pin dibiarkan terbuka karena kita tidak akan kaskade lain 74HC595 dengan itu. Kami menonaktifkan flag input yang jelas dengan menghubungkan pin 10 dari register geser dengan VCC.
Osilator kristal terhubung ke pin OSC mikrokontroler. PIC16F877A tidak memiliki osilator internal. Dalam project ini kita akan menyalakan led satu per satu dari Q0 ke Q7 menggunakan shift regitster.
Kami telah membangun sirkuit di papan tempat memotong roti-
Penjelasan Kode:
Kode lengkap untuk mengendalikan LED dengan register geser diberikan di akhir artikel. Seperti biasa, kita perlu mengatur bit konfigurasi di mikrokontroler PIC.
#pragma config FOSC = HS // Bit Pilihan Osilator (osilator HS) #pragma config WDTE = OFF // Pengatur Waktu Pengawas Bit pengaktifan (WDT dinonaktifkan) #pragma config PWRTE = OFF // Pengatur Waktu Penyalaan Bit pengaktifan (PWRT dinonaktifkan) # pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled) #pragma config LVP = OFF // Tegangan Rendah (Pasokan Tunggal) In-Circuit Serial Programming Enable bit (pin RB3 / PGM memiliki fungsi PGM; rendah -pemrograman tegangan diaktifkan) #pragma config CPD = OFF // Data EEPROM Kode Perlindungan Kode Memori bit (Perlindungan kode EEPROM Data off) #pragma config WRT = OFF // Flash Program Memory Write Aktifkan bit (Perlindungan tulis mati; semua memori program mungkin ditulis oleh kontrol EECON) #pragma config CP = OFF // Bit Perlindungan Kode Memori Program Flash (Perlindungan kode tidak aktif)
Setelah itu kami menyatakan frekuensi kristal yang diperlukan untuk penundaan dan deklarasi pin-out untuk 74HC595.
#include
Selanjutnya kita mendeklarasikan fungsi system_init () untuk menginisialisasi arah pin.
batal system_init (batal) { TRISB = 0x00; }
Kami membuat pulsa jam dan pulsa kait menggunakan dua fungsi berbeda
/ * * Fungsi ini akan mengaktifkan Jam. * / batal jam (batal) { CLK_595 = 1; __delay_us (500); CLK_595 = 0; __delay_us (500); }
dan
/ * * Fungsi ini akan menyala dan mengaktifkan pemicu keluaran. * / batal strobo (batal) { STROBE_595 = 1; __delay_us (500); STROBE_595 = 0; }
Setelah dua fungsi ini kita mendeklarasikan fungsi data_submit (unsigned int data) untuk mengirimkan data serial ke 74HC595.
void data_submit (unsigned int data) { untuk (int i = 0; i <8; i ++) { DATA_595 = (data >> i) & 0x01; jam(); } strobo (); // Data akhirnya terkirim }
Dalam fungsi ini kami menerima data 8bit dan mengirim setiap bit menggunakan dua operator bitwise, shift kiri dan operator AND. Pertama-tama kita geser data satu per satu dan cari tahu bit pastinya apakah itu 0 atau 1 menggunakan operator AND dengan 0x01. Setiap data disimpan oleh pulsa jam dan keluaran data akhir dilakukan menggunakan kait atau pulsa strobo. Dalam proses ini output data akan menjadi MSB (Most Significant Bit) terlebih dahulu.
Dalam fungsi utama kami mengirimkan biner dan membuat pin keluaran tinggi satu per satu.
system_init (); // Sistem bersiap-siap saat (1) { data_submit (0b00000000); __delay_ms (200); data_submit (0b10000000); __delay_ms (200); data_submit (0b01000000); __delay_ms (200); data_submit (0b00100000); __delay_ms (200); data_submit (0b00010000); __delay_ms (200); data_submit (0b00001000); __delay_ms (200); data_submit (0b00000100); __delay_ms (200); data_submit (0b00000010); __delay_ms (200); data_submit (0b00000001); __delay_ms (200); data_submit (0xFF); __delay_ms (200); } kembali; }
Begitulah cara register geser dapat digunakan untuk mendapatkan lebih banyak pin I / O gratis di mikrokontroler apa pun untuk menghubungkan lebih banyak sensor.