- Компоненте потребне:
- Кружни дијаграм:
- Коришћење ТИМЕР-а од 8051 за мерење фреквенције:
- 555 Тајмер као извор фреквенције:
- Објашњење рада и кода:
Фреквенција је дефинисана као број циклуса у секунди. Такође се може дефинисати као реципрочно укупно време „Т“. У овом пројекту избројаћемо број импулса који улазе у порт 3.5 микроконтролера 8051 и приказати га на 16 * 2 ЛЦД дисплеју. Дакле, у основи имамо мерење фреквенције сигнала на прикључку 3.5 од 8051. Овде смо користили чип АТ89С52 8051, а 555 ИЦ се користи у режиму Астабле за генерисање узорка импулса за демонстрацију. Претходно смо направили бројач фреквенција користећи Ардуино.
Компоненте потребне:
- 8051 микроконтролер (АТ89С52)
- ЛЦД екран од 16 * 2
- Извор фреквенције (555 тајмер)
- Потенциометар
- Повезивање жица
Кружни дијаграм:
Коришћење ТИМЕР-а од 8051 за мерење фреквенције:
8051 микроконтролер је 8-битни микроконтролер који има 128 бајта чип РАМ-а, 4К бајта чип РОМ-а, два тајмера, један серијски порт и четири 8-битна порта. 8052 микроконтролер је продужетак микроконтролера. Да би се порт 3.5 конфигурисао као бројач, вредности регистра ТМОД постављене су на 0к51. Испод слике приказан је ТМОД регистар.
ГАТЕ | Ц / Т | М1 | М0 | ГАТЕ | Ц / Т | М1 | М2 |
ТИМЕР 1 | ТИМЕР 0 |
ГАТЕ - када је постављен ГАТЕ, тајмер или бројач је омогућен само када је ИНТк пин ВИСОК и када је постављен ТРк контролни пин. Када је ГАТЕ обрисан, тајмер је омогућен кад год је постављен ТРк контролни бит.
Ц / Т - када је Ц / Т = 0, делује као тајмер. Када је Ц / Т = 1, делује као бројач.
М1 и М0 означавају начин рада.
За ТМОД = 0к51, тајмер1 делује као бројач и ради у режиму1 (16бит).
ЛЦД са 16 * 2 користи се за приказ фреквенције сигнала у херцима (Хз). Ако сте нови у ЛЦД-у 16к2, овде погледајте више информација о пиновима ЛЦД-а 16к2 и његовим командама. Такође проверите како повезати ЛЦД са 8051.
555 Тајмер као извор фреквенције:
Извор фреквенције треба да производи квадратне таласе, а максимална амплитуда је ограничена на 5В, јер прикључци 8051 микроконтролера не могу да поднесу напон већи од 5В. Максимална фреквенција може мерити је 655,35 КХз због ограничења меморије Тх1 и ТЛ1 регистру (8бит еацх). За 100 милисекунди, ТХ1 и ТЛ1 могу да одрже до 65535 бројања. Отуда је максимална фреквенција која се може измерити 65535 * 10 = 655,35 КХз.
У овом пројекту 8051 мерача фреквенције користим 555 тајмер у стабилном режиму за производњу квадратних таласа променљиве фреквенције. Учесталост сигнала генерисаног од 555 ИЦ може се мењати подешавањем потенциометра као што је приказано у видеу датом на крају овог пројекта.
У овом пројекту, Тимер1 (Т1) броји број импулса који улазе у порт 3.5 од 8051 микроконтролера током 100 милисекунди. Вредности бројања биће ускладиштене у регистрима ТХ1 и ТЛ1. За комбиновање вредности регистра ТХ1 и ТЛ1 користи се следећа формула.
Импулси = ТХ1 * (0к100) + ТЛ1
Сада ће 'пулс' имати број циклуса за 100 милисекунди. Али фреквенција сигнала је дефинисана као број циклуса у секунди. Да би се претворио у фреквенцију, користи се доња формула.
Импулси = Импулси * 10
Објашњење рада и кода:
Комплетан, Ц програма за ову фреквенцметар је дат на крају овог пројекта. Код је подељен на мале смислене делове и објашњен у наставку.
За 16 * 2 ЛЦД повезивање са 8051 микроконтролером, морамо да дефинишемо пинове на којима је 16 * 2 лцд повезан са 8051 микроконтролером. РС пин од 16 * 2 лцд је повезан са П2.7, РВ пин од 16 * 2 лцд је повезан са П2.6, а Е пин од 16 * 2 лцд је повезан са П2.5. Прикључци за податке повезани су на порт 0 микроконтролера 8051.
сбит рс = П2 ^ 7; сбит рв = П2 ^ 6; сбит ен = П2 ^ 5;
Даље морамо дефинисати неке функције које се користе у програму. Функција одлагања користи се за стварање одређеног временског кашњења. Функција Цмдврт се користи за слање команди на ЛЦД екран од 16 * 2. датаврт функција се користи за слање података на ЛЦД екран од 16 * 2.
воид делаи (непотписан инт); воид цмдврт (непотписани знак); воид датаврт (непотписани знак);
У овом делу кода шаљемо команде на лцд 16 * 2. Наредбе као што су јасан приказ, повећање курсора, присиљавање курсора на почетак 1. реда шаљу се на ЛЦД екран 16 * 2 један по један након одређеног временског кашњења.
за (и = 0; и <5; и ++) {цмдврт (цмд); кашњење (1); }
У овом делу кода, тајмер1 је конфигурисан као бројач и режим рада је постављен на режим 1.
Тимер0 је конфигурисан као тајмер и начин рада је постављен на режим 1. Тајмер 1 се користи за бројање броја импулса, а тајмер 0 се користи за генерисање временског кашњења. Вредности ТХ1 и ТЛ1 постављене су на 0, како би се осигурало да бројање почиње од 0.
ТМОД = 0к51; ТЛ1 = 0; ТХ1 = 0;
У овом делу кода, тајмер је направљен да ради 100 милисекунди. Функција одлагања генерише 100 милисекунди кашњења. ТР1 = 1 је за покретање тајмера, а ТР1 = 0 за заустављање тајмера након 100 милисекунди.
ТР1 = 1; кашњење (100); ТР1 = 0;
У овом делу кода вредности бројања присутне у регистрима ТХ1 и ТЛ1 се комбинују, а затим се множи са 10 да би се добио укупан број циклуса у 1 секунди.
Импулси = ТХ1 * (0к100) + ТЛ1; Импулси = импулси * 10;
У овом делу кода, вредност фреквенције се претвара у појединачне бајтове како би се олакшало приказивање на ЛЦД екрану од 16 * 2.
д1 = импулси% 10; с1 = импулси% 100; с2 = импулси% 1000; с3 = импулси% 10000; с4 = импулси% 100000; д2 = (с1-д1) / 10; д3 = (с2-с1) / 100; д4 = (с3-с2) / 1000; д5 = (с4-с3) / 10000; д6 = (импулси-с4) / 100000;
У овом делу кода појединачне цифре вредности фреквенције претварају се у АСЦИИ формат и приказују се на 16 * 2 лцд дисплеју.
Ако (импулси> = 100000) датаврт (0к30 + д6); иф (импулси> = 10000) датаврт (0к30 + д5); иф (импулси> = 1000) датаврт (0к30 + д4); иф (импулси> = 100) датаврт (0к30 + д3); ако (импулси> = 10) датаврт (0к30 + д2); датаврт (0к30 + д1);
У овом делу кода шаљемо команде на ЛЦД екран од 16 * 2. Команда се копира на порт 0 микроконтролера 8051. РС је смањен за писање наредби. РВ је смањен за операцију писања. Пулс високог до ниског нивоа примењује се на осовиници за омогућавање (Е) за покретање операције писања наредби.
воид цмдврт (непотписани знак к) {П0 = к; рс = 0; рв = 0; ен = 1; кашњење (1); ен = 0; }
У овом делу кода шаљемо податке на ЛЦД екран од 16 * 2. Подаци се копирају на порт 0 микроконтролера 8051. РС је направљен високо за писање наредби. РВ је смањен за операцију писања. Пулс високог до ниског нивоа примењује се на оспособљавајућем (Е) пину за покретање операције уписивања података.
воид датаврт (непотписани знак и) {П0 = и; рс = 1; рв = 0; ен = 1; кашњење (1); ен = 0; }
Тако можемо мерити фреквенцију било ког сигнала помоћу микроконтролера 8051. Проверите пуни код и демо видео испод.