Уважаемые посетители! Форум CQHAM.RU существует исключительно за счет показа рекламы. Мы будем благодарны, если Вы не будете блокировать рекламу на нашем Форуме. Просим внести cqham.ru в список исключений для Вашего блокировщика рекламы.
Страница 1 из 16 123411 ... ПоследняяПоследняя
Показано с 1 по 10 из 158

Тема: Программа для любого трансивера или приёмника

  1. #1
    Аватар для Genadi Zawidowski
    Регистрация
    22.07.2004
    Адрес
    Санкт-Петербург
    Сообщений
    11,096
    Записей в дневнике
    20
    Позывной
    UA1ARN

    Программа для любого трансивера или приёмника

    Продолжения обсуждения темы и новые обновления будут делаться тут:
    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 кГц
    Вложения Вложения
    ... Я там глубину сам промерял!


  2. #2
    Модератор
    Регистрация
    23.10.2005
    Адрес
    Ялта
    Сообщений
    13,683
    Спасибо.
    Очень своевременно.
    Сергей sgk.
    Сергей sgk.

  3. #3
    Аватар для Genadi Zawidowski
    Регистрация
    22.07.2004
    Адрес
    Санкт-Петербург
    Сообщений
    11,096
    Записей в дневнике
    20
    Позывной
    UA1ARN
    "Мучает" вопрос, как сделать:

    Сейчас шаг перестройки сделан фиксированным, "зашитым" в программе (на каждый режим работы свой). Как должна работать функция смены шага?
    Шаг - это может быть свойство определенного режима работы или на каждый диапазон свой. Но последний вариант потребует выполнения условия - если, перестраиваясь "насквозь" по всему диапазону, мы "въехали" в другой, то при переходе кнопками по иапазонам кроме режима работы и частоты запомнится и новый шаг настройки, который может отличаться от ранее установленного (а вообще-то, в ft-100 сделано именно так - на каждый диапазон свой шаг в каждом режиме работы).

    Как совмещать кнопки?
    На каждую из них легко вешается две функции - на быстрое и "медленное" (удерживаем пока не сработает) нажатие.

    Например, сейчас совмещены функции "LOCK" и грубого шага перестройки (20 кГц). Вместо последней функции делается изменение шага, а грубый шаг будет выполняться "интеллектуальны м валкодером".

    Еще совмещено включение аттенюатора (нажатие) и переключение режимов АРУ (удержание).
    Да, АРУ переключается между "auto", "fasf", "slow" и "off". Auto - в зависимости от режима работы выбираетя или быстрая или медленная.
    И это не свойства диапазона, а общая настройка.
    Стоит ли так делать? Удобно ли?
    ... Я там глубину сам промерял!

  4. #4
    Гена, предлагаю вычисление управляющего слова ддс делать так, тогда будет совместимость со всеми м/контроллерами.
    Здесь данные для частоты тактирования 432МГц и сразу с учетом деления на 4 (для прямого преобразования)

    code unsigned long DDS_MULT[DDS_FREQ_TO_FTW_DIGI TS] = { 39, 7, 6, 8, 2, 1, 5, 7, 0 }; //432MHz F=4x
    code unsigned long DDS_DIVISOR[DDS_FREQ_TO_FTW_DIGI TS - 1] = { 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000 };


    void ddsSetFreq(unsigned long freq)
    {
    unsigned char i;
    unsigned long ftw;

    ftw = freq * DDS_MULT[0];

    for (i = 0; i < DDS_FREQ_TO_FTW_DIGI TS - 1; ++i)
    ftw += (freq * DDS_MULT[i+1]) / DDS_DIVISOR[i];

    ddsSetFTW (ftw);
    }
    Александp, Belrig.by

  5. #5
    Аватар для Genadi Zawidowski
    Регистрация
    22.07.2004
    Адрес
    Санкт-Петербург
    Сообщений
    11,096
    Записей в дневнике
    20
    Позывной
    UA1ARN
    Спасибо, буду думать. Я не смог найти ранее присланный Вами алгоритм.

    Можно поинтересоваться алгоритмом расчета коэффециентов в массиве DDS_MULT - например, для заполнения его на start-up или автоматизированного расчета утилитой при компиляции?

    Для случая прямого преобразования Ваш алгоритм подойдет (включу в программу).

    Просто, в алгоритме расчета ftw для схемы синтезатора с делением частоты после dds присутствуют внутренние значения для частот в несколько раз выше dds clock (это такое внутреннее представление) - гнапример, при делении на 21 и тактовой DDS 12.8 МГц, верхняя рабочая частота (около 130 МГц) больше чем число, представимое 32 (или 28) битами в (21 * 10) раз.
    Это позволяет при 28 битах FTW получить точность на верхнем крае диапазона (130 МГц) менее одного герца (при тактовой dds 32 МГц).
    ... Я там глубину сам промерял!

  6. #6
    Чтобы получить эти коэф-ты нужно 2^32 разделить на частоту опорного генератора (в Гц) и раскидать разряды результата по этим множителям. т.е. старший равен целой части результата, а потом поразрядно, для последнего надо смотреть округление.

    Например: частота опорного генератора 400МГц, тогда
    2^32/400000000=10,7374182 4
    тогда множители
    10-7-3-7-4-1-8-2-4

    Здесь"повезло" и получилось без остатка
    Александp, Belrig.by

  7. #7
    Аватар для Genadi Zawidowski
    Регистрация
    22.07.2004
    Адрес
    Санкт-Петербург
    Сообщений
    11,096
    Записей в дневнике
    20
    Позывной
    UA1ARN
    Попробую... Наверное что-то может получиться хорошее, если вместо десятичной системы (и весов от 10) попробовать 16 использовать.
    ... Я там глубину сам промерял!

  8. #8
    Ну да, можно ускорить прилично это дело
    Александp, Belrig.by

  9. #9
    Аватар для Genadi Zawidowski
    Регистрация
    22.07.2004
    Адрес
    Санкт-Петербург
    Сообщений
    11,096
    Записей в дневнике
    20
    Позывной
    UA1ARN
    Цитата Сообщение от Alex007
    Ну да, можно ускорить прилично это дело
    В предложенном алгоритме семь умножений и семь делений 32-битных чисел на одно преобразование... вместо одного деления и одного умножений 64-х битного. Ускорит вряд ли, а улучшить переносимость возможно.

    По UI есть мысли?
    ... Я там глубину сам промерял!


  10. #10
    По UI - сам пока нечто похожее сделал, так как индикатор не позволяет выполнить полноценные меню и подменю. Для графического дисплея тоже думаю оставлять альтернативные функции для кнопок, а само их число (кнопок) сократить до 6. (Сейчас 9).
    Александp, Belrig.by

Страница 1 из 16 123411 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 16
    Последнее сообщение: 19.07.2011, 13:16
  2. Трансиверизация SDR приёмника
    от в разделе Для начинающих
    Ответов: 1
    Последнее сообщение: 12.01.2010, 17:38
  3. ГПД для приёмника ПП
    от lado в разделе Для начинающих
    Ответов: 15
    Последнее сообщение: 19.10.2009, 18:17
  4. ДПФ приёмника, трансивера.
    от в разделе Технический кабинет
    Ответов: 13
    Последнее сообщение: 22.11.2007, 23:37
  5. Программа для СВ-трансивера
    от svd в разделе Технический кабинет
    Ответов: 7
    Последнее сообщение: 24.12.2006, 19:31

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •