- Szükséges alkatrészek:
- Kördiagramm:
- A 8051-es TIMER használata a frekvencia méréséhez:
- 555 Időzítő frekvenciaforrásként:
- Munka és kód magyarázat:
A frekvencia a ciklusok száma másodpercenként. Meghatározható a „T” teljes idő reciprokaként is. Ebben a projektben megszámoljuk a 8051 mikrovezérlő 3.5-ös portjába belépő impulzusok számát, és megjelenítjük azt 16 * 2-es LCD kijelzőn. Tehát alapvetően a jel frekvenciáját a 8051 3.5 portjánál mérjük. Itt AT89S52 8051 chipet használtunk, és egy 555 IC-t használunk Astable módban a minta impulzusának előállításához demonstráció céljából. Korábban már építettünk frekvenciaszámlálót az Arduino segítségével.
Szükséges alkatrészek:
- 8051 mikrokontroller (AT89S52)
- 16 * 2 LCD kijelző
- Frekvenciaforrás (555 időzítő)
- Potenciométer
- Csatlakozó vezetékek
Kördiagramm:
A 8051-es TIMER használata a frekvencia méréséhez:
A 8051 mikrokontroller egy 8 bites mikrovezérlő, amely 128 bájt chip RAM-mal, 4K bájt chip ROM-on, két időzítővel, egy soros és négy 8 bites porttal rendelkezik. A 8052 mikrovezérlő a mikrovezérlő kiterjesztése. A 3.5-es port számlálóként történő konfigurálásához a TMOD regiszter értéke 0x51. Az alábbi ábra a TMOD regisztert mutatja.
KAPU | C / T | M1 | M0 | KAPU | C / T | M1 | M2 |
1. IDŐZÍTŐ | 0 IDŐZÍTŐ |
GATE - ha a GATE be van állítva, az időzítő vagy a számláló csak akkor engedélyezett, ha az INTx tű magas és TRx vezérlő csap van beállítva. A GATE törlésekor az időzítő engedélyezve van, amikor a TRx vezérlő bit BE van állítva.
C / T - amikor C / T = 0, időzítőként működik. Ha C / T = 1, akkor számlálóként működik.
Az M1 és M0 a működési módot jelzi.
TMOD = 0x51 esetén az 1. időzítő számlálóként működik, és az 1. módban (16 bites) működik.
16 * 2 LCD-vel a jel frekvenciáját jelenítik meg hercben (Hz). Ha Ön még nem ismeri a 16x2 LCD-t, itt többet tudhat meg a 16x2 LCD csapjairól és parancsairól. Ellenőrizze azt is, hogyan kell az LCD-t összekötni a 8051-gyel.
555 Időzítő frekvenciaforrásként:
A frekvenciaforrásnak négyzethullámokat kell produkálnia, és a maximális amplitúdó 5 V-ra korlátozódik, mert a 8051 mikrovezérlő portjai nem képesek kezelni az 5 V-nál nagyobb feszültséget. A maximálisan mérhető frekvencia 655,35 KHz a TH1 és a TL1 regiszter memória korlátozása miatt (egyenként 8bit). 100 milliszekundum alatt a TH1 és a TL1 legfeljebb 65535 számot képes megtartani. Ezért a maximálisan mérhető frekvencia 65535 * 10 = 655,35 KHz.
Ebben a 8051-es frekvenciamérő projektben 555 időzítőt használok Astable módban változó frekvenciájú négyzethullámok előállításához. Az 555 IC által generált jel frekvenciája a potenciométer beállításával változtatható, amint azt a projekt végén megadott videó mutatja.
Ebben a projektben a Timer1 (T1) 100 milliszekundumig számolja a 8051 mikrovezérlő 3.5 portjába belépő impulzusok számát. A számlálási értékeket a TH1, illetve a TL1 regiszterek tárolják. A TH1 és a TL1 regiszter értékeinek kombinálásához az alábbi képletet használjuk.
Impulzusok = TH1 * (0x100) + TL1
Most a „pulzusnak” 100 milliszekundumban lesz ciklusszáma. De a jel frekvenciája a ciklusok száma másodpercenként. A frekvenciává alakításához az alábbi képletet használjuk.
Impulzusok = impulzusok * 10
Munka és kód magyarázat:
A frekvenciamérő teljes C programja a projekt végén található. A kódot apró, értelmes darabokra osztják, és az alábbiakban elmagyarázzák.
A 16 * 2 LCD interfészhez a 8051 mikrovezérlővel meg kell határoznunk azokat a csapokat, amelyeken 16 * 2 lcd van csatlakoztatva a 8051 mikrovezérlőhöz. 16 * 2 lcd-s RS tű csatlakozik a P2.7-hez, az RW 16 * 2 lcd-s csatlakozó csatlakozik a P2.6-hoz, és az E-tű 16 * 2 lcd-t a P2.5-hez. Az adatcsapok a 8051 mikrokontroller 0. portjához vannak csatlakoztatva.
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit en = P2 ^ 5;
Ezután meg kell határoznunk néhány programban használt funkciót. A késleltetés funkció a megadott késleltetés létrehozására szolgál. A Cmdwrt funkció segítségével parancsokat küldhetünk 16 * 2 lcd kijelzőre. A datawrt funkció az adatok 16 * 2 lcd kijelzőre történő elküldésére szolgál.
void delay (aláíratlan int); void cmdwrt (aláíratlan karakter); void datawrt (aláíratlan karakter);
A kód ezen részében 16 * 2 lcd-re küldünk parancsokat. Az olyan parancsok, mint a tiszta kijelzés, a növekményes kurzor, a kurzor kényszerítése az 1. sor elejére, bizonyos meghatározott késleltetés után egyesével 16 * 2 lcd kijelzőre kerülnek.
for (i = 0; i <5; i ++) {cmdwrt (cmd); késés (1); }
A kód ezen részében az időzítő1 számlálóként van konfigurálva, és a működési mód 1-es módra van állítva.
A Timer0 időzítőként van konfigurálva, és a működési mód 1-es módra van állítva. Az 1. időzítőt az impulzusok számolásához, a 0 időzítőt pedig az idő késleltetéséhez kell használni. A TH1 és a TL1 értékeket 0-ra állítjuk, hogy a számlálás 0-tól kezdődjön.
TMOD = 0x51; TL1 = 0; TH1 = 0;
A kód ezen részében az időzítő 100 milliszekundumig fut. 100 milliszekundum késést generálunk a késleltetési funkció használatával. TR1 = 1 az időzítő indításához, TR1 = 0 pedig az időzítő leállításához 100 milliszekundum után.
TR1 = 1; késés (100); TR1 = 0;
A kód ezen részében a TH1 és TL1 regiszterekben lévő számlálási értékeket egyesítjük, majd megszorozzuk 10-vel, hogy 1 másodperc alatt megkapjuk a ciklusok teljes számát.
Impulzusok = TH1 * (0x100) + TL1; Impulzusok = impulzusok * 10;
A kód ezen részében a frekvenciaértéket egy bájtokká alakítják át, hogy megkönnyítsék a 16 * 2 lcd-s kijelzőn való megjelenítést.
d1 = impulzusok% 10; s1 = impulzus% 100; s2 = impulzus% 1000; s3 = impulzus% 10000; s4 = impulzus% 100000; d2 = (s1-d1) / 10; d3 = (s2-s1) / 100; d4 = (s3-s2) / 1000; d5 = (s4-s3) / 10000; d6 = (impulzus-s4) / 100000;
A kód ezen részében a frekvenciaérték egyes számjegyei ASCII formátumra konvertálódnak, és a 16 * 2 lcd kijelzőn jelennek meg.
If (impulzusok> = 100000) datawrt (0x30 + d6); if (impulzusok> = 10000) datawrt (0x30 + d5); if (impulzusok> = 1000) datawrt (0x30 + d4); if (impulzusok> = 100) datawrt (0x30 + d3); if (impulzusok> = 10) datawrt (0x30 + d2); datawrt (0x30 + d1);
A kód ezen részében parancsokat küldünk 16 * 2 lcd kijelzőre. A parancs átmásolódik a 8051 mikrokontroller 0. portjába. Az RS alacsony a parancsíráshoz. Az RW alacsony az írási műveletekhez. Magas vagy alacsony impulzus van érvényben az engedélyező (E) csapon a parancsírási művelet elindításához.
void cmdwrt (előjel nélküli karakter x) {P0 = x; rs = 0; rw = 0; en = 1; késés (1); en = 0; }
A kód ezen részében 16 * 2 lcd kijelzőre küldünk adatokat. Az adatokat a 8051 mikrokontroller 0. portjára másoljuk. Az RS magasra van állítva a parancsíráshoz. Az RW alacsony az írási műveletekhez. Az engedélyezési (E) csapon az alacsony vagy magas impulzus van érvényben az adatírás megkezdéséhez.
void datawrt (aláíratlan karakter y) {P0 = y; rs = 1; rw = 0; en = 1; késés (1); en = 0; }
Így tudjuk megmérni bármely jel frekvenciáját a 8051 mikrokontroller segítségével. Ellenőrizze az alábbi teljes kódot és bemutató videót.