- Komponenter som krävs:
- Kretsschema:
- Använda TIMER av 8051 för att mäta frekvens:
- 555 Timer som frekvenskälla:
- Arbets- och kodförklaring:
Frekvens definieras som antal cykler per sekund. Det kan också definieras som ömsesidigt av total tid 'T'. I detta projekt kommer vi att räkna antalet pulser som går in i port 3.5 av 8051 mikrokontroller och visa den på 16 * 2 LCD-skärm. Så i princip har vi mätt frekvensen av signalen vid Port 3.5 av 8051. Här har vi använt AT89S52 8051-chip, och en 555 IC används i Astable-läge för att generera sampulsen för demonstration. Vi har tidigare byggt frekvensräknare med Arduino.
Komponenter som krävs:
- 8051 mikrokontroller (AT89S52)
- 16 * 2 LCD-skärm
- Frekvenskälla (555 timer)
- Potentiometer
- Anslutande ledningar
Kretsschema:
Använda TIMER av 8051 för att mäta frekvens:
8051 mikrokontroller är en 8-bitars mikrokontroller som har 128 byte på chip-RAM, 4K byte på chip-ROM, två timers, en seriell port och fyra 8bit-portar. 8052 mikrokontroller är en förlängning av mikrokontroller. För att konfigurera port 3.5 som räknare är TMOD-registervärden inställda på 0x51. Nedanstående figur visar TMOD-registret.
PORT | C / T | M1 | M0 | PORT | C / T | M1 | M2 |
TIMER 1 | TIMER 0 |
GATE - när GATE är inställt aktiveras timern eller räknaren endast när INTx-stiftet är HÖG och TRx-kontrollstiftet är inställt. När GATE rensas aktiveras timern när TRx-kontrollbit är INSTÄLLT.
C / T - när C / T = 0 fungerar den som timer. När C / T = 1 fungerar det som Counter.
M1 och M0 indikerar driftsätt.
För TMOD = 0x51 fungerar timer1 som räknare och fungerar i läge 1 (16 bitar).
16 * 2 LCD används för att visa frekvensen för signalen i Hertz (Hz). Om du är ny på 16x2 LCD kan du läsa mer om 16x2 LCD-stift och dess kommandon här. Kontrollera också hur man gränssnitt LCD med 8051.
555 Timer som frekvenskälla:
Frekvenskällan bör producera fyrkantiga vågor och den maximala amplituden är begränsad till 5V, eftersom 8051-mikroprocessorns portar inte kan hantera spänning större än 5V. Den maximala frekvensen den kan mäta är 655,35 KHz på grund av minnesbegränsning för TH1- och TL1-registret (8 bitars vardera). På 100 millisekunder kan TH1 och TL1 rymma upp till 65535 räkningar. Därför är den maximala frekvensen som kan mätas 65535 * 10 = 655,35 KHz.
I det här 8051-frekvensmätarprojektet använder jag 555 timer i ett stabilt läge för att producera fyrkantiga vågor med variabel frekvens. Frekvensen på signalen som genereras av 555 IC kan varieras genom att justera potentiometern som visas i videon som ges i slutet av detta projekt.
I detta projekt räknar Timer1 (T1) antalet pulser som kommer in i port 3.5 på 8051 mikrokontroller i 100 millisekunder. Räknevärdena kommer att lagras i TH1 respektive TL1-register. För att kombinera värdena för TH1- och TL1-registret används nedanstående formel.
Pulser = TH1 * (0x100) + TL1
Nu kommer "pulsen" att ha ett antal cykler på 100 millisekunder. Men signalens frekvens definieras som antal cykler per sekund. För att konvertera den till frekvens används nedanstående formel.
Pulser = Pulser * 10
Arbets- och kodförklaring:
Det kompletta C-programmet för denna frekvensmätare ges i slutet av detta projekt. Koden är uppdelad i små meningsfulla bitar och förklaras nedan.
För 16 * 2 LCD-gränssnitt med 8051 mikrokontroller måste vi definiera stift på vilka 16 * 2 LCD är ansluten till 8051 mikrokontroller. RS-stift på 16 * 2 lcd är ansluten till P2.7, RW-stift på 16 * 2 lcd är ansluten till P2.6 och E-stift på 16 * 2 lcd är ansluten till P2.5. Datapinnar är anslutna till port 0 på 8051 mikrokontroller.
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit en = P2 ^ 5;
Därefter måste vi definiera några funktioner som används i programmet. Fördröjningsfunktionen används för att skapa specificerad tidsfördröjning. Cmdwrt- funktionen används för att skicka kommandon till 16 * 2 LCD-skärm. datawrt- funktionen används för att skicka data till 16 * 2 LCD-skärm.
ogiltig fördröjning (osignerad int); ogiltig cmdwrt (osignerad röd); ogiltig datawrt (osignerad char);
I den här delen av koden skickar vi kommandon till 16 * 2 lcd. Kommandon såsom tydlig display, inkrement markören, tvinga markören till början av en st linje sänds till 16 * 2 LCD display en efter en efter en viss specificerad tidsfördröjning.
för (i = 0; i <5; i ++) {cmdwrt (cmd); fördröjning (1); }
I denna del av koden är timer1 konfigurerad som räknare och driftläge är inställt på läge 1.
Timer0 är konfigurerad som timer och driftläge är inställt på läge 1. Timer 1 används för att räkna antalet pulser och timer 0 används för att generera tidsfördröjning. TH1- och TL1-värden är inställda på 0 för att säkerställa att räkningen börjar från 0.
TMOD = 0x51; TL1 = 0; TH1 = 0;
I denna del av koden görs timern för att köra i 100 millisekunder. 100 millisekunder fördröjning genereras med fördröjningsfunktionen. TR1 = 1 är för att starta timern och TR1 = 0 är för att stoppa timern efter 100 millisekunder.
TR1 = 1; fördröjning (100); TR1 = 0;
I denna del av koden kombineras de räknevärden som finns i TH1- och TL1-register och sedan multipliceras det med 10 för att få det totala antalet cykler på 1 sekund.
Pulser = TH1 * (0x100) + TL1; Pulser = pulser * 10;
I denna del av koden omvandlas frekvensvärdet till enskilda byte för att göra det enkelt att visa på 16 * 2 LCD-skärm.
d1 = pulser% 10; s1 = pulser% 100; s2 = pulser% 1000; s3 = pulser% 10000; s4 = pulser% 100000; d2 = (s1-dl) / 10; d3 = (s2-s1) / 100; d4 = (s3-s2) / 1000; d5 = (s4-s3) / 10000; d6 = (pulser-s4) / 100000;
I denna del av koden omvandlas enskilda siffror med frekvensvärde till ASCII- format och det visas på 16 * 2 LCD-skärm.
Om (pulser> = 100000) datawrt (0x30 + d6); if (pulser> = 10000) datawrt (0x30 + d5); om (pulser> = 1000) datawrt (0x30 + d4); om (pulser> = 100) datawrt (0x30 + d3); om (pulser> = 10) datawrt (0x30 + d2); datawrt (0x30 + d1);
I denna del av koden skickar vi kommandon till 16 * 2 LCD-skärm. Kommandot kopieras till port 0 på 8051 mikrokontroller. RS är låg för kommandoskrivning. RW görs lågt för skrivoperation. Hög till låg puls tillämpas på aktiveringsstift (E) för att starta kommandoskrivning.
ogiltig cmdwrt (osignerad char x) {P0 = x; rs = 0; rw = 0; en = 1; fördröjning (1); en = 0; }
I den här delen av koden skickar vi data till 16 * 2 LCD-skärm. Uppgifterna kopieras till port 0 på 8051 mikrokontroller. RS är högt för kommandoskrivning. RW görs lågt för skrivoperation. Hög till låg puls appliceras på aktiveringsstift (E) för att starta dataskrivning.
ogiltig datawrt (osignerad char y) {P0 = y; rs = 1; rw = 0; en = 1; fördröjning (1); en = 0; }
Så här kan vi mäta frekvensen för vilken signal som helst med hjälp av 8051 Microcontroller. Kontrollera hela koden och demovideo nedan.