- Požadované komponenty:
- Schéma zapojenia:
- Používanie TIMERU 8051 na meranie frekvencie:
- 555 Časovač ako zdroj frekvencie:
- Vysvetlenie práce a kódu:
Frekvencia je definovaná ako počet cyklov za sekundu. Môže byť tiež definovaný ako recipročný k celkovému času „T“. V tomto projekte spočítame počet impulzov vstupujúcich do portu 3,5 mikrokontroléra 8051 a zobrazíme ich na 16 * 2 LCD displeji. Takže v zásade máme meranie frekvencie signálu na porte 3.5 8051. Tu sme použili čip AT89S52 8051 a na generovanie vzorkovacieho impulzu na demonštráciu sa používa 555 IC v Astabilnom režime. Predtým sme vytvorili čítač kmitočtov pomocou Arduina.
Požadované komponenty:
- Mikrokontrolér 8051 (AT89S52)
- 16 * 2 LCD displej
- Zdroj frekvencie (časovač 555)
- Potenciometer
- Pripojovacie vodiče
Schéma zapojenia:
Používanie TIMERU 8051 na meranie frekvencie:
Mikrokontrolér 8051 je 8-bitový mikrokontrolér, ktorý má 128 bajtov na čipovej RAM, 4K bajtov na čipovej ROM, dva časovače, jeden sériový port a štyri 8bitové porty. Mikrokontrolér 8052 je rozšírením mikrokontroléra. Ak chcete nakonfigurovať port 3.5 ako počítadlo, hodnoty registra TMOD sú nastavené na 0x51. Na nasledujúcom obrázku je zobrazený register TMOD.
BRÁNA | C / T | M1 | M0 | BRÁNA | C / T | M1 | M2 |
ČASOVAČ 1 | ČASOVAČ 0 |
GATE - keď je nastavená GATE, časovač alebo počítadlo je povolené iba vtedy, keď je pin INTx HIGH a je nastavený ovládací pin TRx. Keď je GATE vymazané, časovač je povolený vždy, keď je nastavený riadiaci bit TRx.
C / T - keď C / T = 0, funguje ako časovač. Keď C / T = 1, funguje ako počítadlo.
M1 a M0 označujú prevádzkový režim.
Pre TMOD = 0x51 slúži časovač1 ako počítadlo a pracuje v režime 1 (16 bitov).
16 * 2 LCD sa používa na zobrazenie frekvencie signálu v Hz (Hz). Ak ste s displejom 16x2 LCD nováčikom, pozrite si tu viac informácií o pinoch LCD 16x2 a jeho príkazoch. Skontrolujte tiež, ako prepojiť LCD s 8051.
555 Časovač ako zdroj frekvencie:
Zdroj frekvencie by mal produkovať štvorcové vlny a maximálna amplitúda je obmedzená na 5 V, pretože porty mikrokontroléra 8051 nezvládajú napätie väčšie ako 5V. Maximálna frekvencia sa môže merať, je 655,35 kHz z dôvodu obmedzenia pamäti TH1 a TL1 registra (8bit každý). Za 100 milisekúnd môžu TH1 a TL1 zaznamenať až 65 535 impulzov. Maximálna frekvencia, ktorá sa dá merať, je preto 65535 * 10 = 655,35 KHz.
V tomto projekte 8051 Frequency Meter používam časovač 555 v nestabilnom režime na výrobu štvorcových vĺn s variabilnou frekvenciou. Frekvencia signálu generovaného 555 IC sa môže meniť úpravou potenciometra, ako je demonštrované na videu uvedenom na konci tohto projektu.
V tomto projekte počíta Timer1 (T1) počet impulzov vstupujúcich do portu 3,5 8051 mikrokontrolérov po dobu 100 milisekúnd. Hodnoty počtu budú uložené v registroch TH1, respektíve TL1. Na kombináciu hodnôt registra TH1 a TL1 sa používa nasledujúci vzorec.
Impulzy = TH1 * (0x100) + TL1
Teraz bude mať „impulz“ počet cyklov za 100 milisekúnd. Frekvencia signálu je ale definovaná ako počet cyklov za sekundu. Na jeho prevod na frekvenciu sa používa nasledujúci vzorec.
Impulzy = Impulzy * 10
Vysvetlenie práce a kódu:
Kompletný program v jazyku C pre tento merač frekvencie je uvedený na konci tohto projektu. Kód je rozdelený na malé zmysluplné bloky a je vysvetlený nižšie.
Pre rozhranie 16 * 2 LCD s mikrokontrolérom 8051 musíme definovať kolíky, na ktorých je 16 * 2 lcd pripojený k mikrokontroléru 8051. RS pin 16 * 2 lcd je pripojený k P2.7, RW pin 16 * 2 lcd je pripojený k P2.6 a E pin 16 * 2 lcd je pripojený k P2.5. Dátové piny sú pripojené k portu 0 mikrokontroléra 8051.
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit en = P2 ^ 5;
Ďalej musíme definovať niektoré funkcie, ktoré sa v programe používajú. Funkcia Delay sa používa na vytvorenie zadaného časového oneskorenia. Funkcia Cmdwrt sa používa na zasielanie príkazov na 16 * 2 LCD displej. funkcia datawrt sa používa na zasielanie dát na 16 * 2 lcd displej.
neplatnosť oneskorenia (unsigned int); void cmdwrt (nepodpísaný znak); void datawrt (nepodpísaný znak);
V tejto časti kódu zasielame príkazy na 16 * 2 lcd. Príkazy, ako je jasný displej, prírastok kurzora vynútiť kurzor na začiatok 1 prvom riadku sú odosielané do 16 * 2 LCD displej jeden po druhom po určitej zadanej časovej odmlke.
pre (i = 0; i <5; i ++) {cmdwrt (cmd); oneskorenie (1); }
V tejto časti kódu je časovač1 nakonfigurovaný ako počítadlo a prevádzkový režim je nastavený na režim 1.
Timer0 je nakonfigurovaný ako časovač a prevádzkový režim je nastavený na režim 1. Časovač 1 sa používa na počítanie počtu impulzov a časovač 0 sa používa na generovanie časového oneskorenia. Hodnoty TH1 a TL1 sú nastavené na 0, aby sa zabezpečilo, že počítanie začína od 0.
TMOD = 0x51; TL1 = 0; TH1 = 0;
V tejto časti kódu je spustený časovač po dobu 100 milisekúnd. Pomocou funkcie oneskorenia sa generuje 100 milisekúnd oneskorenia. TR1 = 1 slúži na spustenie časovača a TR1 = 0 je na zastavenie časovača po 100 milisekundách.
TR1 = 1; oneskorenie (100); TR1 = 0;
V tejto časti kódu sa kombinujú hodnoty počtu prítomné v registroch TH1 a TL1 a potom sa vynásobia číslom 10, aby sa získal celkový počet cyklov za 1 sekundu.
Impulzy = TH1 * (0x100) + TL1; Impulzy = impulzy * 10;
V tejto časti kódu sa hodnota frekvencie prevádza na jednotlivé bajty, aby sa uľahčilo jej zobrazovanie na displeji LCD 16 * 2.
d1 = impulzy% 10; s1 = impulzy 100%; s2 = impulzy% 1 000; s3 = impulzy% 10 000; s4 = impulzy% 100000; d2 = (s1-dl) / 10; d3 = (s2-s1) / 100; d4 = (s3-s2) / 1000; d5 = (s4-s3) / 10 000; d6 = (impulzy-s4) / 100000;
V tejto časti kódu sú jednotlivé číslice hodnoty frekvencie prevedené do formátu ASCII a sú zobrazené na displeji LCD 16 * 2.
If (impulzy> = 100 000) datawrt (0x30 + d6); if (impulzy> = 10 000) datawrt (0x30 + d5); if (impulzy> = 1000) datawrt (0x30 + d4); if (impulzy> = 100) datawrt (0x30 + d3); if (pulzy> = 10) datawrt (0x30 + d2); datawrt (0x30 + d1);
V tejto časti kódu zasielame príkazy na 16 * 2 lcd displej. Príkaz sa skopíruje na port 0 mikrokontroléra 8051. RS je nízka pre zápis príkazu. RW je nastavený na nízku hodnotu pre operáciu zápisu. Na aktiváciu (E) pinu sa použije vysoký až nízky impulz na spustenie operácie zápisu príkazu.
void cmdwrt (nepodpísaný znak x) {P0 = x; rs = 0; rw = 0; en = 1; oneskorenie (1); en = 0; }
V tejto časti kódu zasielame údaje na 16 * 2 lcd displej. Dáta sa skopírujú na port 0 mikrokontroléra 8051. RS je vysoko pre zápis príkazov. RW je nastavený na nízku hodnotu pre operáciu zápisu. Na zapnutie (E) pinu sa použije vysoký až nízky impulz na spustenie operácie zápisu údajov.
void datawrt (nepodpísané char y) {P0 = y; rs = 1; rw = 0; en = 1; oneskorenie (1); en = 0; }
Takto môžeme merať frekvenciu ľubovoľného signálu pomocou mikrokontroléra 8051. Celý kód a ukážkové video nájdete nižšie.