- Potrebne komponente:
- Kružni dijagram:
- Korištenje TIMERA od 8051 za mjerenje frekvencije:
- 555 Tajmer kao izvor frekvencije:
- Objašnjenje rada i koda:
Učestalost je definirana kao broj ciklusa u sekundi. Također se može definirati kao recipročno od ukupnog vremena 'T'. U ovom ćemo projektu izbrojiti broj impulsa koji ulaze u priključak 3.5 mikrokontrolera 8051 i prikazati ga na 16 * 2 LCD zaslonu. Dakle, u osnovi imamo mjerenje frekvencije signala na priključku 3.5 od 8051. Ovdje smo koristili čip AT89S52 8051, a 555 IC se koristi u načinu Astable za generiranje uzorka impulsa za demonstraciju. Prethodno smo izgradili brojač frekvencija koristeći Arduino.
Potrebne komponente:
- 8051 mikrokontroler (AT89S52)
- LCD zaslon od 16 * 2
- Izvor frekvencije (555 Timer)
- Potenciometar
- Spajanje žica
Kružni dijagram:


Korištenje TIMERA od 8051 za mjerenje frekvencije:
8051 mikrokontroler je 8-bitni mikrokontroler koji ima 128 bajta čip RAM-a, 4K bajta čip ROM-a, dva tajmera, jedan serijski port i četiri 8-bitna porta. 8052 mikrokontroler je produžetak mikrokontrolera. Da bi se port 3.5 konfigurirao kao brojač, vrijednosti registra TMOD postavljene su na 0x51. Ispod slike prikazan je TMOD registar.
| KAPIJA | C / T | M1 | M0 | KAPIJA | C / T | M1 | M2 |
| TIMER 1 | TIMER 0 |
GATE - kada je postavljeno GATE, tajmer ili brojač je omogućen samo kada je INTx pin VISOK i ako je postavljen TRx kontrolni pin. Kad se obriše GATE, tajmer se aktivira kad god je postavljen kontrolni bit TRx.
C / T - kada je C / T = 0, djeluje kao mjerač vremena. Kada je C / T = 1, djeluje kao brojač.
M1 i M0 označavaju način rada.
Za TMOD = 0x51, timer1 djeluje kao brojač i radi u načinu rada1 (16bit).
LCD 16 * 2 koristi se za prikaz frekvencije signala u hercima (Hz). Ako ste novi u LCD-u 16x2, ovdje pogledajte više o pinovima LCD-a 16x2 i njegovim naredbama. Također provjerite kako povezati LCD s 8051.
555 Tajmer kao izvor frekvencije:
Izvor frekvencije trebao bi stvarati kvadratne valove, a maksimalna amplituda ograničena je na 5V, jer priključci 8051 mikrokontrolera ne mogu podnijeti napon veći od 5V. Maksimalna frekvencija može mjeriti je 655,35 KHz zbog memorije ograničenja PH1 i TL1 registar (8bit svaki). U 100 milisekundi, TH1 i TL1 mogu zadržati do 65535 brojanja. Stoga je maksimalna frekvencija koja se može izmjeriti 65535 * 10 = 655,35 KHz.
U ovom projektu 8051 frekvencijskog mjerača koristim 555 timera u nestalnom načinu rada za stvaranje kvadratnih valova promjenjive frekvencije. Učestalost signala generiranog od 555 IC, može se mijenjati podešavanjem potenciometra kao što je prikazano u videu danom na kraju ovog projekta.
U ovom projektu, Timer1 (T1) broji broj impulsa koji ulaze u priključak 3.5 od 8051 mikrokontrolera tijekom 100 milisekundi. Vrijednosti brojanja pohranit će se u registre TH1 i TL1. Za kombiniranje vrijednosti registra TH1 i TL1 koristi se donja formula.
Impulsi = TH1 * (0x100) + TL1
Sada će 'puls' imati broj ciklusa u 100 milisekundi. Ali frekvencija signala definirana je kao broj ciklusa u sekundi. Da bi se pretvorio u frekvenciju, koristi se donja formula.
Impulsi = Impulsi * 10
Objašnjenje rada i koda:
Kompletan C program za ovaj mjerač frekvencije daje na kraju ovog projekta. Kôd je podijeljen na male značajne dijelove i objašnjen u nastavku.
Za 16 * 2 LCD povezivanje s 8051 mikrokontrolerom, moramo definirati igle na kojima je 16 * 2 lcd povezan s 8051 mikrokontrolerom. RS pin od 16 * 2 lcd spojen je na P2.7, RW pin od 16 * 2 lcd spojen je na P2.6, a E pin od 16 * 2 lcd je spojen na P2.5. Priključci za podatke povezani su na priključak 0 mikrokontrolera 8051.
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit en = P2 ^ 5;
Dalje moramo definirati neke funkcije koje se koriste u programu. Funkcija odgode koristi se za stvaranje određenog vremenskog kašnjenja. Funkcija Cmdwrt koristi se za slanje naredbi na LCD zaslon 16 * 2. datawrt funkcija koristi se za slanje podataka na 16 * 2 lcd zaslon.
odgoda praznine (nepotpisan int); void cmdwrt (nepotpisani znak); void datawrt (nepotpisani znak);
U ovom dijelu koda šaljemo naredbe na 16 * 2 lcd. Naredbe kao što su jasan prikaz, prirasta pokazivača, prisiliti kursor na početak 1. st linije su poslane na 16 * 2 LCD zaslon jednog po jednog nakon nekog određenog vremena kašnjenja.
za (i = 0; i <5; i ++) {cmdwrt (cmd); kašnjenje (1); }
U ovom dijelu koda, timer1 je konfiguriran kao brojač, a način rada postavljen je na način 1.
Timer0 je konfiguriran kao timer, a način rada postavljen je na način 1. Tajmer 1 koristi se za brojanje broja impulsa, a tajmer 0 koristi se za generiranje vremenskog kašnjenja. Vrijednosti TH1 i TL1 postavljene su na 0, kako bi se osiguralo da brojanje počinje od 0.
TMOD = 0x51; TL1 = 0; TH1 = 0;
U ovom dijelu koda, tajmer je pokrenut 100 milisekundi. Funkcija odgode generira 100 milisekundi kašnjenja. TR1 = 1 je za pokretanje timera, a TR1 = 0 za zaustavljanje timera nakon 100 milisekundi.
TR1 = 1; kašnjenje (100); TR1 = 0;
U ovom dijelu koda kombiniraju se vrijednosti brojanja prisutne u registrima TH1 i TL1, a zatim se množi s 10 da bi se dobio ukupni broj ciklusa u 1 sekundi.
Impulsi = TH1 * (0x100) + TL1; Pulsi = impulsi * 10;
U ovom dijelu koda vrijednost frekvencije pretvara se u pojedinačne bajtove kako bi se olakšalo prikazivanje na LCD zaslonu od 16 * 2.
d1 = impulsi% 10; s1 = impulsi% 100; s2 = impulsi% 1000; s3 = impulsi% 10000; s4 = impulsi% 100000; d2 = (s1-d1) / 10; d3 = (s2-s1) / 100; d4 = (s3-s2) / 1000; d5 = (s4-s3) / 10000; d6 = (impulsi-s4) / 100000;
U ovom dijelu koda pojedinačne znamenke vrijednosti frekvencije pretvaraju se u ASCII format i prikazuju se na 16 * 2 lcd zaslonu.
Ako (impulsi> = 100000) datawrt (0x30 + d6); if (impulsi> = 10000) datawrt (0x30 + d5); if (impulsi> = 1000) datawrt (0x30 + d4); if (impulsi> = 100) datawrt (0x30 + d3); ako (impulsi> = 10) datawrt (0x30 + d2); datawrt (0x30 + d1);
U ovom dijelu koda šaljemo naredbe na LCD zaslon 16 * 2. Naredba se kopira na port 0 mikrokontrolera 8051. RS je smanjen za pisanje naredbi. RW je smanjen za operaciju pisanja. Puls visokog do niskog stupnja primjenjuje se na osovinici za omogućivanje (E) za pokretanje operacije pisanja naredbe.
praznina cmdwrt (nepotpisani char x) {P0 = x; rs = 0; rw = 0; en = 1; kašnjenje (1); en = 0; }
U ovom dijelu koda šaljemo podatke na LCD zaslon 16 * 2. Podaci se kopiraju na port 0 mikrokontrolera 8051. RS je visok za pisanje naredbi. RW je smanjen za operaciju pisanja. Puls visokog do niskog stupnja primjenjuje se na osovinici za omogućivanje (E) za pokretanje postupka upisivanja podataka.
void datawrt (nepotpisani znak y) {P0 = y; rs = 1; rw = 0; en = 1; kašnjenje (1); en = 0; }

Tako možemo izmjeriti frekvenciju bilo kojeg signala pomoću mikrokontrolera 8051. Potpuno provjerite kôd i demo video u nastavku.
