- Būtini komponentai:
- Grandinės schema:
- Dažnio matavimui naudojant TIMER 8051:
- 555 laikmatis kaip dažnio šaltinis:
- Darbo ir kodo paaiškinimas:
Dažnis apibrėžiamas kaip ciklų skaičius per sekundę. Tai taip pat gali būti apibrėžta kaip abipusis viso laiko „T“. Šiame projekte mes suskaičiuosime impulsų, patenkančių į 8051 mikrovaldiklio 3.5 prievadą, skaičių ir parodysime jį 16 * 2 LCD ekrane. Taigi iš esmės mes matavome signalo dažnį 8051 3.5 prievade. Čia mes naudojome AT89S52 8051 lustą, o 555 IC naudojamas „Astable“ režime mėginio impulsui generuoti demonstravimui. Anksčiau mes sukūrėme dažnio skaitiklį naudodami „Arduino“.
Būtini komponentai:
- 8051 mikrovaldiklis (AT89S52)
- 16 * 2 LCD ekranas
- Dažnio šaltinis (555 laikmatis)
- Potenciometras
- Jungiamieji laidai
Grandinės schema:
Dažnio matavimui naudojant TIMER 8051:
8051 mikrovaldiklis yra 8 bitų mikrovaldiklis, turintis 128 baitų lusto RAM, 4K baitų lusto ROM, du laikmačius, vieną nuoseklųjį ir keturis 8 bitų prievadus. 8052 mikrovaldiklis yra mikrovaldiklio pratęsimas. Norėdami konfigūruoti 3.5 prievadą kaip skaitiklį, TMOD registro reikšmės nustatomos kaip 0x51. Žemiau pateiktame paveikslėlyje parodytas TMOD registras.
VARTAI | C / T | M1 | M0 | VARTAI | C / T | M1 | M2 |
1 Laikmatis | 0 Laikmatis |
GATE - kai nustatoma GATE, laikmatis arba skaitiklis įjungiami tik tada, kai INTx kaištis yra AUKŠTAS ir nustatytas TRx valdymo kaištis. Išvalius vartus, laikmatis įjungiamas, kai TRX valdymo bitas yra nustatytas.
C / T - kai C / T = 0, jis veikia kaip laikmatis. Kai C / T = 1, jis veikia kaip skaitiklis.
M1 ir M0 rodo darbo režimą.
Jei TMOD = 0x51, laikmatis1 veikia kaip skaitiklis ir veikia 1 režimu (16 bitų).
16 * 2 skystųjų kristalų ekranas naudojamas rodyti signalo dažnį hercais (Hz). Jei dar nesinaudojote 16x2 LCD ekranu, daugiau apie 16x2 LCD kaiščius ir jo komandas žiūrėkite čia. Taip pat patikrinkite, kaip susieti LCD ekraną su 8051.
555 laikmatis kaip dažnio šaltinis:
Dažnio šaltinis turėtų sukelti kvadratines bangas, o didžiausia amplitudė ribojama iki 5 V, nes 8051 mikrovaldiklio prievadai negali valdyti didesnės nei 5 V įtampos. Maksimalus dažnis gali išmatuoti yra 655,35 kHz, nes atminties ribojimo TH1 ir TL1 registre (8bit kiekvienam). Per 100 milisekundžių TH1 ir TL1 gali išlaikyti iki 65535 skaičių. Taigi didžiausias dažnis, kurį galima išmatuoti, yra 65535 * 10 = 655,35 KHz.
Šiame 8051 dažnio matuoklio projekte aš naudoju 555 laikmatį stabiliuoju režimu, kad sukurčiau kintamas dažnio kvadratines bangas. 555 IC generuojamo signalo dažnį galima keisti reguliuojant potenciometrą, kaip parodyta vaizdo įraše, pateiktame šio projekto pabaigoje.
Šiame projekte „Timer1“ (T1) 100 milisekundžių skaičiuoja impulsų, patenkančių į 8051 mikrovaldiklių 3.5 prievadą, skaičių. Skaičiavimo vertės bus atitinkamai saugomos TH1 ir TL1 registruose. Norėdami sujungti TH1 ir TL1 registro reikšmes, naudojama toliau pateikta formulė.
Impulsai = TH1 * (0x100) + TL1
Dabar „pulsas“ turės ciklų skaičių per 100 milisekundžių. Bet signalo dažnis apibrėžiamas kaip ciklų skaičius per sekundę. Norėdami konvertuoti į dažnį, naudojama žemiau pateikta formulė.
Impulsai = impulsai * 10
Darbo ir kodo paaiškinimas:
Visa šio dažnio matuoklio C programa pateikiama šio projekto pabaigoje. Kodas yra padalintas į mažus reikšmingus gabalėlius ir paaiškinamas toliau.
16 * 2 skystųjų kristalų sąsajai su 8051 mikrovaldikliu turime apibrėžti kaiščius, ant kurių 16 * 2 lcd yra prijungtas prie 8051 mikrovaldiklio. RS kaištis 16 * 2 lcd yra prijungtas prie P2.7, RW kaištis 16 * 2 lcd yra prijungtas prie P2.6 ir E kaištis 16 * 2 lcd yra prijungtas prie P2.5. Duomenų kaiščiai yra prijungti prie 8051 mikrovaldiklio 0 prievado.
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit en = P2 ^ 5;
Toliau turime apibrėžti keletą funkcijų, kurios naudojamos programoje. Vėlavimo funkcija naudojama nurodytam laiko atidėjimui sukurti. „Cmdwrt“ funkcija naudojama komandoms siųsti į 16 * 2 LCD ekraną. datawrt funkcija naudojama duomenims siųsti į 16 * 2 lcd ekraną.
negaliojantis vėlavimas (nepasirašytas int); void cmdwrt (nepasirašyta char); void datawrt (nepasirašyta simbolis);
Šioje kodo dalyje mes siunčiame komandas į 16 * 2 lcd. Komandos pavyzdžiui, ryškus ekranas, prieaugio žymeklio, priversti žymeklį pradedant 1 -osios linijos yra siunčiami į 16 * 2 LCD ekranas po vieną po tam tikrą vėlavimo.
už (i = 0; i <5; i ++) {cmdwrt (cmd); vėlavimas (1); }
Šioje kodo dalyje laikmatis1 sukonfigūruotas kaip skaitiklis, o veikimo režimas nustatytas į 1 režimą.
„Timer0“ yra sukonfigūruotas kaip laikmatis, o darbo režimas nustatytas į 1 režimą. Laikmatis 1 naudojamas impulsų skaičiui skaičiuoti, o laikmatis 0 - laiko uždelsimo generavimui. TH1 ir TL1 reikšmės nustatytos į 0, kad būtų užtikrinta, jog skaičiavimas prasideda nuo 0.
TMOD = 0x51; TL1 = 0; TH1 = 0;
Šioje kodo dalyje laikmatis veikia 100 milisekundžių. Naudojant uždelsimo funkciją, sugeneruojama 100 milisekundžių. TR1 = 1 skirtas paleisti laikmatį, o TR1 = 0 - laikmatį sustabdyti po 100 milisekundžių.
TR1 = 1; vėlavimas (100); TR1 = 0;
Šioje kodo dalyje TH1 ir TL1 registruose esančios skaičiavimo vertės sujungiamos, o tada padauginamos iš 10, kad būtų gautas bendras ciklų skaičius per 1 sekundę.
Impulsai = TH1 * (0x100) + TL1; Impulsai = impulsai * 10;
Šioje kodo dalyje dažnio reikšmė konvertuojama į vienus baitus, kad būtų lengva ją rodyti 16 * 2 lcd ekrane.
d1 = impulsai% 10; s1 = impulsai% 100; s2 = impulsai% 1000; s3 = impulsai% 10000; s4 = impulsai% 100000; d2 = (s1-d1) / 10; d3 = (s2-s1) / 100; d4 = (s3-s2) / 1000; d5 = (s4-s3) / 10000; d6 = (impulsai-s4) / 100000;
Šioje kodo dalyje pavieniai dažnio vertės skaitmenys konvertuojami į ASCII formatą ir jie rodomi 16 * 2 lcd ekrane.
If (impulsai> = 100000) datawrt (0x30 + d6); if (impulsai> = 10000) datawrt (0x30 + d5); if (impulsai> = 1000) datawrt (0x30 + d4); if (impulsai> = 100) datawrt (0x30 + d3); if (impulsai> = 10) datawrt (0x30 + d2); datawrt (0x30 + d1);
Šioje kodo dalyje mes siunčiame komandas į 16 * 2 lcd ekraną. Komanda nukopijuojama į 8051 mikrovaldiklio 0 prievadą. RS komandų rašymui yra mažai. RW yra žemas rašymo operacijai. Įjungimo (E) kaiščiui taikomas didelis arba mažas impulsas, kad būtų pradėta komandų rašymo operacija.
void cmdwrt (nepasirašyta char x) {P0 = x; rs = 0; rw = 0; lt = 1; vėlavimas (1); lt = 0; }
Šioje kodo dalyje duomenis siunčiame į 16 * 2 lcd ekraną. Duomenys nukopijuojami į 8051 mikrovaldiklio 0 prievadą. RS yra aukštas komandų rašymui. RW yra žemas rašymo operacijai. Įjungimo (E) kaiščiui taikomas didelis arba mažas impulsas, kad būtų galima pradėti rašyti duomenis.
void datawrt (nepasirašyta char y) {P0 = y; rs = 1; rw = 0; lt = 1; vėlavimas (1); lt = 0; }
Taip mes galime išmatuoti bet kokio signalo dažnį naudodami mikrovaldiklį 8051. Žemiau patikrinkite visą kodą ir demonstracinį vaizdo įrašą.