- Vaaditut komponentit:
- Piirikaavio:
- TIMER 8051: n käyttäminen taajuuden mittaamiseen:
- 555 Ajastin taajuuslähteenä:
- Työskentely ja koodin selitys:
Taajuus määritellään jaksojen lukumäärä sekunnissa. Se voidaan määritellä myös kokonaisajan 'T' vastavuoroiseksi. Tässä projektissa aiomme laskea 8051-mikrokontrollerin porttiin 3.5 saapuvien pulssien lukumäärän ja näyttää sen 16 * 2 LCD-näytöllä. Joten pohjimmiltaan meillä on mitata signaalin taajuus 8051: n portissa 3.5. Tässä olemme käyttäneet AT89S52 8051 -piiriä ja 555 IC: tä käytetään Astable-tilassa näytepulssin muodostamiseksi esittelyä varten. Olemme aiemmin rakentaneet Taajuuslaskurin Arduinolla.
Vaaditut komponentit:
- 8051-mikrokontrolleri (AT89S52)
- 16 * 2 LCD-näyttö
- Taajuuslähde (555 ajastin)
- Potentiometri
- Johtojen liittäminen
Piirikaavio:
TIMER 8051: n käyttäminen taajuuden mittaamiseen:
8051-mikrokontrolleri on 8-bittinen mikrokontrolleri, jolla on 128 tavua sirumuistia, 4K tavua siru-ROM-levyllä, kaksi ajastinta, yksi sarjaportti ja neljä 8-bittistä porttia. 8052-mikrokontrolleri on mikrokontrollerin jatke. Portin 3.5 määrittämiseksi laskuriksi TMOD-rekisteriarvoiksi asetetaan 0x51. Alla olevassa kuvassa on TMOD-rekisteri.
PORTTI | C / T | M1 | M0 | PORTTI | C / T | M1 | M2 |
AJASTIN 1 | AJASTIN 0 |
GATE - kun GATE on asetettu, ajastin tai laskuri otetaan käyttöön vain, kun INTx-tappi on KORKEA ja TRx-ohjaustappi on asetettu. Kun GATE tyhjennetään, ajastin otetaan käyttöön aina, kun TRx-ohjausbitti on asetettu.
C / T - kun C / T = 0, se toimii ajastimena. Kun C / T = 1, se toimii laskurina.
M1 ja M0 ilmaisevat toimintatilan.
Jos TMOD = 0x51, ajastin1 toimii laskurina ja se toimii tilassa1 (16 bittiä).
16 * 2 nestekidenäyttöä käytetään signaalin taajuuden näyttämiseen hertseinä (Hz). Jos olet uusi 16x2 LCD -näyttö, tarkista lisätietoja 16x2 LCD: n nastoista ja sen komennoista täältä. Tarkista myös, kuinka LCD-näyttö liitetään 8051: een.
555 Ajastin taajuuslähteenä:
Taajuuslähteen tulisi tuottaa neliöaaltoja ja suurin amplitudi on rajoitettu 5V: iin, koska 8051-mikrokontrollerin portit eivät kykene käsittelemään suurempaa jännitettä kuin 5V. Suurin taajuus se voi mitata on 655,35 kHz, koska muisti on rajallinen TH1 ja TL1 rekisterin (8bit kukin). 100 millisekunnissa TH1 ja TL1 voivat pitää 65535 lukemaa. Siksi suurin mitattava taajuus on 65535 * 10 = 655,35 KHz.
Tässä 8051-taajuusmittariprojektissa käytän 555-ajastinta astable-tilassa tuottamaan vaihtelevan taajuuden neliöaaltoja. 555 IC: n tuottaman signaalin taajuutta voidaan muuttaa säätämällä potentiometriä, kuten on osoitettu tämän projektin lopussa annetussa videossa.
Tässä projektissa ajastin1 (T1) laskee 8051 mikro-ohjaimen porttiin 3.5 saapuvien pulssien lukumäärän 100 millisekunnin ajan. Laskenta-arvot tallennetaan TH1- ja TL1-rekistereihin. TH1- ja TL1-rekisterin arvojen yhdistämiseksi käytetään seuraavaa kaavaa.
Pulssit = TH1 * (0x100) + TL1
Nyt pulssilla on syklien lukumäärä 100 millisekunnissa. Mutta signaalin taajuus määritellään jaksojen lukumääränä sekunnissa. Sen muuntamiseksi taajuudeksi käytetään alla olevaa kaavaa.
Pulssit = Pulssit * 10
Työskentely ja koodin selitys:
Täydellinen C-ohjelma tälle taajuusmittari annetaan lopussa tämän projektin. Koodi on jaettu pieniksi merkityksellisiksi paloiksi ja selitetty alla.
16 * 2 LCD-liitännälle 8051-mikrokontrollerin kanssa on määriteltävä nastat, joihin 16 * 2 lcd on kytketty 8051-mikrokontrolleriin. RS-nasta 16 * 2 lcd on kytketty P2.7, RW nasta 16 * 2 lcd on kytketty P2.6 ja E nasta 16 * 2 lcd on kytketty P2.5. Datanastat on kytketty 8051-mikrokontrollerin porttiin 0.
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit en = P2 ^ 5;
Seuraavaksi meidän on määriteltävä joitakin toimintoja, joita ohjelmassa käytetään. Viive- toimintoa käytetään määritetyn aikaviiveen luomiseen. Cmdwrt- toimintoa käytetään komentojen lähettämiseen 16 * 2 lcd-näyttöön. datawrt- toimintoa käytetään tietojen lähettämiseen 16 * 2 lcd-näyttöön.
void delay (allekirjoittamaton int); void cmdwrt (allekirjoittamaton merkki); void datawrt (allekirjoittamaton merkki);
Tässä koodin osassa lähetämme komentoja 16 * 2 lcd: lle. Komentoja kuten selkeä näyttö, lisäys kohdistin, pakottaa kohdistimen alussa 1 s rivi lähetetään 16 * 2 LCD-näyttöön yksitellen jonkin tietyn aikaviiveen.
(i = 0; i <5; i ++) {cmdwrt (cmd); viive (1); }
Tässä koodin osassa ajastin1 on määritetty laskuriksi ja toimintatila asetetaan tilaan 1.
Ajastin0 on määritetty ajastimeksi ja toimintatila asetetaan tilaan 1. Ajastinta 1 käytetään pulssien määrän laskemiseen ja ajastinta 0 käytetään aikaviiveen muodostamiseen. TH1- ja TL1-arvot on asetettu arvoon 0 sen varmistamiseksi, että laskenta alkaa 0: sta.
TMOD = 0x51; TL1 = 0; TH1 = 0;
Koodin tässä osassa ajastin on tarkoitettu toimimaan 100 millisekunnin ajan. 100 millisekuntia viive muodostetaan viivetoiminnolla. TR1 = 1 on ajastimen käynnistys ja TR1 = 0 on ajastimen pysäyttäminen 100 millisekunnin jälkeen.
TR1 = 1; viive (100); TR1 = 0;
Koodin tässä osassa TH1- ja TL1-rekistereissä olevat laskenta-arvot yhdistetään ja kerrotaan sitten 10: llä, jotta saadaan syklien kokonaismäärä 1 sekunnissa.
Pulssit = TH1 * (0x100) + TL1; Pulssit = pulssit * 10;
Koodin tässä osassa taajuusarvo muunnetaan yksitavuisiksi, jotta se on helppo näyttää 16 * 2 lcd -näytöllä.
d1 = pulssit% 10; s1 = pulssit% 100; s2 = pulssit% 1000; s3 = pulssit% 10000; s4 = pulssit% 100000; d2 = (s1-d1) / 10; d3 = (s2-s1) / 100; d4 = (s3-s2) / 1000; d5 = (s4-s3) / 10000; d6 = (pulssit-s4) / 100000;
Koodin tässä osassa taajuusarvon yksittäiset numerot muunnetaan ASCII- muotoon ja se näytetään 16 * 2 lcd-näytöllä.
If (pulssit> = 100000) datawrt (0x30 + d6); if (pulssit> = 10000) datawrt (0x30 + d5); if (pulssit> = 1000) datawrt (0x30 + d4); if (pulssit> = 100) datawrt (0x30 + d3); if (pulssit> = 10) datawrt (0x30 + d2); datawrt (0x30 + d1);
Tässä koodin osassa lähetämme komentoja 16 * 2 lcd-näyttöön. Komento kopioidaan 8051-mikrokontrollerin porttiin 0. RS on alhainen komentojen kirjoittamista varten. RW on alhainen kirjoitusoperaatiota varten. Korkeasta matalaan pulssia käytetään aktivointitapissa komentojen kirjoitusoperaation aloittamiseksi.
void cmdwrt (allekirjoittamaton merkki x) {P0 = x; rs = 0; rw = 0; en = 1; viive (1); en = 0; }
Tässä koodin osassa lähetämme tietoja 16 * 2 lcd-näyttöön. Tiedot kopioidaan 8051-mikrokontrollerin porttiin 0. RS on asetettu korkealle komentojen kirjoittamista varten. RW on alhainen kirjoitusoperaatiota varten. Korkeasta matalaan pulssia käytetään aktivointitapissa tietojen kirjoittamisen aloittamiseksi.
void datawrt (allekirjoittamaton merkki y) {P0 = y; rs = 1; rw = 0; en = 1; viive (1); en = 0; }
Näin voimme mitata minkä tahansa signaalin taajuuden 8051-mikrokontrollerilla. Tarkista koko koodi ja esittelyvideo alla.