- Необходимые компоненты:
- Принципиальная электрическая схема:
- Использование ТАЙМЕРА 8051 для измерения частоты:
- 555 Таймер как источник частоты:
- Работа и объяснение кода:
Частота определяется как количество циклов в секунду. Его также можно определить как обратное к общему времени «T». В этом проекте мы собираемся подсчитать количество импульсов, поступающих в порт 3.5 микроконтроллера 8051, и отобразить его на ЖК-дисплее 16 * 2. Таким образом, в основном мы измеряем частоту сигнала на порте 3.5 8051. Здесь мы использовали микросхему AT89S52 8051, а микросхема 555 используется в нестабильном режиме для генерации импульса выборки для демонстрации. Ранее мы создали частотомер с использованием Arduino.
Необходимые компоненты:
- Микроконтроллер 8051 (AT89S52)
- ЖК-дисплей 16 * 2
- Источник частоты (таймер 555)
- Потенциометр
- Соединительные провода
Принципиальная электрическая схема:
Использование ТАЙМЕРА 8051 для измерения частоты:
Микроконтроллер 8051 - это 8-битный микроконтроллер, который имеет 128 байт встроенной RAM, 4K байтов встроенной ROM, два таймера, один последовательный порт и четыре 8-битных порта. Микроконтроллер 8052 является продолжением микроконтроллера. Чтобы настроить порт 3.5 как счетчик, значение регистра TMOD устанавливается на 0x51. На рисунке ниже показан регистр TMOD.
ВОРОТА | C / T | M1 | M0 | ВОРОТА | C / T | M1 | M2 |
ТАЙМЕР 1 | ТАЙМЕР 0 |
GATE - когда установлен GATE, таймер или счетчик включаются только тогда, когда вывод INTx находится в состоянии HIGH и установлен вывод управления TRx. Когда GATE сброшен, таймер включается всякий раз, когда бит управления TRx установлен.
C / T - когда C / T = 0, действует как таймер. Когда C / T = 1, он действует как счетчик.
M1 и M0 указывают режим работы.
Для TMOD = 0x51 таймер 1 действует как счетчик и работает в режиме 1 (16 бит).
16 * 2 ЖК-дисплей используется для отображения частоты сигнала в герцах (Гц). Если вы новичок в ЖК-дисплее 16x2, узнайте больше о выводах ЖК-дисплея 16x2 и его командах здесь. Также проверьте, как подключить ЖК-дисплей к 8051.
555 Таймер как источник частоты:
Источник частоты должен генерировать прямоугольные волны, а максимальная амплитуда ограничена 5 В, потому что порты микроконтроллера 8051 не могут обрабатывать напряжение более 5 В. Максимальная частота он может измерять это 655,35 кГц из - за ограничений памяти TH1 и TL1 регистра (8bit каждый). За 100 миллисекунд TH1 и TL1 могут содержать до 65535 отсчетов. Следовательно, максимальная измеряемая частота составляет 65535 * 10 = 655,35 кГц.
В этом проекте измерителя частоты 8051 я использую таймер 555 в нестабильном режиме для создания прямоугольных волн переменной частоты. Частоту сигнала, генерируемого микросхемой 555 IC, можно изменять, регулируя потенциометр, как показано в видео, приведенном в конце этого проекта.
В этом проекте Timer1 (T1) подсчитывает количество импульсов, поступающих в порт 3.5 микроконтроллеров 8051 за 100 миллисекунд. Значения счетчика будут храниться в регистрах TH1 и TL1 соответственно. Для объединения значений регистров TH1 и TL1 используется следующая формула.
Импульсы = TH1 * (0x100) + TL1
Теперь «импульс» будет иметь количество циклов в 100 миллисекунд. Но частота сигнала определяется как количество циклов в секунду. Чтобы преобразовать его в частоту, используется формула ниже.
Импульсы = Импульсы * 10
Работа и объяснение кода:
Полная программа C для этой частоты метр дается в конце этого проекта. Код разбит на небольшие значимые фрагменты и объяснен ниже.
Для сопряжения ЖК-дисплея 16 * 2 с микроконтроллером 8051 необходимо определить контакты, на которых ЖК-дисплей 16 * 2 подключен к микроконтроллеру 8051. Вывод RS 16 * 2 ЖК-дисплея подключен к P2.7, вывод RW 16 * 2 ЖК-дисплея подключен к P2.6, а вывод E 16 * 2 ЖК-дисплея подключен к P2.5. Контакты данных подключены к порту 0 микроконтроллера 8051.
сбит rs = P2 ^ 7; сбит rw = P2 ^ 6; сбит en = P2 ^ 5;
Далее нам нужно определить некоторые функции, которые используются в программе. Функция задержки используется для создания заданной временной задержки. Функция Cmdwrt используется для отправки команд на ЖК-дисплей 16 * 2. Функция datawrt используется для отправки данных на ЖК-дисплей 16 * 2.
недействительная задержка (беззнаковое целое); void cmdwrt (беззнаковый символ); void datawrt (unsigned char);
В этой части кода мы отправляем команды на ЖК-дисплей 16 * 2. Такие команды, как очистка дисплея, увеличение курсора, перевод курсора в начало 1- й строки, отправляются на ЖК-дисплей 16 * 2 по одной после некоторой заданной задержки.
для (я = 0; я <5; я ++) {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.
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.
Если (импульсы> = 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. Команда копируется в порт 0 микроконтроллера 8051. RS устанавливается на низкий уровень для записи команды. RW становится низким для операции записи. На вывод включения (E) подается импульс от высокого к низкому, чтобы начать операцию записи команды.
void cmdwrt (unsigned char x) {P0 = x; rs = 0; rw = 0; en = 1; задержка (1); en = 0; }
В этой части кода мы отправляем данные на ЖК-дисплей 16 * 2. Данные копируются в порт 0 микроконтроллера 8051. RS устанавливается в высокий уровень для записи команды. RW становится низким для операции записи. На вывод включения (E) подается импульс от высокого к низкому, чтобы начать операцию записи данных.
void datawrt (unsigned char y) {P0 = y; rs = 1; rw = 0; en = 1; задержка (1); en = 0; }
Вот как мы можем измерить частоту любого сигнала с помощью микроконтроллера 8051. Проверьте полный код и демонстрационное видео ниже.