- Komponen yang Dibutuhkan:
- Diagram Sirkuit:
- Menggunakan TIMER 8051 untuk Mengukur Frekuensi:
- 555 Timer sebagai Sumber Frekuensi:
- Penjelasan Kerja dan Kode:
Frekuensi didefinisikan sebagai jumlah siklus per detik. Ini juga dapat didefinisikan sebagai kebalikan dari total waktu 'T'. Dalam proyek ini kita akan menghitung jumlah pulsa yang masuk ke Port 3.5 dari mikrokontroler 8.051 dan menampilkannya pada layar LCD 16 * 2. Jadi pada dasarnya kami telah mengukur frekuensi sinyal pada Port 3.5 dari 8051. Di sini kami telah menggunakan chip AT89S52 8051, dan IC 555 digunakan dalam mode Astable untuk menghasilkan pulsa sampel untuk demonstrasi. Kami sebelumnya telah membangun penghitung frekuensi menggunakan Arduino.
Komponen yang Dibutuhkan:
- Mikrokontroler 8051 (AT89S52)
- Layar LCD 16 * 2
- Sumber Frekuensi (555 Timer)
- Potensiometer
- Menghubungkan kabel
Diagram Sirkuit:
Menggunakan TIMER 8051 untuk Mengukur Frekuensi:
Mikrokontroler 8051 adalah mikrokontroler 8 bit yang memiliki RAM on chip 128 byte, ROM on chip 4K byte, dua timer, satu port serial dan empat port 8bit. Mikrokontroler 8052 merupakan perpanjangan dari mikrokontroler. Untuk mengkonfigurasi port 3.5 sebagai penghitung, nilai register TMOD diatur ke 0x51. Gambar di bawah ini menunjukkan register TMOD.
GERBANG | C / T | M1 | M0 | GERBANG | C / T | M1 | M2 |
TIMER 1 | TIMER 0 |
GERBANG - ketika GATE diatur, pengatur waktu atau penghitung diaktifkan hanya ketika pin INTx adalah HIGH dan pin kontrol TRx diatur. Ketika GATE dihapus, pengatur waktu diaktifkan setiap kali bit kontrol TRx SET.
C / T - ketika C / T = 0, itu bertindak sebagai Timer. Ketika C / T = 1, itu bertindak sebagai Counter.
M1 dan M0 menunjukkan mode operasi.
Untuk TMOD = 0x51, timer1 bertindak sebagai counter dan beroperasi dalam mode1 (16bit).
16 * 2 LCD digunakan untuk menampilkan Frekuensi sinyal dalam Hertz (Hz). Jika Anda baru mengenal LCD 16x2, periksa lebih lanjut tentang pin LCD 16x2 dan perintahnya di sini. Juga periksa bagaimana menghubungkan LCD dengan 8.051.
555 Timer sebagai Sumber Frekuensi:
Sumber frekuensi harus menghasilkan gelombang persegi dan amplitudo maksimum dibatasi pada 5V, karena port 8051 mikrokontroler tidak dapat menangani tegangan lebih besar dari 5V. The frekuensi maksimum dapat mengukur adalah 655,35 KHz karena keterbatasan memori TH1 dan TL1 register (8bit masing-masing). Dalam 100 milidetik, TH1 dan TL1 dapat menampung hingga 65535 hitungan. Karenanya frekuensi maksimum yang dapat diukur adalah 65535 * 10 = 655,35 KHz.
Dalam proyek Pengukur Frekuensi 8051 ini, saya menggunakan timer 555 dalam mode astabil untuk menghasilkan gelombang persegi frekuensi variabel. Frekuensi sinyal yang dibangkitkan oleh IC 555, dapat diubah-ubah dengan mengatur potensiometer seperti yang ditunjukkan dalam Video yang diberikan di akhir Proyek ini.
Dalam proyek ini, Timer1 (T1) menghitung jumlah pulsa yang masuk ke port 3.5 dari 8051 mikrokontroler selama 100 milidetik. Nilai hitungan akan disimpan di register TH1 dan TL1 masing-masing. Untuk menggabungkan nilai register TH1 dan TL1, digunakan rumus di bawah ini.
Pulsa = TH1 * (0x100) + TL1
Sekarang 'pulsa' akan memiliki jumlah siklus dalam 100 milidetik. Tetapi frekuensi sinyal didefinisikan sebagai jumlah siklus per detik. Untuk mengubahnya menjadi frekuensi, digunakan rumus di bawah ini.
Pulsa = Pulsa * 10
Penjelasan Kerja dan Kode:
Program C lengkap untuk Pengukur Frekuensi ini diberikan di akhir proyek ini. Kode tersebut dibagi menjadi beberapa bagian kecil yang berarti dan dijelaskan di bawah ini.
Untuk interface LCD 16 * 2 dengan mikrokontroler 8051, kita harus menentukan pin yang dihubungkan dengan mikrokontroler 8051 LCD 16 * 2. Pin RS dari LCD 16 * 2 terhubung ke P2.7, pin RW 16 * 2 lcd terhubung ke P2.6 dan pin E 16 * 2 lcd terhubung ke P2.5. Pin data dihubungkan ke port 0 mikrokontroler 8.051.
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit en = P2 ^ 5;
Selanjutnya kita harus mendefinisikan beberapa fungsi yang digunakan dalam program. Fungsi penundaan digunakan untuk membuat penundaan waktu tertentu. Fungsi cmdwrt digunakan untuk mengirim perintah ke layar lcd 16 * 2. fungsi datawrt digunakan untuk mengirim data ke layar lcd 16 * 2.
batal penundaan (unsigned int); void cmdwrt (unsigned char); void datawrt (unsigned char);
Di bagian kode ini, kami mengirimkan perintah ke 16 * 2 lcd. Perintah seperti tampilan yang jelas, kursor kenaikan, memaksa kursor ke awal 1 st baris dikirim ke layar satu 16 * 2 lcd oleh salah satu setelah beberapa ditentukan waktu tunda.
untuk (i = 0; i <5; i ++) {cmdwrt (cmd); penundaan (1); }
Di bagian kode ini, timer1 dikonfigurasi sebagai penghitung dan mode operasi diatur ke mode 1.
Timer0 dikonfigurasi sebagai timer dan mode operasi diatur ke mode 1. Timer 1 digunakan untuk menghitung jumlah pulsa dan timer 0 digunakan untuk menghasilkan waktu tunda. Nilai TH1 dan TL1 diatur ke 0, untuk memastikan bahwa penghitungan dimulai dari 0.
TMOD = 0x51; TL1 = 0; TH1 = 0;
Di bagian kode ini, pengatur waktu dibuat untuk berjalan selama 100 milidetik. Penundaan 100 milidetik dihasilkan menggunakan fungsi penundaan. TR1 = 1 untuk memulai pengatur waktu dan TR1 = 0 untuk menghentikan pengatur waktu setelah 100 milidetik.
TR1 = 1; penundaan (100); TR1 = 0;
Di bagian kode ini, nilai hitungan yang ada di register TH1 dan TL1 digabungkan dan kemudian dikalikan dengan 10 untuk mendapatkan jumlah siklus dalam 1 detik.
Pulsa = TH1 * (0x100) + TL1; Pulsa = pulsa * 10;
Pada bagian kode ini, nilai frekuensi diubah menjadi byte tunggal agar mudah ditampilkan pada layar lcd 16 * 2.
d1 = pulsa% 10; s1 = pulsa% 100; s2 = pulsa% 1000; s3 = pulsa% 10000; s4 = pulsa% 100000; d2 = (s1-d1) / 10; d3 = (s2-s1) / 100; d4 = (s3-s2) / 1000; d5 = (s4-s3) / 10000; d6 = (pulsa-s4) / 100000;
Di bagian kode ini, setiap digit nilai frekuensi diubah ke format ASCII dan ditampilkan pada layar lcd 16 * 2.
Jika (pulsa> = 100000) datawrt (0x30 + d6); if (pulsa> = 10000) datawrt (0x30 + d5); if (pulsa> = 1000) datawrt (0x30 + d4); if (pulsa> = 100) datawrt (0x30 + d3); if (pulsa> = 10) datawrt (0x30 + d2); datawrt (0x30 + d1);
Di bagian kode ini, kami mengirimkan perintah ke layar lcd 16 * 2. Perintah tersebut disalin ke port 0 dari 8051 mikrokontroler. RS dibuat rendah untuk penulisan perintah. RW dibuat rendah untuk operasi tulis. Pulsa tinggi ke rendah diterapkan pada pin pengaktifan (E) untuk memulai operasi penulisan perintah.
batal cmdwrt (unsigned char x) {P0 = x; rs = 0; rw = 0; en = 1; penundaan (1); en = 0; }
Pada bagian kode ini, kami mengirimkan data ke layar lcd 16 * 2. Data tersebut disalin ke port 0 dari 8051 mikrokontroler. RS dibuat tinggi untuk penulisan perintah. RW dibuat rendah untuk operasi tulis. Pulsa tinggi ke rendah diterapkan pada pin pengaktifan (E) untuk memulai operasi penulisan data.
batal datawrt (unsigned char y) {P0 = y; rs = 1; rw = 0; en = 1; penundaan (1); en = 0; }
Ini adalah bagaimana kita dapat mengukur frekuensi sinyal apa pun menggunakan Mikrokontroler 8051. Lihat kode lengkap dan Video Demo di bawah ini.