- Nødvendige komponenter:
- Kretsdiagram:
- Bruke TIMER av 8051 for å måle frekvens:
- 555 Timer som frekvenskilde:
- Arbeids- og kodeforklaring:
Frekvens er definert som antall sykluser per sekund. Det kan også defineres som gjensidig av total tid 'T'. I dette prosjektet skal vi telle antall pulser som kommer inn i port 3.5 av 8051 mikrokontroller og vise den på 16 * 2 LCD-skjerm. Så i utgangspunktet måler vi frekvensen av signalet ved port 3.5 av 8051. Her har vi brukt AT89S52 8051-brikke, og en 555 IC brukes i Astable-modus for å generere prøveimpulsen for demonstrasjon. Vi har tidligere bygget frekvensteller ved hjelp av Arduino.
Nødvendige komponenter:
- 8051 mikrokontroller (AT89S52)
- 16 * 2 LCD-skjerm
- Frekvens kilde (555 timer)
- Potensiometer
- Koble ledninger
Kretsdiagram:
Bruke TIMER av 8051 for å måle frekvens:
8051 mikrokontroller er en 8-biters mikrokontroller som har 128 byte på RAM-brikke, 4K byte på ROM-brikke, to tidtakere, en seriell port og fire 8-biters porter. 8052 mikrokontroller er en utvidelse av mikrokontroller. For å konfigurere port 3.5 som teller, er TMOD-registerverdiene satt til 0x51. Figuren nedenfor viser TMOD-registeret.
PORT | C / T | M1 | M0 | PORT | C / T | M1 | M2 |
TIMER 1 | TIMER 0 |
GATE - når GATE er innstilt, aktiveres tidtakeren eller telleren bare når INTx-pinnen er HØY og TRx-kontrollpinnen er satt. Når GATE er slettet, aktiveres tidtakeren når TRx-kontrollbit er SETT.
C / T - når C / T = 0, fungerer den som timer. Når C / T = 1, fungerer det som Counter.
M1 og M0 indikerer driftsmodus.
For TMOD = 0x51 fungerer timer1 som teller, og den fungerer i modus1 (16bit).
16 * 2 LCD brukes til å vise frekvensen til signalet i Hertz (Hz). Hvis du er ny på 16x2 LCD, kan du sjekke mer om 16x2 LCD-pinner og kommandoene her. Sjekk også hvordan du grensesnitt LCD med 8051.
555 Timer som frekvenskilde:
Frekvenskilden skal produsere firkantbølger og maksimal amplitude er begrenset til 5V, fordi portene på 8051 mikrokontroller ikke kan håndtere spenning større enn 5V. Den maksimale frekvensen den kan måle er 655,35 KHz på grunn av minnebegrensning av TH1 og TL1-registeret (8bit hver). På 100 millisekunder kan TH1 og TL1 holde opptil 65535 tellinger. Derfor er den maksimale frekvensen som kan måles 65535 * 10 = 655,35 KHz.
I dette 8051-frekvensmålerprosjektet bruker jeg 555 tidtaker i astabel modus for å produsere firkantbølger med variabel frekvens. Frekvensen av signalet som genereres av 555 IC, kan varieres ved å justere potensiometeret som vist i videoen gitt på slutten av dette prosjektet.
I dette prosjektet teller Timer1 (T1) antall pulser som kommer inn i port 3.5 av 8051 mikrokontrollere i 100 millisekunder. Telleverdiene vil bli lagret i henholdsvis TH1- og TL1-registre. For å kombinere verdiene til TH1 og TL1-registeret brukes formelen nedenfor.
Pulser = TH1 * (0x100) + TL1
Nå vil "pulsen" ha antall sykluser på 100 millisekunder. Men signalets frekvens er definert som antall sykluser per sekund. For å konvertere den til frekvens, brukes nedenstående formel.
Pulser = Pulser * 10
Arbeids- og kodeforklaring:
Hele C-programmet for denne frekvensmåleren er gitt på slutten av dette prosjektet. Koden er delt inn i små meningsfulle biter og forklart nedenfor.
For 16 * 2 LCD-grensesnitt med 8051 mikrokontroller, må vi definere pinner som 16 * 2 LCD er koblet til 8051 mikrokontroller. RS-pinne på 16 * 2 lcd er koblet til P2.7, RW-pinne på 16 * 2 lcd er koblet til P2.6 og E-pinne på 16 * 2 lcd er koblet til P2.5. Datapinner er koblet til port 0 på 8051 mikrokontroller.
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit en = P2 ^ 5;
Deretter må vi definere noen funksjoner som brukes i programmet. Forsinkelsesfunksjon brukes til å lage spesifisert tidsforsinkelse. Cmdwrt- funksjonen brukes til å sende kommandoer til 16 * 2 LCD-skjerm. datawrt- funksjonen brukes til å sende data til 16 * 2 LCD-skjerm.
ugyldig forsinkelse (usignert int); ugyldig cmdwrt (usignert røye); ugyldig datawrt (usignert røye);
I denne delen av koden sender vi kommandoer til 16 * 2 lcd. Kommandoer slik som klart display, inkrement markør, få markøren til begynnelsen av en st linje blir sendt til 16 * 2 LCD-display ett for ett etter en spesifisert tidsforsinkelse.
for (i = 0; i <5; i ++) {cmdwrt (cmd); forsinkelse (1); }
I denne delen av koden er tidtaker1 konfigurert som teller og driftsmodus er satt til modus 1.
Timer0 er konfigurert som timer og modus for drift er satt til modus 1. Timer 1 brukes til å telle antall pulser og timer 0 brukes til å generere tidsforsinkelse. TH1- og TL1-verdiene er satt til 0, for å sikre at telling starter fra 0.
TMOD = 0x51; TL1 = 0; TH1 = 0;
I denne delen av koden er tidtakeren laget i 100 millisekunder. 100 millisekunder forsinkelse genereres ved hjelp av forsinkelsesfunksjon. TR1 = 1 er for å starte timeren og TR1 = 0 er for å stoppe timeren etter 100 millisekunder.
TR1 = 1; forsinkelse (100); TR1 = 0;
I denne delen av koden kombineres telleverdiene i TH1 og TL1-registerene, og deretter multipliseres det med 10 for å få totalt antall sykluser på 1 sekund.
Pulser = TH1 * (0x100) + TL1; Pulser = pulser * 10;
I denne delen av koden konverteres frekvensverdien til enkeltbyte for å gjøre det enkelt å vise på 16 * 2 LCD-skjerm.
d1 = pulser% 10; s1 = pulser% 100; s2 = pulser% 1000; s3 = pulser% 10000; s4 = pulser% 100000; d2 = (s1-d1) / 10; d3 = (s2-s1) / 100; d4 = (s3-s2) / 1000; d5 = (s4-s3) / 10000; d6 = (pulser-s4) / 100000;
I denne delen av koden konverteres individuelle siffer med frekvensverdi til ASCII- format, og den vises på 16 * 2 LCD-skjerm.
Hvis (pulser> = 100000) datawrt (0x30 + d6); hvis (pulser> = 10000) datawrt (0x30 + d5); hvis (pulser> = 1000) datawrt (0x30 + d4); hvis (pulser> = 100) datawrt (0x30 + d3); hvis (pulser> = 10) datawrt (0x30 + d2); datawrt (0x30 + d1);
I denne delen av koden sender vi kommandoer til 16 * 2 LCD-skjerm. Kommandoen kopieres til port 0 på 8051 mikrokontroller. RS er lavt for kommandoskriving. RW er lavt for skrivedrift. Høy til lav puls brukes på aktiveringstasten (E) for å starte kommandoskrivingen.
ugyldig cmdwrt (usignert tegn x) {P0 = x; rs = 0; rw = 0; en = 1; forsinkelse (1); en = 0; }
I denne delen av koden sender vi data til 16 * 2 LCD-skjerm. Dataene kopieres til port 0 på 8051 mikrokontroller. RS er gjort høyt for kommandoskriving. RW er lavt for skrivedrift. Høy til lav puls påføres på aktiveringsstift (E) for å starte dataskriving.
ugyldig datawrt (usignert char y) {P0 = y; rs = 1; rw = 0; en = 1; forsinkelse (1); en = 0; }
Slik kan vi måle frekvensen til hvilket som helst signal ved hjelp av 8051 Microcontroller. Sjekk hele koden og demonstrasjonsvideoen nedenfor.