- Požadované komponenty:
- Kruhový diagram:
- Použití časovače 8051 pro měření frekvence:
- 555 Časovač jako zdroj frekvence:
- Pracovní a vysvětlení kódu:
Frekvence je definována jako počet cyklů za sekundu. Může být také definována jako převrácená hodnota celkového času 'T'. V tomto projektu budeme počítat počet impulzů vstupujících do portu 3,5 mikrokontroléru 8051 a zobrazovat jej na 16 * 2 LCD displeji. Takže v zásadě máme měření frekvence signálu na Portu 3,5 8051. Zde jsme použili čip AT89S52 8051 a pro generování vzorkovacího impulzu pro demonstraci se používá 555 IC v Astable módu. Dříve jsme pomocí Arduina sestavili čítač kmitočtů.
Požadované komponenty:
- 8051 mikrokontrolér (AT89S52)
- 16 * 2 LCD displej
- Zdroj frekvence (časovač 555)
- Potenciometr
- Připojovací vodiče
Kruhový diagram:
Použití časovače 8051 pro měření frekvence:
Mikrokontrolér 8051 je 8bitový mikrokontrolér, který má 128 bajtů paměti RAM na čipu, 4 bajty paměti ROM na čipu, dva časovače, jeden sériový port a čtyři 8bitové porty. Mikrokontrolér 8052 je rozšíření mikrokontroléru. Chcete-li nakonfigurovat port 3,5 jako čítač, jsou hodnoty registru TMOD nastaveny na 0x51. Níže uvedený obrázek ukazuje registr TMOD.
BRÁNA | C / T | M1 | M0 | BRÁNA | C / T | M1 | M2 |
ČASOVAČ 1 | ČASOVAČ 0 |
GATE - když je nastavena GATE, časovač nebo čítač je povolen pouze v případě, že pin INTx je HIGH a je nastaven ovládací pin TRx. Když je GATE vymazáno, časovač je povolen vždy, když je nastaven kontrolní bit TRx.
C / T - když C / T = 0, funguje jako časovač. Když C / T = 1, funguje jako Counter.
M1 a M0 označují provozní režim.
Pro TMOD = 0x51 je časovač 1 jako čítač a pracuje v režimu 1 (16 bitů).
16 * 2 LCD se používá k zobrazení frekvence signálu v Hz (Hz). Pokud jste u LCD 16x2 nováčkem, podívejte se zde na více pinů LCD 16x2 a jeho příkazů. Zkontrolujte také, jak propojit LCD s 8051.
555 Časovač jako zdroj frekvence:
Zdroj frekvence by měl produkovat obdélníkové vlny a maximální amplituda je omezena na 5V, protože porty mikrokontroléru 8051 nemohou zvládnout napětí větší než 5V. Maximální frekvence se může měřit, je 655,35 kHz z důvodu omezení paměti TH1 a TL1 registru (8bit každý). Za 100 milisekund TH1 a TL1 udrží až 65535 impulzů. Proto je maximální frekvence, kterou lze měřit, 65535 * 10 = 655,35 KHz.
V tomto projektu 8051 Frequency Meter používám časovač 555 v astabilním režimu k výrobě obdélníkových vln s proměnnou frekvencí. Frekvenci signálu generovaného 555 IC lze měnit nastavením potenciometru, jak je ukázáno ve videu uvedeném na konci tohoto projektu.
V tomto projektu počítá Timer1 (T1) počet impulzů vstupujících do portu 3,5 8051 mikrokontrolérů po dobu 100 milisekund. Hodnoty počtu budou uloženy v registrech TH1, respektive TL1. Ke kombinaci hodnot registru TH1 a TL1 se používá následující vzorec.
Impulzy = TH1 * (0x100) + TL1
Nyní bude mít „puls“ počet cyklů za 100 milisekund. Frekvence signálu je ale definována jako počet cyklů za sekundu. K převodu na frekvenci se používá níže uvedený vzorec.
Impulzy = Impulzy * 10
Pracovní a vysvětlení kódu:
Kompletní program v jazyce C pro tento měřič frekvence je uveden na konci tohoto projektu. Kód je rozdělen na malé smysluplné bloky a je vysvětleno níže.
Pro rozhraní 16 * 2 LCD s mikrokontrolérem 8051 musíme definovat piny, na kterých je 16 * 2 LCD připojeno k mikrokontroléru 8051. RS pin 16 * 2 lcd je připojen k P2.7, RW pin 16 * 2 lcd je připojen k P2.6 a E pin 16 * 2 lcd je připojen k P2.5. Datové piny jsou připojeny k portu 0 mikrokontroléru 8051.
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit en = P2 ^ 5;
Dále musíme definovat některé funkce, které se v programu používají. Funkce zpoždění se používá k vytvoření zadaného časového zpoždění. Funkce Cmdwrt se používá k odesílání příkazů na 16 * 2 LCD displej. funkce datawrt se používá k odesílání dat na 16 * 2 LCD displej.
void delay (unsigned int); void cmdwrt (nepodepsaný znak); void datawrt (nepodepsaný znak);
V této části kódu zasíláme příkazy na 16 * 2 LCD. Příkazy, jako je jasné zobrazení, přírůstek kurzoru, vynucení kurzoru na začátek 1. řádku, se po určitém časovém zpoždění posílají po jednom na 16 * 2 LCD displej.
pro (i = 0; i <5; i ++) {cmdwrt (cmd); zpoždění (1); }
V této části kódu je časovač 1 konfigurován jako čítač a provozní režim je nastaven na režim 1.
Timer0 je nakonfigurován jako časovač a provozní režim je nastaven na režim 1. Časovač 1 se používá pro počítání počtu impulzů a časovač 0 se používá pro generování časového zpoždění. Hodnoty TH1 a TL1 jsou nastaveny na 0, aby bylo zajištěno, že počítání začíná od 0.
TMOD = 0x51; TL1 = 0; TH1 = 0;
V této části kódu je časovač spuštěn po dobu 100 milisekund. 100 milisekund zpoždění je generováno pomocí funkce zpoždění. TR1 = 1 je pro spuštění časovače a TR1 = 0 je pro zastavení časovače po 100 milisekundách.
TR1 = 1; zpoždění (100); TR1 = 0;
V této části kódu se kombinují hodnoty počtu přítomné v registrech TH1 a TL1 a poté se vynásobí 10, aby se získal celkový počet cyklů za 1 sekundu.
Impulzy = TH1 * (0x100) + TL1; Impulzy = impulsy * 10;
V této části kódu je hodnota frekvence převedena na jednotlivé bajty, aby bylo snadné zobrazení na displeji LCD 16 * 2.
d1 = pulsy% 10; s1 = pulsy 100%; s2 = pulsy% 1 000; s3 = impulsy% 10 000; s4 = impulsy% 100 000; d2 = (s1-d1) / 10; d3 = (s2-s1) / 100; d4 = (s3-s2) / 1000; d5 = (s4-s3) / 10 000; d6 = (pulsy-s4) / 100000;
V této části kódu jsou jednotlivé číslice hodnoty frekvence převedeny do formátu ASCII a jsou zobrazeny na 16 * 2 LCD displeji.
If (pulsy> = 100 000) datawrt (0x30 + d6); if (pulsy> = 10 000) datawrt (0x30 + d5); if (pulsy> = 1000) datawrt (0x30 + d4); if (pulsy> = 100) datawrt (0x30 + d3); if (pulsy> = 10) datawrt (0x30 + d2); datawrt (0x30 + d1);
V této části kódu zasíláme příkazy na 16 * 2 lcd displej. Příkaz je zkopírován na port 0 mikrokontroléru 8051. RS je nízké pro zápis příkazu. RW je pro operaci zápisu snížen. Na aktivaci (E) pinu je aplikován vysoký až nízký impuls pro spuštění operace zápisu příkazu.
void cmdwrt (unsigned char x) {P0 = x; rs = 0; rw = 0; en = 1; zpoždění (1); en = 0; }
V této části kódu zasíláme data na 16 * 2 LCD displej. Data se zkopírují na port 0 mikrokontroléru 8051. RS je vysoké pro zápis příkazů. RW je pro operaci zápisu snížen. Na aktivaci (E) pinu je aplikován vysoký až nízký impuls pro spuštění operace zápisu dat.
void datawrt (nepodepsané char y) {P0 = y; rs = 1; rw = 0; en = 1; zpoždění (1); en = 0; }
Takto můžeme měřit frekvenci jakéhokoli signálu pomocí mikrokontroléru 8051. Zkontrolujte celý kód a ukázkové video níže.