- Kinakailangan ang Mga Bahagi:
- Diagram ng Circuit:
- Paggamit ng TIMER ng 8051 para sa Frequency ng Pagsukat:
- 555 Timer bilang Pinagmulan ng Frequency:
- Paggawa at Pagpapaliwanag sa Code:
Ang dalas ay tinukoy bilang bilang ng mga cycle bawat segundo. Maaari rin itong tukuyin bilang katumbasan ng kabuuang oras na 'T'. Sa proyektong ito bibilangin namin ang bilang ng mga pulso na pumapasok sa Port 3.5 ng 8051 microcontroller at ipakita ito sa 16 * 2 LCD display. Kaya karaniwang sinusukat namin ang dalas ng signal sa Port 3.5 ng 8051. Dito ginamit namin ang AT89S52 8051 chip, at isang 555 IC ang ginagamit sa Astable mode para sa pagbuo ng sample na pulso para sa pagpapakita. Nakagawa na kami dati ng Frequency counter gamit ang Arduino.
Kinakailangan ang Mga Bahagi:
- 8051 microcontroller (AT89S52)
- 16 * 2 LCD display
- Pinagmulan ng Dalas (555 Timer)
- Potensyomiter
- Mga kumokonekta na mga wire
Diagram ng Circuit:
Paggamit ng TIMER ng 8051 para sa Frequency ng Pagsukat:
Ang 8051 microcontroller ay isang 8 bit microcontroller na mayroong 128 bytes ng sa chip RAM, 4K bytes ng sa chip ROM, dalawang timer, isang serial port at apat na 8bit port. Ang 8052 microcontroller ay isang extension ng microcontroller. Upang mai-configure ang port 3.5 bilang counter, ang mga halaga ng rehistro ng TMOD ay nakatakda sa 0x51. Ipinapakita ng numero sa ibaba ang rehistro ng TMOD.
GATE | C / T | M1 | M0 | GATE | C / T | M1 | M2 |
PANAHON 1 | PANAHON 0 |
GATE - kapag itinakda ang GATE, ang timer o counter ay pinagana lamang kapag ang INTx pin ay TAAS at ang TRx control pin ay naitakda. Kapag ang GATE ay nalinis, ang timer ay pinagana tuwing TRx control bit ay Itakda.
C / T - kapag C / T = 0, gumaganap ito bilang Timer. Kapag ang C / T = 1, gumaganap ito bilang Counter.
Ang M1 at M0 ay nagpapahiwatig ng mode ng pagpapatakbo.
Para sa TMOD = 0x51, ang timer1 ay kumikilos bilang counter at nagpapatakbo ito sa mode1 (16bit).
Ginagamit ang 16 * 2 LCD upang ipakita ang Dalas ng signal sa Hertz (Hz). Kung bago ka sa 16x2 LCD, suriin ang higit pa tungkol sa mga pin ng 16x2 LCD at mga utos dito. Suriin din kung paano i-interface ang LCD sa 8051.
555 Timer bilang Pinagmulan ng Frequency:
Ang mapagkukunan ng dalas ay dapat na gumawa ng mga square alon at ang maximum na amplitude ay limitado sa 5V, dahil ang mga port ng 8051 microcontroller ay hindi maaaring hawakan ang boltahe na mas malaki sa 5V. Ang maximum na dalas na maaari nitong sukatin ay 655.35 KHz dahil sa limitasyon ng memorya ng rehistro ng TH1 at TL1 (bawat 8bit). Sa 100 milliseconds, ang TH1 at TL1 ay maaaring humawak ng hanggang sa 65535 na bilang. Samakatuwid ang maximum na dalas na maaaring masukat ay 65535 * 10 = 655.35 KHz.
Sa proyektong 8051 Frequency Meter na ito, gumagamit ako ng 555 timer sa astable mode upang makagawa ng variable frequency square square. Ang dalas ng signal na nabuo ng 555 IC, ay maaaring iba-iba sa pamamagitan ng pag-aayos ng potensyomiter tulad ng ipinakita sa Video na ibinigay sa pagtatapos ng Project na ito.
Sa proyektong ito, binibilang ng Timer1 (T1) ang bilang ng mga pulso na pumapasok sa port 3.5 ng 8051 microcontrollers para sa 100 milliseconds. Ang mga halaga ng bilang ay maiimbak sa mga rehistro ng TH1 at TL1 ayon sa pagkakabanggit. Upang pagsamahin ang mga halaga ng rehistro ng TH1 at TL1, ginagamit ang formula sa ibaba.
Mga pulso = TH1 * (0x100) + TL1
Ngayon ang 'pulso' ay magkakaroon ng bilang ng mga cycle sa 100 milliseconds. Ngunit ang dalas ng signal ay tinukoy bilang bilang ng mga cycle bawat segundo. Upang mai-convert ito sa dalas, ginagamit ang formula sa ibaba.
Mga pulso = Mga pulso * 10
Paggawa at Pagpapaliwanag sa Code:
Ang kumpletong programa ng C para sa Frequency Meter na ito ay ibinibigay sa pagtatapos ng proyektong ito. Ang code ay nahahati sa maliit na makahulugang mga tipak at ipinaliwanag sa ibaba.
Para sa 16 * 2 LCD na nakikipag-ugnay sa 8051 microcontroller, kailangan nating tukuyin ang mga pin kung saan ang 16 * 2 lcd ay konektado sa 8051 microcontroller. Ang RS pin na 16 * 2 lcd ay konektado sa P2.7, ang RW pin na 16 * 2 lcd ay konektado sa P2.6 at ang E pin ng 16 * 2 lcd ay konektado sa P2.5. Ang mga data pin ay konektado sa port 0 ng 8051 microcontroller.
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit en = P2 ^ 5;
Susunod kailangan nating tukuyin ang ilang mga pagpapaandar na ginagamit sa programa. Ginagamit ang pagkaantala ng pagpapaandar upang lumikha ng tinukoy na pagkaantala ng oras. Ang pagpapaandar ng Cmdwrt ay ginagamit upang magpadala ng mga utos sa pagpapakita ng 16 * 2 lcd. Ang pagpapaandar ng datawrt ay ginagamit upang magpadala ng data sa 16 * 2 lcd display.
walang bisa ang pagkaantala (unsigned int); walang bisa cmdwrt (unsigned char); walang bisa ang datawrt (unsigned char);
Sa bahaging ito ng code, nagpapadala kami ng mga utos sa 16 * 2 lcd. Ang mga utos tulad ng malinaw na pagpapakita, pagtaas ng cursor, pilitin ang cursor sa simula ng 1 st line ay ipinadala sa 16 * 2 lcd display isa-isa pagkatapos ng ilang tinukoy na pagkaantala ng oras.
para sa (i = 0; i <5; i ++) {cmdwrt (cmd); antala (1); }
Sa bahaging ito ng code, ang timer1 ay naka-configure bilang counter at mode ng pagpapatakbo ay nakatakda sa mode 1.
Ang Timer0 ay naka-configure bilang timer at mode ng pagpapatakbo ay nakatakda sa mode 1. Ginagamit ang timer 1 para sa pagbibilang ng bilang ng mga pulso at ang timer 0 ay ginagamit para sa pagbuo ng pagkaantala ng oras. Ang mga halagang TH1 at TL1 ay nakatakda sa 0, upang matiyak na ang pagbibilang ay nagsisimula mula sa 0.
TMOD = 0x51; TL1 = 0; TH1 = 0;
Sa bahaging ito ng code, ang timer ay ginawa upang tumakbo sa loob ng 100 milliseconds. 100 milliseconds ng pagkaantala ang nabuo gamit ang pagka-antala ng pagpapaandar. Ang TR1 = 1 ay para sa pagsisimula ng timer at ang TR1 = 0 ay para sa pagtigil sa timer pagkatapos ng 100 milliseconds.
TR1 = 1; pagkaantala (100); TR1 = 0;
Sa bahaging ito ng code, ang mga bilang ng bilang na naroroon sa mga rehistro ng TH1 at TL1 ay pinagsama at pagkatapos ay pinarami ng 10 upang makuha ang kabuuang bilang ng mga cycle sa 1 segundo.
Mga pulso = TH1 * (0x100) + TL1; Mga pulso = pulso * 10;
Sa bahaging ito ng code, ang halaga ng dalas ay na-convert sa solong bytes upang gawing madali para sa pagpapakita sa 16 * 2 lcd display.
d1 = pulso% 10; s1 = pulses% 100; s2 = pulses% 1000; s3 = pulses% 10000; s4 = pulso% 100000; d2 = (s1-d1) / 10; d3 = (s2-s1) / 100; d4 = (s3-s2) / 1000; d5 = (s4-s3) / 10000; d6 = (pulses-s4) / 100000;
Sa bahaging ito ng code, ang mga indibidwal na digit ng halaga ng dalas ay na-convert sa ASCII format at ipinapakita ito sa 16 * 2 lcd display.
Kung (pulses> = 100000) datawrt (0x30 + d6); kung (pulses> = 10000) datawrt (0x30 + d5); kung (pulses> = 1000) datawrt (0x30 + d4); kung (pulses> = 100) datawrt (0x30 + d3); kung (pulses> = 10) datawrt (0x30 + d2); datawrt (0x30 + d1);
Sa bahaging ito ng code, nagpapadala kami ng mga utos sa pagpapakita ng 16 * 2 lcd. Ang utos ay nakopya sa port 0 ng 8051 microcontroller. Ang RS ay ginawang mababa para sa pagsulat ng utos. Ang RW ay ginawang mababa para sa operasyon ng pagsusulat. Ang mataas hanggang mababang pulso ay inilapat upang paganahin ang (E) pin upang simulan ang operasyon ng pagsulat ng utos.
walang bisa cmdwrt (unsigned char x) {P0 = x; rs = 0; rw = 0; tl = 1; antala (1); tl = 0; }
Sa bahaging ito ng code, nagpapadala kami ng data sa 16 * 2 lcd display. Ang data ay nakopya sa port 0 ng 8051 microcontroller. Ang RS ay ginawang mataas para sa pagsulat ng utos. Ang RW ay ginawang mababa para sa operasyon ng pagsusulat. Ang mataas hanggang mababang pulso ay inilapat upang paganahin ang (E) pin upang simulan ang pagpapatakbo ng pagsulat ng data.
walang bisa datawrt (unsigned char y) {P0 = y; rs = 1; rw = 0; tl = 1; antala (1); tl = 0; }
Ito ay kung paano namin masusukat ang dalas ng anumang signal gamit ang 8051 Microcontroller. Suriin ang buong code at Demo Video sa ibaba.