- Potrebne komponente:
- Shema vezja:
- Uporaba TIMER-ja 8051 za merjenje frekvence:
- 555 Časovnik kot vir frekvence:
- Pojasnilo o delu in kodi:
Frekvenca je definirana kot število ciklov na sekundo. Lahko ga definiramo tudi kot vzajemnost celotnega časa „T“. V tem projektu bomo prešteli število impulzov, ki vstopajo v vrata 3.5 mikrokrmilnika 8051 in ga prikazali na 16 * 2 LCD zaslonu. Torej v osnovi merimo frekvenco signala na priključku 3.5 od 8051. Tu smo uporabili čip AT89S52 8051, 555 IC pa je v načinu Astable uporabljen za generiranje vzorčnega impulza za predstavitev. Pred tem smo že izdelali števec frekvenc z uporabo Arduina.
Potrebne komponente:
- 8051 mikrokrmilnik (AT89S52)
- 16 * 2 LCD zaslon
- Vir frekvence (555 časovnik)
- Potenciometer
- Priključne žice
Shema vezja:
Uporaba TIMER-ja 8051 za merjenje frekvence:
8051 mikrokrmilnik je 8-bitni mikrokrmilnik, ki ima 128 bajtov čipov RAM-a, 4K bajtov čipa ROM, dva časovnika, eno serijsko vrata in štiri 8-bitna vrata. 8052 mikrokrmilnik je podaljšek mikrokrmilnika. Za nastavitev vrat 3.5 kot števca so vrednosti registra TMOD nastavljene na 0x51. Spodnja slika prikazuje register TMOD.
VRATA | C / T | M1 | M0 | VRATA | C / T | M1 | M2 |
ČASOMER 1 | ČASOMER 0 |
GATE - ko je nastavljen GATE, je časovnik ali števec omogočen le, če je zatič INTx VISOK in je nastavljen nadzorni zatič TRx. Ko je GATE izbrisan, je časovnik omogočen vsakič, ko je TRx nadzorni bit nastavljen.
C / T - kadar je C / T = 0, deluje kot časovnik. Ko je C / T = 1, deluje kot števec.
M1 in M0 označujeta način delovanja.
Pri TMOD = 0x51 timer1 deluje kot števec in deluje v načinu1 (16 bitov).
16 * 2 LCD se uporablja za prikaz frekvence signala v hercih (Hz). Če ste nov pri LCD-ju 16x2, si oglejte več o 16-palčnih zatičih LCD-ja in njegovih ukazih tukaj. Preverite tudi, kako povezati LCD z 8051.
555 Časovnik kot vir frekvence:
Vir frekvence mora proizvajati kvadratne valove, največja amplituda pa je omejena na 5V, ker vrata mikrokrmilnika 8051 ne morejo obvladati napetosti, večje od 5V. Frekvenca največja je mogoče izmeriti, je 655,35 KHz zaradi omejitev spomina TH1 in CS1 register (8bit vsak). V 100 milisekundah lahko TH1 in TL1 shranita do 65535 števcev. Zato je največja frekvenca, ki jo je mogoče izmeriti, 65535 * 10 = 655,35 KHz.
V tem projektu frekvenčnega merilnika 8051 uporabljam 555 časovnik v nestabilnem načinu za ustvarjanje kvadratnih valov s spremenljivo frekvenco. Frekvenco signala, ki ga generira 555 IC, lahko spreminjate s prilagajanjem potenciometra, kot je prikazano v videu na koncu tega projekta.
V tem projektu Timer1 (T1) za 100 milisekund šteje število impulzov, ki vstopajo v vrata 3.5 mikrokrmilnikov 8051. Vrednosti štetja bodo shranjene v registrih TH1 oziroma TL1. Za kombiniranje vrednosti registra TH1 in TL1 se uporablja spodnja formula.
Impulzi = TH1 * (0x100) + TL1
Zdaj bo 'impulz' imel število ciklov v 100 milisekundah. Toda frekvenca signala je definirana kot število ciklov na sekundo. Za pretvorbo v frekvenco se uporablja spodnja formula.
Utripi = Utripi * 10
Pojasnilo o delu in kodi:
Celoten program C za to frekvenco se Meter so na koncu tega projekta. Koda je razdeljena na majhne pomembne koščke in je razložena spodaj.
Za povezavo LCD 16 * 2 z mikrokrmilnikom 8051 moramo določiti nožice, na katere je 16 * 2 lcd priključen na mikrokrmilnik 8051. RS pin 16 * 2 lcd je povezan s P2.7, RW pin 16 * 2 lcd je povezan s P2.6 in E pin 16 * 2 lcd je povezan s P2.5. Podatkovni zatiči so povezani na vrata 0 mikrokrmilnika 8051.
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit en = P2 ^ 5;
Nato moramo definirati nekatere funkcije, ki se uporabljajo v programu. Funkcija zakasnitve se uporablja za ustvarjanje določene časovne zakasnitve. Funkcija Cmdwrt se uporablja za pošiljanje ukazov na 16 * 2 lcd zaslon. funkcija datawrt se uporablja za pošiljanje podatkov na 16 * 2 lcd zaslon.
zamuda pred praznino (nepodpisan int); void cmdwrt (nepodpisani znak); void datawrt (nepodpisani znak);
V tem delu kode pošiljamo ukaze na 16 * 2 lcd. Ukazi, kot so jasen prikaz, prirastek kurzorja, prisili kazalko na začetek prve vrstice, se po določenem časovnem zamiku pošljejo na zaslon 16 * 2 lcd enega za drugim.
za (i = 0; i <5; i ++) {cmdwrt (cmd); zamuda (1); }
V tem delu kode je timer1 konfiguriran kot števec in način delovanja je nastavljen na način 1.
Timer0 je nastavljen kot timer in način delovanja je nastavljen na način 1. Časovnik 1 se uporablja za štetje števila impulzov, časovnik 0 pa za generiranje časovne zakasnitve. Vrednosti TH1 in TL1 so nastavljene na 0, da se zagotovi, da se štetje začne od 0.
TMOD = 0x51; TL1 = 0; TH1 = 0;
V tem delu kode je časovnik nastavljen tako, da deluje 100 milisekund. Z uporabo funkcije zakasnitve se ustvari 100 milisekund zakasnitve. TR1 = 1 je za zagon časovnika, TR1 = 0 pa za zaustavitev časovnika po 100 milisekundah.
TR1 = 1; zamuda (100); TR1 = 0;
V tem delu kode se vrednosti štetja, prisotne v registrih TH1 in TL1, združijo in nato pomnožijo z 10, da se v 1 sekundi dobi skupno število ciklov.
Impulzi = TH1 * (0x100) + TL1; Utripi = impulzi * 10;
V tem delu kode se vrednost frekvence pretvori v enojne bajte, da je enostavnejša za prikaz na 16 * 2 lcd zaslonu.
d1 = impulzi% 10; s1 = impulzi% 100; s2 = impulzi% 1000; s3 = impulzi% 10000; s4 = impulzi% 100000; d2 = (s1-d1) / 10; d3 = (s2-s1) / 100; d4 = (s3-s2) / 1000; d5 = (s4-s3) / 10000; d6 = (impulzi-s4) / 100000;
V tem delu kode se posamezne številke vrednosti frekvence pretvorijo v format ASCII in se prikažejo na 16 * 2 lcd zaslonu.
Če (impulzi> = 100000) datawrt (0x30 + d6); if (impulzi> = 10000) datawrt (0x30 + d5); if (impulzi> = 1000) datawrt (0x30 + d4); if (impulzi> = 100) datawrt (0x30 + d3); if (impulzi> = 10) datawrt (0x30 + d2); datawrt (0x30 + d1);
V tem delu kode pošiljamo ukaze na 16 * 2 lcd zaslon. Ukaz se kopira v vrata 0 mikrokrmilnika 8051. RS je za pisanje ukazov nizka. RW je nizka za pisanje. Visoki do nizki impulz se uporabi na zatiču (E) za zagon operacije pisanja ukaza.
void cmdwrt (nepodpisani znak x) {P0 = x; rs = 0; rw = 0; en = 1; zamuda (1); en = 0; }
V tem delu kode podatke pošiljamo na 16 * 2 lcd zaslon. Podatki se kopirajo v vrata 0 mikrokrmilnika 8051. RS je visok za pisanje ukazov. RW je nizka za pisanje. Visoki do nizki impulz se uporabi na zatiču (E) za zagon operacije zapisovanja podatkov.
void datawrt (nepodpisani znak y) {P0 = y; rs = 1; rw = 0; en = 1; zamuda (1); en = 0; }
Tako lahko z mikrokrmilnikom 8051 izmerimo frekvenco katerega koli signala. Spodaj preverite celotno kodo in predstavitveni video.