Продолжения обсуждения темы и новые обновления будут делаться тут:
http://forum.cqham.ru/viewtopic.php?t=17803
Не секрет, что теперь при наличии синтезатора частоты обязательным элементом приемо-передающей техники становится микроконтроллер (а то и не один).
Для "оживления" своей техники я написал программу... наверное, набор заготовок, которые я в зависимости от целей модифицирую каждый раз в нужную сторону.
Тип синтезатора, в ринципе, может быть любым. Программа состоит из двух частей - "интерфейса" с оператором - та, что воспринимает кнопки, валкодер, переключает режимы и ходит по диапазонам, и часть "синтезатор" - ей надо сообщить частоты гетеродинов и она их устанавливает, по частоте настройки выбирается диапазонный фильтр и так далее. Для приемника прямого преобразования отличия только в арифметике выбора частот гетеродина, для аппаратов с кварцованными гетеродинами - частота этих гетеродинов должна быть введена (или зашита "намертво").
Тему завел для того, чтобы доводить совместно программу (коды выложены и никуда деваться не будут), пытаться сделать альтернативные управляющие программы для синтезаторов, авторы которых по тем или иным причинам не могут больше продолжать с ними возиться.
Первоначальная идея по пользовательскому интерфейсу навеяна интерфейсом Yaesu FT-100D, который стоит на столе. Наследство этого - небольшое количество кнопок и совмещение функций некоторых из них.
В каждом диапазоне запоминается последняя частота и режим работы + состояние аттенюатора + набор режимов работы
Нажатие кнопки режима переводят между четырьмя состояниями, которые могут быть из набора usb/lsb, cw/cwr, am/drm/cwz, fm. Отдельная кнопка меняет полосу пропускания для режимов (можно ssb с полосой 6 кГц послушать, например).
При переключении с ssb на cw тон сигнала не меняется (двигаются все гетеродины)
Естественно, осталась и возможность обзора всего диапазона – запоминается частота и режим вне любительских диапазонов (пока сделал – одна ниже 30 МГц и одна выше.
При проходе частоты настройки через диапазон его настройки не портятся.
Сейчас используется просто шесть (теперь семь) кнопок, присоединенных напрямую к порту процессора. Индикатор 1602.
Нынешний проект сделан под процессоры ATMEL ATMega32 или старше.
Никаких особенностей архитектуры процессора не используется (кроме возможности "на ходу" менять назначение выводов порта ввода-вывода, на котором стоит индикатор - для опроса состояния). Естественно, всё это не обязательно и может быть заменено на любой другой алгоритм работы. spi формируется программно. Всё это может облегчить перенос программы на другие архитектуры.
Написано на С без использования ассемблера.
Для компиляции используется бесплатный компилятор WINAVR, запускаемый AVR Studio. Используется 64-х битная арифметика, поддерживаемая WINAVR (http://sourceforge.net/projects/winavr). Вычисления с плавающей точкой не используются.
Обсуждаем улучшения, дополнения. Куски кода или самостоятельные доработки приветствуются. использована идея для быстрого обработчика прерываний валкодера (табличный алгоритм) по обеим фронтам сигналов от валкодера без формирователей отдельный счётных импульсов.
Например, какой алгоритм работы многодиапазонного аппарата с vfo a/b должен быть? Что делать с rit? Июль 2008: сделал split
----
29 марта 2008:
выложена версия, в которой сделан опрос клавиатуры по прерываниям. Найдена ошибка в коде, сгенерированном CodeVisionAVR - неправильно ставился прескалер у таймера T0 (вместо 1024 - с кодом 7 - ставился код 5).
----
5 апреля 2008:
изменилось расположение кнопок (и их алтернативные функции).
По подсказке в форуме добавлен (непроверенный) код для управления AD9832.
----
7 апреля 2008:
Добавлено ожидание готовности про чтении/записи NVRAM. Для возможности использования SPI EEPROM, если нет SPI FRAM (помните про огранияенный ресурс!).
В FRAM соответствующий битик слова состояния всегда установлен в состояние READY. При отсутствующем EEPROM или FRAM будет висеть.
Для отказа от ожидания закомментарить строчку в product.h
----
14 апреля 2008:
Добавлена работа с внутренним EEPROM прцессора (с соответствующим #define) - с обходом запоминания частоты после каждой остановки валкодера. Ресурс по циклам записи мал, но может позволить посмотреть, как оно работает.
Ускоренна работа функций выбора диапазона ГУН и фильтров - переход на 16-битную арифметику с приблизительными расчётами.
----
18 апреля 2008:
В файле encoder.c
Включает работу с валкодером без формирования счётных импульсов.Код:#define ENCODER_MULTICLICK 1
----
20 апреля 2008:
Устранено несколько мелких багов - при при ускоренной перестройке вниз по частоте - происходил переход через "упор".
Добавленоо сохранение в NVRAM настроек инженерного меню - частоты скатов фильтров, CW Pitch, режим валкодера.
Проверен в работе вариант обработчика валкодера без внешних формирователей счётных импульсов - в связи с этим в tc1.c оставлен шаг перестройки 10 герц для SSB и телеграфа (вместо 50 как раньше).
----
11 мая 2008:
Устранена ошибка в драйверах AD9852/54 - проявлялась при попытке работать со внутренним умножителем (найдено при отладке паралельного проекта - firmware для USB свип-генератора).
----
22 мая 2008:
Добавлена оттестированная коифигурация синтезатора с двума AD9834 и FTW 28 бит (как версия внутри MODEL_64455).
Исправлена описка в обслуживании AD9832.
----
30 мая 2008:
Добавлена программная коррекция частоты опорника (через меню) - для случаем использования дешёвых генераторов без подстройки частоты.
----
02 июня 2008:
Исправлены (подкорректированы) параметры формата при подстройке параметров в инженерном меню. Частоты срезов фильтров теперь хранятся в виде смещения и базы (сделано для экономии ресурсов процессора - смещение 16-ти битное). Это один из шагов для запуска управления синтезаторами транссиверов с преобразованием "вниз".
Да, на момент выклажывания этого обновления проекта количество скачиваний архива исходников - 447.
----
15 июня 2008:
Подготовлена структура программы для работы с VFOA/VFOB
----
02 июля 2008:
Добавлена обработка префиксной клавиши - для расширения функций клавиатуры. Добавлен таймер - ограничитель нахождения в меню и состояния префиксной клавиши. Добавлено отключения УНЧ на 20 мс при переключении режимов и диапазонов. Переключение фильтров ПЧ сделано по префиксной клавише - освободившаяся клавиша будет переключать VFOA/VFPB
----
04 июля 2008:
Добавлена обработка входа PTT - переключение на передачу (с формирование телеграфного сигнала от dds последнего гетеродина.
----
07 июля 2008:
Сделан режим split - и индикация. Переключение делается одной клавишей (нажатие или удержание). Первое нажатие дает возможность перестройки в одном гетеродине, не меняя настройки (и режима работы) с другим. Передача идет всегда на "противоположном " гетеродине.
Нажатия меняют гетеродины местами. Удержанное нажатие - оставляет текущую частоту и режим неизменными, но выключает режим split.
все настройки обеих VFO и сам режим сохраняются при выключении питания (сдох бензоагрегат, например - все настройки восстановились после включения назад).
Отдельно запоминаются (на каждый диапазон и каждый vfo) режим работы и положение аттенюатора.
Добавлена обработка нажатия на тангенту или педаль - с соответствующим программированием гетеродинов.
Добавлен файл buttons.xls с кратким описанием функций клавиш.
----
13 июля 2008:
режим CW (CW/CWR) сделан аналогично тому, как это работает в FT-100: при приёме с включенными широкими фильтрами (у которых признак narrow = 0), частота BFO ставится такая же. как и при приёме SSB (USB/LSB). Частота приёма - смещена относительно нулевых биений на расстояние CW PITCH (обычно - 700 Герц).
При переключении фильтров и/или режимов работы без смены боковой полосы тон принимаемых сигналов не меняется.
----
15 июля 2008:
мелкие доработки - выправлял некрасивые на вид конструкции.
Скачано 499 раз!
----
19 июля 2008:
Исправлена опечатка в имени порта индикатора для версии под ATMEGA32. ПОльзователь форума под ником Explorer начал тестировать!
----
22 июля 2008:
Исправлена ошибка в инициализации таймера при компиляции под ATMEGA32
----
28 июля 2008:
Исправлена ошибка в вычислении частот гетеродинов в режимах DRM и DIGI (было перепутано местами два режима).
----
22 августа 2008:
При вычислении частоты второго гетеродина теперь используется значение частоты опорного генератора с коррекцией, вместо константы. Таким образом я избавился от странной погрешности при коррекции опорного генератора по приёму стандартов частот в эфире на разных диапазонах.
Добавлен define NVRAMEXTCS - для различия вариантов компиляций - при использовании для cs микросхемы NVRAM отдельного вывода процессора. При неопределении этой константы - NVRAM включена на выход дешифратора синтезатора (для версии синтезатора с совмещением на одной плате с еонтроллером).
Добавлены процедуры поддерхдки трёхбайтовой адресации spi nvram eeprom.
----
1 сентября 2008:
Исправлены ошибки, внесённые предидущими доработками. Проверенно "на железе" синтезатора, совмещённого с контроллером.
----
5 сентября 2008:
функция переключения фильтра перенесена на кнопку переключение режимов - после префиксной кнопки F.
планируется ввести явное включение и выключение режима split, сохранив VFO A/VFO B работающими всегда. Удержанное нажатие кнопки переключение VFO будет выполнять функцию VFO A=B (активный VFO копируется в фоновый)
расширена функциональность подпрограммы модификации инженерных настроек - теперь можифицируем не только 16-ти битные параметры, но и 8-битные. Не смотря на увеличение сложности программы, общий объём занимаемой памяти программ и данных уменьшился (ради чего и делалось).
Некоторые текстовые строки перенесены в память программ.
----
9 сентября 2008:
Добавлен автоповтор в драйвер клавиатуры. Автоповтор селективный, сейчас только для двух клавиш переключения диапазонов (они же перебирают пункты меню).
Диапазон 28 МГц разбит на два поддиапазона. Жду предложений по разбивке остальных (21 и 14 МГц).
----
11 сентября 2008:
Добавлен файл architecture.doc - с попыткой объяснения структуры управляющей пограммы.
----
24 сентября 2008:
Исправлен баг в управлении диапазонными фильтрами.
Добавлена регулировка подразумеваемого деления частоты между выходом первого гетеродина и входом смесителя. Добавлена функция регулируемого замедления работы с валкодером - при использовании "многошаговых" валкодеров и режима с "учетверением" их разрешения - это когда без внешнего
формирователя счётных импульсов.
Подготовлен "каркас" для считывания состояния кнопок через АЦП.
----
30 сентября 2008:
Добавлен #define для управлением типом индикатора - WH2002 или WH1602. На широком (WH2002) выводится дополнительно информация о режиме split.
----
04 декабря 2008:
Добавлен режим general coverage - переключение диапазонов шагает по 100 кГц