- Nepieciešamās sastāvdaļas:
- Ķēdes shēma:
- Izmantojot 8051 TIMER frekvences mērīšanai:
- 555 taimeris kā frekvences avots:
- Darba un koda skaidrojums:
Biežums tiek definēts kā ciklu skaits sekundē. To var definēt arī kā kopējo laiku “T”. Šajā projektā mēs uzskaitīsim impulsu skaitu, kas ievadīti 8051 mikrokontrollera portā 3.5, un parādīsim to 16 * 2 LCD displejā. Tātad būtībā mums ir jāmēra signāla frekvence 8051. portā 3.5. Šeit mēs izmantojām AT89S52 8051 mikroshēmu, un 555 IC tiek izmantots Astable režīmā parauga impulsa ģenerēšanai demonstrēšanai. Mēs iepriekš esam izveidojuši frekvences skaitītāju, izmantojot Arduino.
Nepieciešamās sastāvdaļas:
- 8051 mikrokontrolleris (AT89S52)
- 16 * 2 LCD displejs
- Frekvences avots (555 taimeris)
- Potenciometrs
- Savienojošie vadi
Ķēdes shēma:
Izmantojot 8051 TIMER frekvences mērīšanai:
8051 mikrokontrolleris ir 8 bitu mikrokontrolleris, kuram ir 128 baiti mikroshēmas RAM, 4K baiti mikroshēmas ROM, divi taimeri, viens sērijas ports un četri 8 bitu porti. 8052 mikrokontrolleris ir mikrokontrollera paplašinājums. Lai konfigurētu portu 3.5 kā skaitītāju, TMOD reģistra vērtības ir iestatītas uz 0x51. Zemāk attēlā parādīts TMOD reģistrs.
VĀRTI | C / T | M1 | M0 | VĀRTI | C / T | M1 | M2 |
1. taimeris | Taimeris 0 |
VĀRTS - ja GATE ir iestatīts, taimeris vai skaitītājs tiek iespējots tikai tad, ja INTx tapa ir AUGSTA un TRx vadības tapa ir iestatīta. Kad GATE ir notīrīts, taimeris tiek iespējots ikreiz, kad ir iestatīts TRx vadības bits.
C / T - kad C / T = 0, tas darbojas kā taimeris. Kad C / T = 1, tas darbojas kā skaitītājs.
M1 un M0 norāda darbības režīmu.
Ja TMOD = 0x51, taimeris1 darbojas kā skaitītājs un darbojas 1. režīmā (16 biti).
16 * 2 LCD tiek izmantots, lai parādītu signāla frekvenci hercos (Hz). Ja esat jauns 16x2 LCD ekrāns, šeit uzziniet vairāk par 16x2 LCD tapām un tā komandām. Pārbaudiet arī to, kā saskarni LCD ar 8051.
555 taimeris kā frekvences avots:
Frekvences avotam vajadzētu radīt kvadrātveida viļņus, un maksimālā amplitūda ir ierobežota līdz 5 V, jo 8051 mikrokontrollera porti nespēj apstrādāt spriegumu, kas lielāks par 5 V. Maksimālā frekvence to var izmērīt, ir 655,35 kHz, jo atmiņas ierobežojuma TH1 un TL1 reģistra (8bit katrā). 100 milisekunžu laikā TH1 un TL1 var noturēt līdz 65535 skaitļiem. Tādējādi maksimālā mērāmā frekvence ir 65535 * 10 = 655,35 KHz.
Šajā 8051 frekvences mērītāja projektā es izmantoju 555 taimeri astablo režīmā, lai radītu mainīgas frekvences kvadrātveida viļņus. 555 IC radītā signāla frekvenci var mainīt, pielāgojot potenciometru, kā parādīts šī projekta beigās sniegtajā video.
Šajā projektā taimeris1 (T1) 100 milisekundes skaita impulsu skaitu, kas 8051 mikrokontrolleru ievadīti 3.5. Ostā. Skaitīšanas vērtības tiks saglabātas attiecīgi TH1 un TL1 reģistros. Lai apvienotu TH1 un TL1 reģistra vērtības, tiek izmantota šāda formula.
Pākšaugi = TH1 * (0x100) + TL1
Tagad impulsam būs ciklu skaits 100 milisekundēs. Bet signāla biežumu nosaka kā ciklu skaitu sekundē. Lai to pārvērstu frekvencē, tiek izmantota zemāk esošā formula.
Pākšaugi = pākšaugi * 10
Darba un koda skaidrojums:
Pilnīga C programma šai frekvences mērītājs tiek dota beigās šo projektu. Kods ir sadalīts mazos nozīmīgos gabalos un paskaidrots tālāk.
16 * 2 LCD saskarnei ar 8051 mikrokontrolleru mums jānosaka tapas, uz kurām 16 * 2 lcd ir savienots ar 8051 mikrokontrolleru. RS tapa 16 * 2 lcd ir savienota ar P2.7, RW tapa 16 * 2 lcd ir savienota ar P2.6 un E tapa 16 * 2 lcd ir savienota ar P2.5. Datu tapas ir savienotas ar 8051 mikrokontrollera 0. pieslēgvietu.
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit lv = P2 ^ 5;
Tālāk mums jānosaka dažas funkcijas, kuras tiek izmantotas programmā. Kavēšanās funkcija tiek izmantota, lai izveidotu noteiktu laika aizkavi. Funkcija Cmdwrt tiek izmantota komandu nosūtīšanai uz 16 * 2 LCD displeju. datawrt funkciju izmanto, lai nosūtītu datus uz 16 * 2 LCD displeju.
void delay (neparakstīts int); void cmdwrt (neparakstīta char); void datawrt (neparakstīta char);
Šajā koda daļā mēs sūtām komandas uz 16 * 2 lcd. Komandas, piemēram, skaidru displeju, pieauguma kursoru, piespiest kursoru sākums 1. st līnijas tiek nosūtīti 16 * 2 LCD displejs pa vienam, pēc kāda noteikta laika kavēšanās.
par (i = 0; i <5; i ++) {cmdwrt (cmd); kavēšanās (1); }
Šajā koda daļā taimeris1 ir konfigurēts kā skaitītājs, un darbības režīms ir iestatīts uz 1. režīmu.
Taimeris0 ir konfigurēts kā taimeris, un darbības režīms ir iestatīts uz 1. režīmu. Taimeris 1 tiek izmantots impulsu skaita skaitīšanai un taimeris 0 tiek izmantots laika aizkaves ģenerēšanai. TH1 un TL1 vērtības ir iestatītas uz 0, lai nodrošinātu, ka skaitīšana sākas no 0.
TMOD = 0x51; TL1 = 0; TH1 = 0;
Šajā koda daļā taimeris tiek darbināts 100 milisekundes. Izmantojot aizkaves funkciju, tiek ģenerēts 100 milisekundu kavējums. TR1 = 1 ir paredzēts taimera palaišanai un TR1 = 0 ir taimera apturēšanai pēc 100 milisekundēm.
TR1 = 1; kavēšanās (100); TR1 = 0;
Šajā koda daļā TH1 un TL1 reģistros esošās skaitīšanas vērtības tiek apvienotas, un pēc tam tas tiek reizināts ar 10, lai 1 sekundē iegūtu kopējo ciklu skaitu.
Pākšaugi = TH1 * (0x100) + TL1; Pākšaugi = pākšaugi * 10;
Šajā koda daļā frekvences vērtība tiek pārveidota par vieniem baitiem, lai to būtu viegli parādīt 16 * 2 LCD displejā.
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;
Šajā koda daļā atsevišķi frekvences vērtības cipari tiek pārvērsti ASCII formātā, un tie tiek parādīti 16 * 2 LCD displejā.
Ja (impulsi> = 100000) datawrt (0x30 + d6); ja (impulsi> = 10000) datawrt (0x30 + d5); ja (impulsi> = 1000) datawrt (0x30 + d4); ja (impulsi> = 100) datawrt (0x30 + d3); ja (impulsi> = 10) datawrt (0x30 + d2); datawrt (0x30 + d1);
Šajā koda daļā mēs nosūtām komandas uz 16 * 2 LCD displeju. Komanda tiek kopēta 8051 mikrokontrollera 0. portā. RS ir zems komandu rakstīšanai. RW ir zema rakstīšanas operācijai. Iespējas (E) tapā tiek izmantots augsts vai zems impulss, lai sāktu komandas rakstīšanas darbību.
void cmdwrt (neparakstīta char x) {P0 = x; rs = 0; rw = 0; lv = 1; kavēšanās (1); lv = 0; }
Šajā koda daļā mēs sūtām datus uz 16 * 2 LCD displeju. Dati tiek kopēti 8051 mikrokontrollera 0. portā. RS ir paaugstināts komandu rakstīšanai. RW ir zema rakstīšanas operācijai. Iespējas (E) tapā tiek izmantots augsts vai zems impulss, lai sāktu datu rakstīšanas darbību.
void datawrt (neparakstīta char y) {P0 = y; rs = 1; rw = 0; lv = 1; kavēšanās (1); lv = 0; }
Šādi mēs varam izmērīt jebkura signāla frekvenci, izmantojot 8051 mikrokontrolleru. Tālāk pārbaudiet pilnu kodu un demonstrācijas video.