- Komponen yang Diperlukan:
- Rajah Litar:
- Menggunakan TIMER 8051 untuk Mengukur Frekuensi:
- 555 Pemasa sebagai Sumber Kekerapan:
- Kerja dan Penjelasan Kod:
Kekerapan ditakrifkan sebagai bilangan kitaran sesaat. Ia juga boleh didefinisikan sebagai timbal balik jumlah masa 'T'. Dalam projek ini kita akan menghitung jumlah denyutan yang masuk ke Port 3.5 dari 8051 mikrokontroler dan memaparkannya pada paparan LCD 16 * 2. Jadi, pada asasnya kita telah mengukur kekerapan isyarat di Port 3.5 daripada 8051. Di sini kita telah menggunakan AT89S52 8051 cip, dan 555 IC digunakan dalam mod astabil untuk menjana denyut sampel untuk demonstrasi. Kami sebelum ini telah membina pembilang Frekuensi menggunakan Arduino.
Komponen yang Diperlukan:
- 8051 mikrokontroler (AT89S52)
- Paparan LCD 16 * 2
- Sumber Kekerapan (Pemasa 555)
- Potensiometer
- Menyambung wayar
Rajah Litar:
Menggunakan TIMER 8051 untuk Mengukur Frekuensi:
8051 mikrokontroler adalah mikrokontroler 8 bit yang mempunyai 128 bait pada cip RAM, bait 4K pada cip ROM, dua pemasa, satu port bersiri dan empat port 8bit. 8052 mikrokontroler adalah lanjutan dari mikrokontroler. Untuk mengkonfigurasi port 3.5 sebagai pembilang, nilai pendaftaran TMOD ditetapkan ke 0x51. Gambar di bawah menunjukkan daftar TMOD.
PINTU GERBANG | C / T | M1 | M0 | PINTU GERBANG | C / T | M1 | M2 |
PEMASA 1 | PEMASA 0 |
GATE - apabila GATE ditetapkan, pemasa atau penghitung diaktifkan hanya apabila pin INTx HIGH dan pin kawalan TRx ditetapkan. Apabila GATE dibersihkan, pemasa diaktifkan setiap kali bit kawalan TRx SET.
C / T - apabila C / T = 0, ia bertindak sebagai Pemasa. Apabila C / T = 1, ia bertindak sebagai Pembilang.
M1 dan M0 menunjukkan mod operasi.
Untuk TMOD = 0x51, pemasa1 bertindak sebagai pembilang dan ia beroperasi dalam mod1 (16bit).
LCD 16 * 2 digunakan untuk memaparkan Frekuensi isyarat dalam Hertz (Hz). Sekiranya anda baru menggunakan LCD 16x2, periksa lebih lanjut mengenai pin LCD 16x2 dan perintahnya di sini. Periksa juga bagaimana untuk menghubungkan LCD dengan 8051.
555 Pemasa sebagai Sumber Kekerapan:
Sumber frekuensi harus menghasilkan gelombang persegi dan amplitud maksimum terhad kepada 5V, kerana port 8051 mikrokontroler tidak dapat menangani voltan lebih besar dari 5V. The kekerapan maksimum ia boleh mengukur adalah 655,35 KHz kerana had memori TH1 dan TL1 daftar (8bit setiap satu). Dalam 100 milisaat, TH1 dan TL1 dapat menahan jumlah sehingga 65535. Oleh itu frekuensi maksimum yang dapat diukur ialah 65535 * 10 = 655.35 KHz.
Dalam projek Meter Frekuensi 8051 ini, saya menggunakan pemasa 555 dalam mod astable untuk menghasilkan gelombang persegi frekuensi berubah. Kekerapan isyarat yang dihasilkan oleh 555 IC, dapat diubah dengan menyesuaikan potensiometer seperti yang ditunjukkan dalam Video yang diberikan pada akhir Projek ini.
Dalam projek ini, Timer1 (T1) mengira bilangan denyutan yang memasuki port 3.5 dari 8051 mikrokontroler selama 100 milisaat. Nilai kiraan akan disimpan dalam daftar TH1 dan TL1 masing-masing. Untuk menggabungkan nilai daftar TH1 dan TL1, formula di bawah digunakan.
Denyutan = TH1 * (0x100) + TL1
Kini 'nadi' akan mempunyai bilangan kitaran dalam 100 milisaat. Tetapi frekuensi isyarat ditakrifkan sebagai bilangan kitaran sesaat. Untuk menukarnya menjadi frekuensi, formula di bawah digunakan.
Denyutan = Denyutan * 10
Kerja dan Penjelasan Kod:
The program C lengkap untuk Kekerapan ini Meter diberikan pada akhir projek ini. Kod ini dibahagikan kepada potongan kecil yang bermakna dan dijelaskan di bawah.
Untuk 16 * 2 LCD yang berinteraksi dengan 8051 mikrokontroler, kita harus menentukan pin yang mana 16 * 2 lcd disambungkan ke 8051 mikrokontroler. Pin RS 16 * 2 lcd disambungkan ke P2.7, pin RW 16 * 2 lcd disambungkan ke P2.6 dan pin E 16 * 2 lcd disambungkan ke P2.5. Pin data disambungkan ke port 0 dari 8051 mikrokontroler.
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit en = P2 ^ 5;
Seterusnya kita harus menentukan beberapa fungsi yang digunakan dalam program ini. Fungsi kelewatan digunakan untuk membuat kelewatan masa yang ditentukan. Fungsi Cmdwrt digunakan untuk mengirim perintah ke paparan 16 * 2 lcd. fungsi datawrt digunakan untuk mengirim data ke paparan 16 * 2 lcd.
kelewatan tidak sah (int tidak ditandatangani); tidak sah cmdwrt (char yang tidak ditandatangani); batal datawrt (char yang tidak ditandatangani);
Di bahagian kod ini, kami mengirimkan perintah ke 16 * 2 lcd. Arahan seperti paparan yang jelas, kursor kenaikan, memaksa kursor ke permulaan 1 st garis dihantar ke 16 * 2 lcd paparan satu demi satu selepas beberapa kelewatan masa yang ditetapkan.
untuk (i = 0; i <5; i ++) {cmdwrt (cmd); kelewatan (1); }
Di bahagian kod ini, pemasa1 dikonfigurasikan sebagai penghitung dan mod operasi ditetapkan ke mod 1
Timer0 dikonfigurasi sebagai pemasa dan modus operasi ditetapkan ke mod 1. Pemasa 1 digunakan untuk mengira bilangan denyutan dan pemasa 0 digunakan untuk menghasilkan kelewatan masa. Nilai TH1 dan TL1 ditetapkan ke 0, untuk memastikan pengiraan bermula dari 0.
TMOD = 0x51; TL1 = 0; TH1 = 0;
Di bahagian kod ini, pemasa dibuat untuk berjalan selama 100 milisaat. Kelewatan 100 milisaat dihasilkan menggunakan fungsi kelewatan. TR1 = 1 adalah untuk memulakan pemasa dan TR1 = 0 adalah untuk menghentikan pemasa selepas 100 milisaat.
TR1 = 1; kelewatan (100); TR1 = 0;
Dalam bahagian kod ini, nilai kiraan yang terdapat dalam daftar TH1 dan TL1 digabungkan dan kemudian dikalikan dengan 10 untuk mendapatkan jumlah kitaran dalam 1 saat.
Denyutan = TH1 * (0x100) + TL1; Denyutan = denyutan * 10;
Di bahagian kod ini, nilai frekuensi ditukar menjadi bait tunggal untuk memudahkan paparan pada paparan 16 * 2 lcd.
d1 = denyutan% 10; s1 = denyutan% 100; s2 = denyutan% 1000; s3 = denyutan% 10000; s4 = denyutan% 100000; d2 = (s1-d1) / 10; d3 = (s2-s1) / 100; d4 = (s3-s2) / 1000; d5 = (s4-s3) / 10000; d6 = (denyutan-s4) / 100000;
Dalam bahagian kod ini, digit nilai frekuensi individu ditukar ke format ASCII dan ia dipaparkan pada paparan 16 * 2 lcd.
Sekiranya (denyutan> = 100000) datawrt (0x30 + d6); jika (denyutan> = 10000) datawrt (0x30 + d5); jika (denyutan> = 1000) datawrt (0x30 + d4); jika (denyutan> = 100) datawrt (0x30 + d3); jika (denyutan> = 10) datawrt (0x30 + d2); datawrt (0x30 + d1);
Di bahagian kod ini, kami mengirimkan perintah ke paparan 16 * 2 lcd. Perintah disalin ke port 0 dari 8051 mikrokontroler. RS dibuat rendah untuk menulis perintah. RW dibuat rendah untuk operasi tulis. Denyut tinggi hingga rendah digunakan pada pin membolehkan (E) untuk memulakan operasi menulis perintah.
batal cmdwrt (tanda tidak ditandatangani x) {P0 = x; rs = 0; rw = 0; en = 1; kelewatan (1); en = 0; }
Di bahagian kod ini, kami mengirimkan data ke paparan 16 * 2 lcd. Data disalin ke port 0 dari 8051 mikrokontroler. RS dibuat tinggi untuk menulis perintah. RW dibuat rendah untuk operasi tulis. Denyut tinggi hingga rendah digunakan pada pin membolehkan (E) untuk memulakan operasi menulis data.
batal datawrt (char tidak bertanda tangan) {P0 = y; rs = 1; rw = 0; en = 1; kelewatan (1); en = 0; }
Ini adalah bagaimana kita dapat mengukur frekuensi sebarang isyarat menggunakan Mikrokontroler 8051. Lihat kod penuh dan Video Demo di bawah.