- Nødvendige komponenter:
- Kredsløbsdiagram:
- Brug af TIMER af 8051 til måling af frekvens:
- 555 Timer som frekvens kilde:
- Arbejds- og kodeforklaring:
Frekvens defineres som antal cyklusser pr. Sekund. Det kan også defineres som gensidig af den samlede tid 'T'. I dette projekt tæller vi antallet af impulser, der kommer ind i port 3.5 af 8051 mikrokontroller og viser det på 16 * 2 LCD-skærm. Så grundlæggende måler vi frekvensen af signalet i Port 3.5 af 8051. Her har vi brugt AT89S52 8051-chip, og en 555 IC bruges i Astable-tilstand til at generere prøveimpulsen til demonstration. Vi har tidligere bygget Frekvens tæller ved hjælp af Arduino.
Nødvendige komponenter:
- 8051 mikrokontroller (AT89S52)
- 16 * 2 LCD-skærm
- Frekvens kilde (555 timer)
- Potentiometer
- Tilslutning af ledninger
Kredsløbsdiagram:
Brug af TIMER af 8051 til måling af frekvens:
8051 microcontroller er en 8 bit microcontroller, der har 128 byte på RAM-chip, 4K byte på chip ROM, to timere, en seriel port og fire 8-bit-porte. 8052 microcontroller er en udvidelse af microcontroller. For at konfigurere port 3.5 som tæller er TMOD-registerværdier indstillet til 0x51. Nedenstående figur viser TMOD-registret.
PORT | C / T | M1 | M0 | PORT | C / T | M1 | M2 |
TIMER 1 | TIMER 0 |
GATE - når GATE er indstillet, aktiveres timeren eller tælleren kun, når INTx-stiften er HIGH, og TRx-kontrolstiften er indstillet. Når GATE er ryddet, aktiveres timeren, når TRx-kontrolbit er SET.
C / T - når C / T = 0, fungerer den som timer. Når C / T = 1, fungerer det som Counter.
M1 og M0 angiver driftsform.
For TMOD = 0x51 fungerer timer1 som tæller, og den fungerer i mode1 (16bit).
16 * 2 LCD bruges til at vise frekvensen af signalet i Hertz (Hz). Hvis du er ny på 16x2 LCD, skal du kontrollere mere om 16x2 LCD-ben og kommandoer her. Kontroller også, hvordan du bruger LCD-interface til 8051.
555 Timer som frekvens kilde:
Frekvenskilden skal producere firkantede bølger, og den maksimale amplitude er begrænset til 5V, fordi porte på 8051 mikrokontroller ikke kan håndtere spænding større end 5V. Den maksimale frekvens, den kan måle, er 655,35 KHz på grund af hukommelsesbegrænsning af TH1- og TL1-registret (8bit hver). På 100 millisekunder kan TH1 og TL1 rumme op til 65535 optællinger. Derfor er den maksimale frekvens, der kan måles, 65535 * 10 = 655,35 KHz.
I dette 8051-frekvensmålerprojekt bruger jeg 555 timer i astabel tilstand til at producere firkantede bølger med variabel frekvens. Frekvensen af signal genereret af 555 IC kan varieres ved at justere potentiometeret som vist i videoen, der er vist i slutningen af dette projekt.
I dette projekt tæller Timer1 (T1) antallet af impulser, der kommer ind i port 3.5 på 8051 mikrokontroller i 100 millisekunder. Tællingsværdierne gemmes i henholdsvis TH1- og TL1-registre. For at kombinere værdierne for TH1 og TL1-registeret anvendes nedenstående formel.
Impulser = TH1 * (0x100) + TL1
Nu vil 'pulsen' have antal cyklusser i 100 millisekunder. Men signalets frekvens er defineret som antal cyklusser pr. Sekund. For at konvertere det til frekvens anvendes nedenstående formel.
Pulser = Pulser * 10
Arbejds- og kodeforklaring:
Det komplette C-program for denne frekvensmåler er givet i slutningen af dette projekt. Koden er opdelt i små meningsfulde bidder og forklaret nedenfor.
Til 16 * 2 LCD-grænseflader med 8051 mikrokontroller skal vi definere ben, hvorpå 16 * 2 LCD er forbundet til 8051 mikrokontroller. RS-stift på 16 * 2 lcd er forbundet til P2.7, RW-stift på 16 * 2 lcd er forbundet til P2.6 og E-stift på 16 * 2 lcd er forbundet til P2.5. Datapinde er forbundet til port 0 på 8051 mikrokontroller.
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit en = P2 ^ 5;
Dernæst skal vi definere nogle funktioner, der bruges i programmet. Delay- funktion bruges til at oprette specificeret tidsforsinkelse. Cmdwrt- funktionen bruges til at sende kommandoer til 16 * 2 LCD-skærm. datawrt- funktion bruges til at sende data til 16 * 2 LCD-skærm.
ugyldig forsinkelse (usigneret int); ugyldigt cmdwrt (usigneret char); ugyldige datawrt (usigneret char);
I denne del af koden sender vi kommandoer til 16 * 2 lcd. Kommandoer såsom tydeligt display, tilvækst markør, tvinge markøren til begyndelsen af en st linje sendes til 16 * 2 lcd skærmen én efter én efter nogen specificerede tidsforsinkelse.
for (i = 0; i <5; i ++) {cmdwrt (cmd); forsinkelse (1); }
I denne del af koden er timer1 konfigureret som tæller, og driftstilstand er indstillet til tilstand 1.
Timer0 er konfigureret som timer og driftstilstand er indstillet til tilstand 1. Timer 1 bruges til at tælle antallet af impulser, og timer 0 bruges til at generere tidsforsinkelse. TH1- og TL1-værdier er indstillet til 0 for at sikre, at optællingen starter fra 0.
TMOD = 0x51; TL1 = 0; TH1 = 0;
I denne del af koden bringes timeren til at køre i 100 millisekunder. 100 millisekunder forsinkelse genereres ved hjælp af forsinkelsesfunktion. TR1 = 1 er til start af timeren og TR1 = 0 er til stop af timeren efter 100 millisekunder.
TR1 = 1; forsinkelse (100); TR1 = 0;
I denne del af koden kombineres tællingsværdierne i TH1- og TL1-registre, og derefter ganges det med 10 for at få det samlede antal cyklusser på 1 sekund.
Impulser = TH1 * (0x100) + TL1; Impulser = impulser * 10;
I denne del af koden konverteres frekvensværdien til enkeltbyte for at gøre det let at få vist på 16 * 2 LCD-skærm.
d1 = impulser% 10; s1 = impulser% 100; s2 = impulser% 1000; s3 = impulser% 10000; s4 = impulser% 100.000; d2 = (s1-d1) / 10; d3 = (s2-s1) / 100; d4 = (s3-s2) / 1000; d5 = (s4-s3) / 10000; d6 = (impulser-s4) / 100000;
I denne del af koden konverteres individuelle cifre af frekvensværdi til ASCII- format, og den vises på 16 * 2 LCD-display.
Hvis (impulser> = 100000) datawrt (0x30 + d6); hvis (impulser> = 10000) datawrt (0x30 + d5); hvis (impulser> = 1000) datawrt (0x30 + d4); hvis (impulser> = 100) datawrt (0x30 + d3); hvis (impulser> = 10) datawrt (0x30 + d2); datawrt (0x30 + d1);
I denne del af koden sender vi kommandoer til 16 * 2 LCD-skærm. Kommandoen kopieres til port 0 på 8051 mikrokontroller. RS laves lavt til kommandoskrivning. RW er lavt til skrivedrift. Høj til lav puls anvendes på aktiveringstasten (E) for at starte kommandoskrivning.
ugyldigt cmdwrt (usigneret char x) {P0 = x; rs = 0; rw = 0; en = 1; forsinkelse (1); en = 0; }
I denne del af koden sender vi data til 16 * 2 LCD-skærm. Dataene kopieres til port 0 på 8051 mikrokontroller. RS gøres højt til kommandoskrivning. RW er lavt til skrivedrift. Høj til lav puls anvendes på aktiveringstasten (E) for at starte dataskrivning.
ugyldige datawrt (usigneret char y) {P0 = y; rs = 1; rw = 0; en = 1; forsinkelse (1); en = 0; }
Sådan kan vi måle frekvensen af ethvert signal ved hjælp af 8051 Microcontroller. Tjek den fulde kode og demo-video nedenfor.