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

Тема: DDC/DUC трансивер на базе OSA103 Mini

  1. #421
    аа, понял, спс
    Но насколько я помню возможности формирования сигнала TX у HDSDR уступают ZEUS, и это еще мягко сказано )
    конечно, можно прикрутить внешний стек обработок
    73! Сергей


  2. #422

    Регистрация
    03.01.2017
    Адрес
    Белгород
    Сообщений
    1,455
    Записей в дневнике
    1
    NikB,
    Здравствуйте .
    Какой band декодер вы применяете в этой конструкции что на видео?
    Диапазоны по частоте в режиме tx определяются?

  3. #423
    Добрый день!
    Бэндкодер реализован на adrduino + внешний цап управляемый по SPI.
    Вот код:

    Скрытый текст

    #define F_CPU 16000000UL

    #include <avr/io.h>
    #include <stdint.h>
    #include <avr/interrupt.h>
    #include "SPI.h"

    int LD = 8;
    int CS = 10;

    int A = 2;
    int B = 3;
    int C = 4;
    //int v_port = 9;

    word outputValue = 0; // a word is a 16-bit number
    byte data = 0; // and a byte is an 8-bit number

    void setup() {

    pinMode(A, OUTPUT);
    pinMode(B, OUTPUT);
    pinMode(C, OUTPUT);
    //pinMode(v_port, OUTPUT);

    digitalWrite(A, HIGH);
    digitalWrite(B, HIGH);
    digitalWrite(C, HIGH);

    pinMode(CS, OUTPUT);
    pinMode(LD, OUTPUT);
    SPI.begin(); // wake up the SPI bus.
    SPI.setDataMode(SPI_MODE3);
    SPI.setBitOrder(MSBFIRST);
    }

    //Decoder
    void switch_bpf(uint8_t n)
    {
    if (n < 7)
    {
    if (n == 0)
    {
    digitalWrite(A, LOW);
    digitalWrite(B, LOW);
    digitalWrite(C, LOW);
    }
    if (n == 1)
    {
    digitalWrite(A, HIGH);
    digitalWrite(B, LOW);
    digitalWrite(C, LOW);
    }
    if (n == 2)
    {
    digitalWrite(A, LOW);
    digitalWrite(B, HIGH);
    digitalWrite(C, LOW);
    }
    if (n == 3)
    {
    digitalWrite(A, HIGH);
    digitalWrite(B, HIGH);
    digitalWrite(C, LOW);
    }
    if (n == 4)
    {
    digitalWrite(A, LOW);
    digitalWrite(B, LOW);
    digitalWrite(C, HIGH);
    }
    if (n == 5)
    {
    digitalWrite(A, HIGH);
    digitalWrite(B, LOW);
    digitalWrite(C, HIGH);
    }
    if (n == 6)
    {
    digitalWrite(A, LOW);
    digitalWrite(B, HIGH);
    digitalWrite(C, HIGH);
    }
    }
    }
    //Decoder_end

    //Freq
    const uint32_t freqs[] = { // верхние границы диапазонов
    450000 // 0..450
    , 800000 //450..800
    , 1900000 // 800 .. 1.9
    , 5000000 // 1.9 .. 5
    , 12000000 // 5 .. 12
    , 22000000 // 12 .. 22
    , 33000000 // 22 .. 33
    , 0xFFFFFFFFUL // если выше - включаем bypass
    };
    //Freq_END

    //DAC_V_out
    const uint32_t dac_out[] = { // верхние границы диапазонов
    1900 //0
    , 1880 //1
    , 1875 //2
    , 1870 //3
    , 1855 //4
    , 1850 //5
    , 1845 //6
    , 1830 //7
    , 1825 //8
    , 1820 //9
    , 1810 //10
    , 1795 //11
    , 1790 //12
    , 1785 //13
    , 1775 //14
    , 1760 //15
    , 1755 //16
    , 1750 //17
    , 1745 //18
    , 1725 //19
    , 1720 //20
    , 1710 //21
    , 1700 //22
    , 1680 //23
    , 1660 //24
    , 1610 //25
    , 1600 //26
    , 1840 //27
    };
    //DAC_END


    inline void uart_init(void)
    {
    UBRR0 = 0; // 1Mbps
    UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // 8 бит данных, 1 стоп-бит, без контроля чётности
    UCSR0B = (1 << RXEN0); // разрешить прием данных
    }


    //*** Инициализация таймера 1, частота ~16 КГц ***//
    inline void timer_init(void)
    {
    //TCCR1A = 0; // режим CTC
    TCCR1B = (1 << WGM12) | (1 << CS12) | (1 << CS10); // fOSC/1024
    //OCR1A = 0xFFFF; // считать до упора
    }



    //*** Прием данных по UART ***//
    unsigned char uart_receive(void)
    {
    while (!(UCSR0A & (1 << RXC0)));
    return UDR0;
    }

    void loop()
    {
    //////////
    //outputValue = 1720;

    // delay(1000);
    //////////
    //
    uint8_t x; // индекс принятого байта в буфере
    uint8_t buf[5]; // буфер приёма
    uint16_t tmr; // предыдущее состояние таймера
    #define FREQ (*(uint32_t*)buf)
    #define RXTX (buf[4])
    #define TXFLAG 0x80
    //_end
    uart_init();
    timer_init();
    tmr = TCNT1;
    x = 0;
    while (x < 5)
    {
    buf[x++] = uart_receive();
    if (TCNT1 - tmr > 600) // если на приём ушло много времени,
    x = 1; // ... то это первый байт пакета
    tmr = TCNT1; // обновим таймер
    }

    for (uint8_t i = 0; i < sizeof(freqs) / sizeof(freqs[0]); i++)
    {
    if (FREQ <= freqs[i])
    {
    switch_bpf(i);
    //1
    if (FREQ >= 450000 && FREQ <= 500000){outputValue=dac_out[12];}
    if (FREQ >= 500000 && FREQ <= 550000){outputValue=dac_out[21];}
    if (FREQ >= 550000 && FREQ <= 800000){outputValue=dac_out[26];}
    //
    //2
    if (FREQ >= 800000 && FREQ <= 900000){outputValue=dac_out[0];}
    if (FREQ >= 1000000 && FREQ <= 1100000){outputValue=dac_out[2];}
    if (FREQ >= 1100000 && FREQ <= 1200000){outputValue=dac_out[3];}
    if (FREQ >= 1200000 && FREQ <= 1400000){outputValue=dac_out[5];}
    if (FREQ >= 1400000 && FREQ <= 1600000){outputValue=dac_out[15];}
    if (FREQ >= 1600000 && FREQ <= 1800000){outputValue=dac_out[25];}
    if (FREQ >= 1800000 && FREQ <= 1900000){outputValue=dac_out[25];}
    if (FREQ >= 1900000 && FREQ <= 2500000){outputValue=dac_out[0];}
    //
    //3
    if (FREQ >= 2500000 && FREQ <= 3000000){outputValue=dac_out[0];}
    if (FREQ >= 3000000 && FREQ <= 3400000){outputValue=dac_out[2];}
    if (FREQ >= 3400000 && FREQ <= 4000000){outputValue=dac_out[7];}
    if (FREQ >= 4000000 && FREQ <= 4500000){outputValue=dac_out[11];}
    if (FREQ >= 4500000 && FREQ <= 5000000){outputValue=dac_out[17];}
    //if (FREQ >= 5000000 && FREQ <= 5500000){outputValue=dac_out[13];}
    //
    //4
    if (FREQ >= 5000000 && FREQ <= 6800000){outputValue=dac_out[0];}
    if (FREQ >= 6800000 && FREQ <= 7000000){outputValue=dac_out[1];}
    if (FREQ >= 7000000 && FREQ <= 8000000){outputValue=dac_out[5];}
    if (FREQ >= 8000000 && FREQ <= 9000000){outputValue=dac_out[11];}
    if (FREQ >= 10000000 && FREQ <= 11000000){outputValue=dac_out[19];}
    if (FREQ >= 11000000 && FREQ <= 12000000){outputValue=dac_out[24];}
    if (FREQ >= 12000000 && FREQ <= 13000000){outputValue=dac_out[27];}
    //
    //5
    if (FREQ >= 13000000 && FREQ <= 14000000){outputValue=dac_out[8];}
    if (FREQ >= 14000000 && FREQ <= 15000000){outputValue=dac_out[10];}
    if (FREQ >= 15000000 && FREQ <= 16000000){outputValue=dac_out[13];}
    if (FREQ >= 16000000 && FREQ <= 17000000){outputValue=dac_out[16];}
    if (FREQ >= 18000000 && FREQ <= 19000000){outputValue=dac_out[19];}
    if (FREQ >= 19000000 && FREQ <= 20000000){outputValue=dac_out[24];}
    if (FREQ >= 20000000 && FREQ <= 21000000){outputValue=dac_out[25];}
    if (FREQ >= 21000000 && FREQ <= 22000000){outputValue=dac_out[26];}
    //
    //6
    if (FREQ >= 22000000 && FREQ <= 33000000){outputValue=dac_out[10];}
    //
    digitalWrite(LD, HIGH);
    digitalWrite(CS, LOW);
    data = highByte(outputValue);
    SPI.transfer(data);
    data = lowByte(outputValue);
    SPI.transfer(data);
    digitalWrite(CS, HIGH);
    digitalWrite(LD, LOW);
    break;
    }
    }

    }


    Оса просто передает на вход ардуины свою частоту, не важно прием или передача.

  4. #424

    Регистрация
    03.01.2017
    Адрес
    Белгород
    Сообщений
    1,455
    Записей в дневнике
    1
    NikB,
    Доброго дня.
    А как аппаратно происходит связь OSы с контроллером ардуины? Нет у Вас набросков схемного решения?

  5. #425
    Добрый день!

    Порт ардуино rx0 подключен к порту AUX output Осы. Данные передаются в формате RS232. Подробнее в посте #127

  6. Спасибо от Radiotester

Страница 43 из 43 ПерваяПервая ... 3340414243

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

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

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

Похожие темы

  1. Измерительный прибор OSA103 Mini
    от Sergey_gh в разделе Измерения
    Ответов: 4394
    Последнее сообщение: 05.08.2020, 17:02
  2. СДР трансивер на базе Red Pitaya
    от Kia2700d в разделе Software Defined Radio (SDR), Digital Radio Mondiale (DRM)
    Ответов: 1031
    Последнее сообщение: 21.07.2020, 18:42
  3. Трансивер на базе приёмника КАРЛСОН
    от валерий радио в разделе Трансиверы, приемники КВ/УКВ
    Ответов: 11
    Последнее сообщение: 15.12.2014, 00:49
  4. Вседиаппазонный КВ трансивер на базе радиостанции Ангара 1
    от Владимирдесага в разделе Модификация радиостанций
    Ответов: 3
    Последнее сообщение: 26.03.2009, 19:51
  5. Трансивер на базе фирменного фильтра
    от DerBear в разделе Технический кабинет
    Ответов: 12
    Последнее сообщение: 02.03.2006, 13:47

Ваши права

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