Бегут последние деньки уходящего года. Предновогодняя суета. А для тех, у кого выдалась свободная минутка на работе, я предлагаю серию статей про самодельную отладочную плату на базе ПЛИС Altera EPM 7064.
Недавно мне потребовалось найти пару 1U корпусов под мой проект. И в качестве альтернативы новым, мы решили поискать старые приборы в 1U формате, внутренности выкинуть, а корпус использовать по назначению. Но, открыв корпус, я был в шоке! Целых четыре ПЛИС от Altera, да к тому же 5 вольтовых. Я не смог удержаться, чтобы одну из них не попробовать в деле!
Паяльной станции у меня нет, ЛУТ технологию я не практикую. Поэтому я взял строительный фен на 250 градусов и отковырял микросхему ПЛИС от платы. Переходной платы для такого корпуса у меня тоже не было, поэтому я взял обычную макетку, впаял в нее стойки и с помощью накрутки и пайки, соединил выводы микросхемы со стойками. Вывел разъем JTAG и питания, прикрутил генератор. Это все, что нужно для начала работы с микросхемой
Что можно сделать из такой маленькой ПЛИС? Радиолюбители решают такую проблему очень просто: в любой непонятной ситуации мы делаем передатчики! Из чего? Да из чего угодно, что под руку попало в данный момент! А сегодня у нас Altera EPM7064.
Что не так с Altera EPM7064?
А с ней все в порядке! Огромным преимуществом этой микросхемы является ее рабочее напряжение, равное 5 вольт. А это значит, что у нас нет проблем с ее питанием, нам не нужно согласовывать уровни, при ее соединении с любой старой ТТЛ логикой: старыми компьютерами, типа ZX Spectrum или логическими схемами на дискретных ТТЛ микросхемах.
Еще эта ПЛИС хранит конфигурацию во встроенной энергонезависимой памяти. Внешних микросхем flash памяти не требуется.
Однако, объем ее не слишком большой: всего 64 ячейки. Это не так и много. В проекте на ПЛИС Lattice нам удалось собрать часы. Там тоже было 64 ячейки. Интересно, уместится та же HDL схема в ПЛИС того же объема, только от Altera?
Делаем передатчик
На самом деле, сделать передатчик очень просто! Достаточно взять генератор определенной частоты и соединить его с антенной (про согласование, волновое сопротивление линии связи и резонансную частоту антенны пока говорить не будем). После этого, если у нас есть приемник на эту частоту и модуляцию, мы сможем принять сигнал. На небольших расстояниях, на приемник можно принимать тактовые генераторы даже от обычной платы с микроконтроллером.
Если просто включить передатчик-генератор на определенной частоте, то он не будет передавайть какой-то полезной информации. Поэтому, сигнал передатчика нужно как-то модулировать. Есть много видов модуляции.
В радиолюбительской практике, самым простым видом связи является «Телеграф» (CW). Телеграф — во многом уникальный вид связи. С одной стороны — его можно считать цифровым видом связи, и даже самым первым цифровым видом связи. С другой стороны, подготовленный человек способен декодировать этот цифровой сигнал на слух. Сейчас для этого существуют программы декодеры. Но человеческое ухо до сих пор считается наиболее точным инструментом для приема. Еще телеграф — один из самых «дальнобойных» видов связи. За счет передачи на одной частоте и низкой скорости передачи, вся энергия сигнала сосредотачивается на одной частоте, это положительно сказывается на дальности передачи. Для приема могут быть использованы узкополосные фильтры. Телеграфный сигнал состоит из точек и тире. Каждый символ телеграфного алфавита — это комбинация точек и тире. Наиболее часто применяемые буквы состоят из мЕньшего количества элементов.
Точки и тире — это факты включения передатчика. В промежутках между точками и тире, передатчик выключается, сигнал в эфир не передается. Существуют правила, по которым тире должна иметь длительность, равную трем точкам. Промежуток между точками или тире в одном символе, должен равняться длительности одной точки. Промежуток между буквами в одном слове должен равняться трем точкам. А между словами должна быть пауза не менее семи точек.
Если мы подключим к выводу ПЛИС провод небольшой длины (в качестве антенны) и подадим на этот вывод сигнал тактового генератора, то мы сможем принимать этот сигнал, как немодулированную несущую частоту. Разрешая и запрещая вывод сигнала на антенну, мы будем модулировать несущую. А формируя правильные временные интервалы для точек и тире, мы сформируем телеграфный радиосигнал.
Формирование телеграфного сигнала
Для формирования временных интервалов в долях секунды, нам нужно поделить сигнал тактового генератора. В моем случае, частота тактового генератора равна 25175000 Гц. Я решил взять 23 битный двоичный счетчик. Частота, полученная в результате будет равна:
счетчик 2^22 = 4194304
тактовая частота 25175000 Гц
итоговая частота 25175000 / 4194304 = 6 Гц
Вполне достаточно для формирования интервала в одну точку.
Теперь попробуем сформировать что-то очень простое. Например, сигнал SOS: три точки, три тире, три точки. Нарисуем временную диаграмму:
Из нее видим, что нам требуется 30 шагов. Это 5 бит. То есть к 22 битам счетчика мы сверху добавляем еще 5 бит. И у нас получается 27 бит.
Теперь логика очень простая (т.к. сложную логику мы не сможем поместить в такую маленькую ПЛИС): когда значение счетчика равно 0, 2, 4, 8, 9, 10 (и далее по диаграмме) мы выдаем единицу, иначе — ноль. Этот сигнал (CW) уже можно вывести из ПЛИС и проконтролировать его, допустим, светодиодом. А чтобы модулировать радиосигнал, мы будем выводить сигнал тактового генератора на вывод только если значение сигнала CW равно единице.
module epm7064_test(clk, out_lf, out_rf);
input wire clk;
output wire out_lf;
output wire out_rf;
reg [27:0] cnt; initial cnt <= 28'd0;
always @(posedge clk) cnt <= cnt + 1'b1;
wire [4:0] hi_bits = cnt[26:26-4]; // 5 бит старших бит счетчика для формирования символов
wire cw = (hi_bits == 5'd0) ||
(hi_bits == 5'd2) ||
(hi_bits == 5'd4) ||
(hi_bits == 5'd8) ||
(hi_bits == 5'd9) ||
(hi_bits == 5'd10) ||
(hi_bits == 5'd12) ||
(hi_bits == 5'd13) ||
(hi_bits == 5'd14) ||
(hi_bits == 5'd16) ||
(hi_bits == 5'd17) ||
(hi_bits == 5'd18) ||
(hi_bits == 5'd22) ||
(hi_bits == 5'd24) ||
(hi_bits == 5'd26);
assign out_lf = cw;
assign out_rf = cw & clk;
endmodule
Вот и все, пора включить приемник
Принимаем сигнал нашего передатчика
К сожалению, нам не подойдет вещательный приемник для нашего передатчика. Во-первых из за диапазонов частот — такой частоты просто может и не быть в вещательном приемнике. Во-вторых из за вида модуляции. Вещательный приемник будет принимать в амплитудной модуляции (АМ), поэтому, когда сигнала телеграфа не будет, то приемник будет принимать эфирный шум, а когда будет несущая, с приемнике будет тишина (т.к. несущая никак не модулирована по амплитуде). В итоге, АМ приемник будет издавать шум, прерывающийся тишиной на моменты точек и тире.
Какой нужен приемник? Для приема телеграфа нужен однополосный приемник. Буду честен, выбирая частоту я немного схитрил. У меня есть USB приемник, нижняя граница приема у которого 24 МГц, поэтому и частоту генератора я выбирал с учетом того, чтобы сигнал можно было принять на этот приемник. Такой приемник можно купить на ebay/aliexpress примерно за 500 рублей. Искать по словам R820T2. В качестве программы для приема я использую SDRSharp.
Модифицируем передатчик для приема на АМ приемник
Немного подумав, я вспомнил, что у меня есть средневолновый приемник. Частота приема 530 — 1600 КГц. Модуляция — амплитудная. Чаще всего, приемник на этот диапазон есть практически в каждой автомагнитоле. А мы собрали с сыном такой приемник из конструктора.
Для того, чтобы получить несущую частоту в диапазоне частот этого приемника, нам нужно поделить частоту тактового генератора. Если мы будем брать отдельные биты из нашего счетчика, то мы как раз и получим значения тактового генератора, поделенные на степень двойки. К примеру 4-й бит — это будет деление на 16 и результат — 1573 КГц, я выбрал 5-й бит и частоту 786 КГц (т.к. китайский переменный конденсатор оказался слегка бракованным, и не перекрывает весь диапазон частот).
Теперь нам нужно произвести амплитудную модуляцию сигнала. Нам проще — у нас телеграфный сигнал, поэтому нам достаточно прерывать несущую частоту со звуковой частотой. Получится 100% модуляция. Для приема на АМ-приемник (для работы амплитудного детектора в приемнике) этого будет достаточно. Выберем подходящий бит из счетчика-делителя частоты. Это 14-й бит, что равнозначно делению на 16384. В итоге получится частота — 1536 Гц. Эта частота находится в слышимом человеком диапазоне, и в диапазоне частот, которые способен вывести АМ приемник.
Код на Verilog нужно немного подправить:
wire audio = cnt[13]; // 14й бит - 1536 Гц - тон звуковой частоты
wire rf = cnt[ 4]; // 5й бит - ~786 RГц - радиочастота
assign out_rf = cw & rf & audio;
И у нас получилась амплитундая телеграфия.
Заключение
Для проекта использовались: ПЛИС Altera EPM7064, Quartus II 11.1, китайский программатор. Количество занятых ячеек — 30 из 64-х. А это значит, что можно усложнить проект для передачи более длинных текстов.
github.com/UA3MQJ/epm7064_cw_tx
Пожалуйста, не переживайте за Франкенштейна, очень скоро я отдам ПЛИС своему другу, а он сделает для нее достойную печатную плату.
Продолжение приключений Френки ждите уже завтра с утра!
Автор: UA3MQJ