Цифровая шкала на ARDIUNO UNO

Рейтинг:  5 / 5

Звезда активнаЗвезда активнаЗвезда активнаЗвезда активнаЗвезда активна
 

Каравкин В.
Здесь приводится описание цифровой шкалы для коротковолнового связного приемника, работающего в диапазонах 160 М, 80 М, 40 М, 20 М, 10М или любом из них. Шкала работает с двухстрочным ЖК-дисплеем. В его верхней строке показывает значение частоты в кГц.а в нижней длину волны в метрах. Внося простейшие изменения в программу цифровой шкалы можно обеспечить работу с различными значениями промежуточной частоты, а так же с приемником прямого преобразования, у которого частота гетеродина равна частоте входного сигнала либо в два раза ниже её.
Цифровая шкала очень проста в изготовлении, потому что использует готовые модули, - микроконтроллерную плату ARDUINO UNO и стандартный ЖК-дисплей на 2 строки по 16 символов типа 1602А на основе контроллера HD44780. Еще потребуется входное устройство, берущее частоту с ГПД приемника, состоящее из усилителя-формирователя и
делителя частоты на 100. Схема входного устройства здесь не приводится.


Но, прежде всего, хочу напомнить, что ARDUINO UNO это небольшая печатная плата, на которой расположен микроконтроллер ATMEGA328, а так же вся его «обвязка», необходимая для его работы, включая USB-программатор и источник питания.
Схема цифровой шкалы показана на рисунке. 1. Как видно из схемы, к цифровым портам D2-D7 платы ARDUINO UNO подключен модуль жидкокристаллического индикатора Н1 типа 1602А. А входной сигнал на порт D8 поступает от гетеродина (ГПД) приемника через усилитель-формирователь и делитель частоты на 100. Питается входной усилитель-формирователь и делитель частоты на 100, а так же и ЖК-индикатор, от стабилизатора напряжения 5V, имеющегося на плате ARDUINO UNO.
Но, вернемся к ЖК-индикатору. Индикатор представляет собой плату, на которой установлен собственно ЖК-дисплей и схема для его обслуживания, выполненная на двух безкорпусных микросхемах. Индикатор 1602А стандартный, на основе контроллера HD44780. Обозначение 1602А фактически значит, что он на две строки по 16 символов в строке.
Питание +5V на ЖК-индикатор поступает через вывод 2 его платы. Общий минус на выводы 3 и 1. Поскольку в индикатор планируется только передавать информацию от контроллера, а не наоборот, вывод 5 (RW) соединен с нулем. Данные на ЖК-индикатор будут поступать через его выводы 11-14 (выводы 7-10 не используются). Выводы 15 и 16 служат для
подключения подсветки ЖК-индикатора. На них подается напряжение 5V.
Для управления ЖК-индикатором решено было использовать порты с D2 по D7 платы ARDUINO UNO. В принципе, можно и другие порты, но я вот так, решил использовать именно эти.
Программа на языке C++ приводится в таблице 1.

Сначала необходимо загрузить библиотеку LiquidCrystal для работы с ЖК-индикатором на основе HD44780. Поэтому программа начинается с загрузки этой библиотеки:
#include <LiquidCrystal.h>
После чего, программа переходит собственно к работе цифровой шкалы.
Среди набора функций языка для программирования ARDUINO UNO есть такая функция: pulseln , перевести это можно как «входной импульс». Эта функция измеряет в микросекундах длительность положительного либо отрицательного перепада входного импульса. Так что измерение частоты здесь будет происходить через предварительное измерение периода. Так как длительность положительного и отрицательного полупериодов в реальном входном сигнале могут различаться, если мы хотим измерить период входных импульсов нам нужно сложить длительность положительного и отрицательного полупериодов.
В программе длительность положительного полупериода обозначена Htime, длительность отрицательного полупериода - Ltime, а длительность всего периода - Ttime.
Измерение полупериодов происходит в строках:
Htime=pulseIn(8,HIGH);
Ltime=pulseln(8,LOW);

Затем, производится вычисление полного периода в строке:
Ttime=Htime+Ltime;
Вычисление частоты, учитывая, то что это не частотомер, а цифровая шкала, сигнал на которую поступает с ГПД приемника через делитель на 100, и то что значение периода выражено в микросекундах, происходит здесь:
frequency=100000/Ttime+500;
Причем, нужно учесть значение ПЧ и то, частота ГПД ниже или выше принимаемого сигнала. В данном случае показано что частота ПЧ = 500 кГц, и частота ГПД ниже частоты входного сигнала.
Если частота ГПД выше частоты входного сигнала, то, при той же ПЧ = 500 кГц, строка такая:
frequency=100000/Ttime-500
Следует заметить, что значение ПЧ может быть и другим, просто вместо 500 нужно будет подставить фактическое значение ПЧ в данном приемнике, выраженное в кГц.
Это касается супергетеродинных схем. Но, есть же и схемы прямого преобразования. Если у конкретного приемника прямого преобразования частота ГПД равна частоте входного сигнала, то эта строка будет выглядеть так:
frequency=100000/Ttime
Если же, у приемника прямого преобразования частота ГПД в два раза ниже частоты принимаемого сигнала, то эта строка будет такая:
frequency=200000/Тtime
Затем, после того как измерено и вычислено значение частоты происходит вычисление длины волны в этой строке:
wave=299792458/frequency/1000;
Далее, следует очистка памяти дисплея и индикация. В верхнюю строку пишется значение частоты, выраженное в кГц, а в нижнюю строку пишется соответствующее значение длины волны в метрах.
Если хотите, чтобы частоту показывало только в целых значениях кГц, без десятичных дробей, нужно строку:
led.print(frequency);
изменить таким образом:
led.print(frequency,0);
Набирая программу (таблица 1) совсем не обязательно набирать то, что в строках после знака « ; » (точка с запятой). Потому что это комментарии и пояснения, никак не влияющие на работу программы.
РК 04-2017

Оставлять комментарии могут только зарегистрированные пользователи