- Необходими компоненти:
- Електрическа схема:
- Използване на ТАЙМЕР от 8051 за измерване на честотата:
- 555 Таймер като източник на честота:
- Обяснение на работата и кода:
Честотата се определя като брой цикли в секунда. Може да се определи и като реципрочно на общото време „T“. В този проект ще преброим броя на импулсите, влизащи в порт 3.5 на микроконтролера 8051 и ще го покажем на 16 * 2 LCD дисплей. Така че основно сме измерили честотата на сигнала на порт 3.5 от 8051. Тук сме използвали AT89S52 8051 чип, а 555 IC се използва в режим Astable за генериране на пробен импулс за демонстрация. Преди това сме изградили брояч на честоти, използвайки Arduino.
Необходими компоненти:
- 8051 микроконтролер (AT89S52)
- 16 * 2 LCD дисплей
- Източник на честота (555 таймер)
- Потенциометър
- Свързващи проводници
Електрическа схема:
Използване на ТАЙМЕР от 8051 за измерване на честотата:
Микроконтролерът 8051 е 8-битов микроконтролер, който има 128 байта чип RAM, 4K байта чип ROM, два таймера, един сериен порт и четири 8 битови порта. Микроконтролерът 8052 е продължение на микроконтролера. За да конфигурирате порт 3.5 като брояч, стойностите на регистъра TMOD са зададени на 0x51. По-долу фигурата показва регистъра TMOD.
GATE | C / T | М1 | М0 | GATE | C / T | М1 | М2 |
ТАЙМЕР 1 | ТАЙМЕР 0 |
GATE - когато GATE е зададен, таймерът или броячът се активират само когато INTx щифтът е HIGH и TRx контролен щифт е зададен. Когато GATE се изчисти, таймерът се активира, когато TRx контролен бит е SET.
C / T - когато C / T = 0, той действа като таймер. Когато C / T = 1, той действа като брояч.
M1 и M0 показват режима на работа.
За TMOD = 0x51, таймерът1 действа като брояч и работи в режим1 (16 бита).
16 * 2 LCD се използва за показване на честотата на сигнала в херци (Hz). Ако не сте запознати с LCD дисплея 16x2, проверете тук повече за щифтовете 16x2 LCD и неговите команди тук. Също така проверете как да свържете LCD с 8051.
555 Таймер като източник на честота:
Източникът на честота трябва да произвежда квадратни вълни и максималната амплитуда е ограничена до 5V, тъй като портовете на микроконтролера 8051 не могат да обработват напрежение по-голямо от 5V. На честотата максимално може да се измери е 655.35 KHz поради ограничение памет на ТН1 и TL1 регистър (8bit всеки). За 100 милисекунди TH1 и TL1 могат да поддържат до 65535 броя. Следователно максималната честота, която може да бъде измерена, е 65535 * 10 = 655,35 KHz.
В този проект за измерване на честота 8051 използвам 555 таймер в нестабилен режим, за да произведа квадратни вълни с променлива честота. Честотата на сигнала, генериран от 555 IC, може да варира чрез регулиране на потенциометъра, както е показано във видеото, дадено в края на този проект.
В този проект Timer1 (T1) отчита броя на импулсите, влизащи в порт 3.5 на 8051 микроконтролери за 100 милисекунди. Стойностите на броя се съхраняват съответно в регистрите TH1 и TL1. За да се комбинират стойностите на регистъра TH1 и TL1, се използва формулата по-долу.
Импулси = TH1 * (0x100) + TL1
Сега „импулсът“ ще има брой цикли за 100 милисекунди. Но честотата на сигнала се определя като брой цикли в секунда. За да го преобразувате в честота, се използва формулата по-долу.
Импулси = Импулси * 10
Обяснение на работата и кода:
В пълна програма C за тази честота Meter е дадена в края на този проект. Кодът е разделен на малки смислени парчета и е обяснен по-долу.
За 16 * 2 LCD взаимодействие с 8051 микроконтролер, ние трябва да дефинираме щифтове, на които 16 * 2 lcd е свързан към 8051 микроконтролер. RS щифт от 16 * 2 lcd е свързан към P2.7, RW щифт от 16 * 2 lcd е свързан към P2.6 и E щифт от 16 * 2 lcd е свързан към P2.5. Пиновете за данни са свързани към порт 0 на микроконтролера 8051.
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit en = P2 ^ 5;
След това трябва да дефинираме някои функции, които се използват в програмата. Функцията за забавяне се използва за създаване на определено времезакъснение. Функцията Cmdwrt се използва за изпращане на команди до 16 * 2 lcd дисплей. datawrt функцията се използва за изпращане на данни на 16 * 2 lcd дисплей.
забавяне на празнотата (неподписан int); void cmdwrt (неподписан знак); void datawrt (неподписан знак);
В тази част на кода изпращаме команди на 16 * 2 lcd. Команди като изчистване на дисплея, увеличаване на курсора, принуждаване на курсора до началото на 1- ви ред се изпращат на дисплей 16 * 2 lcd един по един след известно зададено време.
за (i = 0; i <5; i ++) {cmdwrt (cmd); забавяне (1); }
В тази част на кода таймерът1 е конфигуриран като брояч и режимът на работа е настроен на режим 1.
Timer0 е конфигуриран като таймер и режимът на работа е настроен на режим 1. Таймерът 1 се използва за отчитане на броя на импулсите, а таймерът 0 се използва за генериране на времезакъснение. Стойностите на TH1 и TL1 са зададени на 0, за да се гарантира, че броенето започва от 0.
TMOD = 0x51; TL1 = 0; TH1 = 0;
В тази част на кода таймерът е направен да работи за 100 милисекунди. 100 милисекунди закъснение се генерират с помощта на функцията за забавяне. TR1 = 1 е за стартиране на таймера и TR1 = 0 е за спиране на таймера след 100 милисекунди.
TR1 = 1; забавяне (100); TR1 = 0;
В тази част на кода стойностите на броя, присъстващи в регистрите TH1 и TL1, се комбинират и след това се умножава с 10, за да се получи общият брой цикли за 1 секунда.
Импулси = TH1 * (0x100) + TL1; Импулси = импулси * 10;
В тази част на кода стойността на честотата се преобразува в единични байтове, за да улесни показването на 16 * 2 lcd дисплей.
d1 = импулси% 10; s1 = импулси% 100; s2 = импулси% 1000; s3 = импулси% 10000; s4 = импулси% 100000; d2 = (s1-d1) / 10; d3 = (s2-s1) / 100; d4 = (s3-s2) / 1000; d5 = (s4-s3) / 10000; d6 = (импулси-s4) / 100000;
В тази част на кода отделните цифри на честотната стойност се преобразуват във формат ASCII и те се показват на 16 * 2 lcd дисплей.
Ако (импулси> = 100000) datawrt (0x30 + d6); ако (импулси> = 10000) datawrt (0x30 + d5); ако (импулси> = 1000) datawrt (0x30 + d4); ако (импулси> = 100) datawrt (0x30 + d3); ако (импулси> = 10) datawrt (0x30 + d2); datawrt (0x30 + d1);
В тази част от кода ние изпращаме команди до 16 * 2 lcd дисплей. Командата се копира на порт 0 на микроконтролера 8051. RS е намален за запис на команди. RW е намален за операция на запис. Силен до нисък импулс се прилага на щифта за активиране (E), за да стартира операцията за запис на команда.
void cmdwrt (неподписан знак x) {P0 = x; rs = 0; rw = 0; en = 1; забавяне (1); en = 0; }
В тази част от кода ние изпращаме данни на 16 * 2 lcd дисплей. Данните се копират в порт 0 на микроконтролера 8051. RS е направен високо за запис на команди. RW е намален за операция на запис. Силен до нисък импулс се прилага на щифта за активиране (E), за да стартира операцията по запис на данни.
void datawrt (неподписан знак y) {P0 = y; rs = 1; rw = 0; en = 1; забавяне (1); en = 0; }
По този начин можем да измерим честотата на всеки сигнал, използвайки 8051 микроконтролер. Проверете пълния код и демонстрационното видео по-долу.